Keywords

These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.

1 The Main Difficulty

The general conservation equation dealt with in previous chapters can be reformed into an equation similar to the continuity and momentum equations. Yet the numerical techniques presented up till now are not enough to allow for the resolution of the Navier-Stokes equations. Solving general fluid flows requires an algorithm [1] that can deal with the pressure velocity coupling. To understand this issue, the continuity and momentum equations are reproduced below.

$$ \frac{\partial \rho }{\partial t} + \nabla \cdot \left( {\rho {\mathbf{v}}} \right) = 0 $$
(15.1)
$$ \frac{\partial }{\partial t}\left[ {\rho {\mathbf{v}}} \right] + \nabla \cdot \left\{ {\left. {\rho {\mathbf{vv}}} \right\}} \right. = - \nabla p + \nabla \cdot \left\{ {\left. {\mu \left[ {\nabla {\mathbf{v}} + \left( {\nabla {\mathbf{v}}} \right)^{\text{T}} } \right]} \right\} + {\mathbf{f}}_{b} } \right. $$
(15.2)

That Eqs. (15.1) and (15.2) are nonlinear is not by itself an unsurmountable difficulty, since such a problem is usually handled by adopting an iterative approach. Moreover, Eq. (15.2) is a vector equation, which when written in terms of its components results in a system of scalar equations that can be solved sequentially. Furthermore, the stress tensor can be reformulated into a diffusion-like term and treated implicitly, with its second part (i.e., the transpose of the velocity gradient) evaluated explicitly based on previous iteration values and added to the source. The main issue that cannot be addressed directly with the numerics of the general scalar equation, is the unavailability of an explicit equation for computing the pressure field that appears in the momentum equation.

A review of Eqs. (15.1) and (15.2) reveals that while the velocity field can be computed using the momentum equation, the pressure field appearing in the momentum equation cannot be computed directly from the continuity equation. This strong yet implicit coupling can be made more evident by rewriting the set of equations in a matrix form as

$$ {\mathbf{Au}} = \left( {\begin{array}{*{20}c} {\mathbf{F}} & {{\mathbf{B}}^{\text{T}} } \\ {\mathbf{B}} & {\mathbf{0}} \\ \end{array} } \right)\left( {\begin{array}{*{20}c} {\mathbf{v}} \\ {\mathbf{P}} \\ \end{array} } \right) = \left( {\begin{array}{*{20}c} {{\mathbf{f}}_{b} } \\ {\mathbf{0}} \\ \end{array} } \right). $$
(15.3)

In this form, Eq. (15.3) shows a zero diagonal block in the system, which is a characteristic of saddle point problems, indicating that it cannot sustain the solution of the pressure and velocity fields by any iterative mean. Consequently, an equation for pressure is required and should be derived.

One approach is to simply reformulate the system of momentum and continuity equations by decomposing matrix A into a lower (L) and an upper (U) triangular matrices as

$$ {\mathbf{A}} = \left( {\begin{array}{*{20}c} {\mathbf{F}} & {{\mathbf{B}}^{\text{T}} } \\ {\mathbf{B}} & {\mathbf{0}} \\ \end{array} } \right) = \left( {\begin{array}{*{20}c} {\mathbf{F}} & \text{0} \\ {\mathbf{B}} & { - {\mathbf{BF}}^{ - 1} {\mathbf{B}}^{\text{T}} } \\ \end{array} } \right)\left( {\begin{array}{*{20}c} {\mathbf{I}} & {{\mathbf{F}}^{ - 1} {\mathbf{B}}^{\text{T}} } \\ {\mathbf{0}} & {\mathbf{I}} \\ \end{array} } \right) = {\mathbf{LU}} $$
(15.4)

where the term −BF −1 B T is the Schur complement matrix.

This is in essence the approach that needs to be followed in order to iteratively solve the Navier-Stokes equations. This technique is embodied in the classical segregated SIMPLE (Semi Implicit Method for Pressure Linked Equations) algorithm of Patankar and Spalding [13].

The solution procedure is based on reformulating the Navier-Stokes equations in terms of a momentum and a pressure equation, which are then discretized and solved sequentially. The pressure equation is constructed by combining the semi-discretized momentum and continuity equations (approximation of the Schur complement matrix).

The algorithm is driven by a Picard type iterative procedure during which the momentum equation is solved using the pressure field of the previous iteration. The resulting velocity field conserves momentum but not necessarily mass. This velocity field is then used to construct the pressure equation whose solution is used to correct both the pressure and velocity fields so as to enforce mass conservation. A new iteration is then started and the sequence is repeated until the velocity and pressure fields satisfy both mass and momentum conservation.

This algorithm can be described in matrix form as

$$ \left( {\begin{array}{*{20}c} {\mathbf{I}} & {{\mathbf{D}}^{ - 1} {\mathbf{B}}^{\text{T}} } \\ {\mathbf{0}} & {\mathbf{I}} \\ \end{array} } \right)\left( {\begin{array}{*{20}c} {\mathbf{v}} \\ {\mathbf{p}} \\ \end{array} } \right) = \left( {\begin{array}{*{20}c} {{\mathbf{v}}^{{*}} } \\ {{\mathbf{p}}^{{*}} } \\ \end{array} } \right) $$
(15.5)

followed by an update to the velocity field using

$$ \left( {\begin{array}{*{20}c} {\mathbf{F}} & {\mathbf{0}} \\ {\mathbf{B}} & { - {\mathbf{BD}}^{ - 1} {\mathbf{B}}^{\text{T}} } \\ \end{array} } \right)\left( {\begin{array}{*{20}c} {\mathbf{v}}^{{*}} \\ {\mathbf{p}}^{{*}} \\ \end{array} } \right) = \left( {\begin{array}{*{20}c} {{\mathbf{f}}_{b} } \\ {\mathbf{0}} \\ \end{array} } \right) $$
(15.6)

where in Eqs. (15.5) and (15.6) F −1 is approximated by its inverse diagonal, D −1, and the superscript (*) refers to intermediate values at the current iteration. The steps required are summarized as follows:

  • Solve: Fv * = f b

  • Solve: −BD −1 B T p * = −Bv *

  • Update: v = v * − D 1 B T p *

  • Update: p = p *

This kind of splitting is similar to that used in the SIMPLE family of algorithms, which is the subject of this chapter.

2 A Preliminary Derivation

The difficulties faced in developing a solution algorithm for incompressible flow problems will be highlighted by performing the discretization in a one dimensional space over the uniform grid displayed in Fig. 15.1. For simplicity, the flow is assumed to be steady. The simplified continuity and momentum equations (written in conservative form) are given by

Fig. 15.1
figure 1

One dimensional domain

$$ \frac{{\partial \left( {\rho u} \right)}}{\partial x} = 0 $$
(15.7)
$$ \frac{{\partial \left( \rho {uu} \right)}}{\partial x} = \frac{\partial }{\partial x}\left( {\mu \frac{\partial u}{\partial x}} \right) - \frac{\partial p}{\partial x} $$
(15.8)

2.1 Discretization of the Momentum Equation

The discretization of the momentum equation starts by integrating Eq. (15.8) over element C shown in Fig. 15.1 to yield

$$ \int\limits_{{V_{C} }} {\frac{{\partial \left( {\rho uu} \right)}}{\partial x}} dV{ = }\int\limits_{{V_{C} }} {\frac{\partial }{\partial x}\left( {\mu \frac{\partial u}{\partial x}} \right)} dV - \int\limits_{{V_{C} }} {\frac{\partial p}{\partial x}} dV $$
(15.9)

The volume integrals of the convection and diffusion terms in Eq. (15.9) are then transformed into surface integrals by invoking the divergence theorem to give

$$ \int\limits_{{\partial V_{C} }} {\left( {\rho uu} \right)} dy = \int\limits_{{\partial V_{C} }} {\mu \frac{\partial u}{\partial x}} dy - \int\limits_{{V_{C} }} {\frac{\partial p}{\partial x}} dV $$
(15.10)

Representing the surface integrals by summation of fluxes over the faces of the element, and using a single Gaussian point for the face integrals, the semi-discretized forms of the left and right hand sides of Eq. (15.8) become

$$ \underbrace {{\left( {\rho u\Delta y} \right)_{e} }}_{{\dot{m}_{e} }}u_{e} + \underbrace {{ - \left( {\rho u\Delta y} \right)_{w} }}_{{\dot{m}_{w} }}u_{w} = \left( {\mu \frac{\partial u}{\partial x}\Delta y} \right)_{e} - \left( {\mu \frac{\partial u}{\partial x}\Delta y} \right)_{w} - \int\limits_{{V_{C} }} {\frac{\partial p}{\partial x}} dV $$
(15.11)

which can be rewritten as

$$ \underbrace {{\dot{m}_{e} u_{e} + \dot{m}_{w} u_{w} }}_{Convection} - \underbrace {{\left[ {\left( {\mu \frac{\partial u}{\partial x}\Delta y} \right)_{e} - \left( {\mu \frac{\partial u}{\partial x}\Delta y} \right)_{w} } \right]}}_{Diffusion} = - \int\limits_{{V_{C} }} {\frac{\partial p}{\partial x}} dV $$
(15.12)

The convection and diffusion terms can be discretized using any of the techniques described in previous chapters to yield an algebraic equation of the form

$$ a_{C}^{u} u_{C} + \sum\limits_{F \sim NB\left( C \right)} {\left( {a_{F}^{u} u_{F} } \right) = b_{C}^{u} - } \int\limits_{{V_{C} }} {\frac{\partial p}{\partial x}} dV $$
(15.13)

The discretization of the pressure term is deferred till after the discretization of the continuity equation.

2.2 Discretization of the Continuity Equation

The discretized form of the continuity equation is obtained by integrating Eq. (15.7) over element C displayed in Fig. 15.1 to give

$$ \int\limits_{{V_{C} }} {\frac{{\partial \left( \rho{u} \right)}}{\partial x}} dV = 0 $$
(15.14)

Again making use of the divergence theorem to transform the volume integral into a surface integral and then into summation of fluxes over the faces of the element, the discrete form of the continuity equation is obtained as

$$ \sum\limits_{f \sim nb(C)} {(\rho u\Delta y)_{f} } = (\rho u\Delta y)_{e} - (\rho u\Delta y)_{w} = 0 $$
(15.15)

or

$$ \sum\limits_{f \sim nb(C)} {\dot{m}_{f} = \, } \dot{m}_{e} + \dot{m}_{w} = 0 $$
(15.16)

2.3 The Checkerboard Problem

The discretization of the pressure term may be accomplished by adopting either of the following two approaches. In the first approach, the volume integral is computed via a single Gaussian integration point resulting in

$$ \int\limits_{{V_{C} }} {\frac{\partial p}{\partial x}} dV = \left( {\frac{\partial p}{\partial x}} \right)_{C} V_{C} $$
(15.17)

Using a central difference scheme, the discretized form of Eq. (15.17) is obtained as

$$ \int\limits_{{V_{C} }} {\frac{\partial p}{\partial x}} dV = \frac{{p_{E} - p_{W} }}{{2\Delta x}}V_{C} $$
(15.18)

In the second approach, the volume integral of the pressure gradient term is transformed into a surface integral such that

$$ \int\limits_{{V_{C} }} {\frac{\partial p}{\partial x}} dV = \int\limits_{{\partial V_{C} }} {p\,dy} $$
(15.19)

Rewriting the surface integral as a summation of fluxes over the faces of the element, Eq. (15.19) becomes

$$ \int\limits_{{V_{C} }} {\frac{\partial p}{\partial x}} dV = \int\limits_{{\partial V_{C} }} {p\,dy} = \, p_{e}\Delta y_{e} - \, p_{w}\Delta y_{w} = \left( {p_{e} - p_{w} } \right)\Delta y = \left( {p_{e} - \, p_{w} } \right)\frac{{V_{C} }}{{\Delta x}} $$
(15.20)

Selecting a linear interpolation profile for the variation of pressure, the pressure gradient term can be rewritten as a function of pressure values at the main grid points as

$$ \int\limits_{{V_{C} }} {\frac{\partial p}{\partial x}} dV = \left[ {\frac{1}{2}\left( {p_{E} + p_{C} } \right) - \frac{1}{2}\left( {p_{C} + p_{W} } \right)} \right]\frac{{V_{C} }}{{\Delta x}} = \frac{{p_{E} - p_{W} }}{{2\Delta x}}V_{C} $$
(15.21)

Thus either approach leads to the same expression involving the pressure difference between the alternating points E and W.

In a similar way, using a linear interpolation profile and noticing that the density is constant and \( (\Delta y)_{e} = (\Delta y)_{w} = \, (\Delta y)_{C} \), the continuity equation can be expressed as

$$ u_{E} - \, u_{W} = 0 $$
(15.22)

which also relates the velocity at two alternating grid points.

In Eq. (15.21) the pressure gradient term in element C depends on the values of pressure at the two alternating, not consecutive, grid points straddling the element. The same is true for the continuity equation, which enforces conservation only for alternating velocity elements. This implies that non-physical zigzag (or checkerboard) pressure and velocity fields, like the ones shown in Fig. 15.2, will be sensed as uniform fields by the numerical scheme.

Fig. 15.2
figure 2

A checkerboard pressure and velocity fields

For the pressure and velocity values shown in Fig. 15.2, the pressure gradient at points W, C, and E are found to be

$$ \begin{aligned} \int\limits_{{V_{W} }} {\frac{\partial p}{\partial x}} dV & = (p_{C} - p_{WW} )\frac{{V_{W} }}{{2\Delta x_{W} }} = (10 - 10)\frac{{V_{W} }}{{2\Delta x_{W} }} = 0 \\ \int\limits_{{V_{C} }} {\frac{\partial p}{\partial x}} dV & = (p_{E} - p_{W} )\frac{{V_{C} }}{{2\Delta x_{C} }} = ( - 100 + 100)\frac{{V_{C} }}{{2\Delta x_{C} }} = 0 \\ \int\limits_{{V_{E} }} {\frac{\partial p}{\partial x}} dV & = (p_{EE} - p_{C} )\frac{{V_{E} }}{{2\Delta x_{E} }} = (10 - 10)\frac{{V_{E} }}{{2\Delta x_{E} }} = 0 \\ \end{aligned} $$

and the continuity equation seems to be enforced for each element since

$$ \begin{aligned} \int\limits_{{V_{W} }} {\frac{\partial u}{\partial x}} dV & = (u_{C} - u_{WW} )\frac{{V_{W} }}{{2\Delta x_{W} }} = (1 - 1)\frac{{V_{W} }}{{2\Delta x_{W} }} = 0 \\ \int\limits_{{V_{C} }} {\frac{\partial u}{\partial x}} dV & = (u_{E} - u_{W} )\frac{{V_{C} }}{{2\Delta x_{C} }} = (10 - 10)\frac{{V_{C} }}{{2\Delta x_{C} }} = 0 \\ \int\limits_{{V_{E} }} {\frac{\partial u}{\partial x}} dV & = (u_{EE} - u_{C} )\frac{{V_{E} }}{{2\Delta x_{E} }} = (1 - 1)\frac{{V_{E} }}{{2\Delta x_{E} }} = 0 \\ \end{aligned} $$

In multi dimensional situations a similar non-physical behavior can arise even if it is harder to visualize. This sets the ground for the next step that presents one approach to resolve this problem.

2.4 The Staggered Grid

The culprit in the previous formulation is the uncoupling between the pressure and velocity fields. Coupling can be enforced if the different variables are stored at staggered locations such that no interpolation is needed to calculate the pressure gradient in the momentum equation and the velocity field in the continuity equation. Such a staggered grid is shown in Fig. 15.3a, b. In the staggered grid the velocity field is stored at cell faces (Fig. 15.3a), while pressure and all other variables are stored at cell centroids (Fig. 15.3b).

Fig. 15.3
figure 3

An element for a the momentum equation and b the continuity equation in a one dimensional staggered grid arrangement

With this formulation, the discretized continuity equation for element C becomes

$$ \sum\limits_{f \sim nb(C)} {\dot{m}_{f} } = \, \dot{m}_{e} + \, \dot{m}_{w} = 0\quad {\text{or}}\quad u_{e} - u_{w} = 0 $$
(15.23)

with no need for interpolation as the velocity values are available at the e and w locations. Moreover, the momentum equation is integrated over elements similar to element e resulting in the following discretized momentum equation:

$$ a_{e}^{u} u_{e} + \sum\limits_{f \sim NB(e)} {a_{f}^{u} u_{f} } = b_{e}^{u} - V_{e} (\nabla p)_{e} = b_{e}^{u} - V_{e} \frac{{p_{E} - p_{C} }}{{\delta x_{e} }} $$
(15.24)

The pressure gradient is related to values at the consecutive grid points straddling the element face with no interpolation needed. Therefore checkerboard pressure and velocity field solutions are inadmissible as they will be easily detected and eliminated by the numerical method.

2.5 The Pressure Correction Equation

The derivations presented next are based on the work of Patankar and Spalding [2, 3], who developed the initial implementation of the SIMPLE (Semi Implicit Method for Pressure Linked Equations) algorithm.

Starting with the continuity and momentum equations given respectively by (Fig. 15.3)

$$ \sum\limits_{f \sim nb(C)} {\dot{m}_{f}} = 0 $$
(15.25)
$$ a_{e}^{u} u_{e} + \sum\limits_{f \sim NB(e)} {a_{f}^{u} u_{f} } = b_{e}^{u} - V_{e} \left( {\frac{\partial p}{\partial x}} \right)_{e} $$
(15.26)

the solution proceeds by providing an initial guess for the velocity and pressure fields. Denoting the initial guess or the solution at the starts of any iteration with a superscript (n), then the tentative velocity and pressure fields are given by u (n) and p (n). At any iteration, solving the momentum equation first for the velocity field, the solution obtained is denoted by a superscript * as it is not the final solution at the current iteration. Thus, the momentum equation satisfies

$$ a_{e}^{u} u_{e}^{*} + \sum\limits_{f \sim NB(e)} {a_{f}^{u} u_{f}^{*} = b_{e}^{u} } - V_{e} \left( {\frac{{\partial p^{(n)} }}{\partial x}} \right)_{e} $$
(15.27)

where the pressure field is still based on values from the previous iteration. The computed velocity field u * satisfies the momentum equation but not necessarily the continuity equation, since the pressure field is not exact. Therefore a correction is sought to ensure that the velocity (or the mass flow rate) and pressure fields satisfy the continuity equation.

Denoting the correction fields with a superscript prime, i.e., \( \left( {u^{\prime},p^{\prime}} \right) \), then the sought after velocity and pressure are given by

$$ \begin{array}{*{20}c} {u = u^{*} + u^{\prime}} \\ {p = p^{*} + p^{\prime}} \\ \end{array} $$
(15.28)

Note that the mass flow rate at cell faces will also be corrected according to

$$ \begin{aligned} \dot{m}_{f} & = \dot{m}_{f}^{*} + \rho u^{\prime}S_{f}^{x} \\ & = \dot{m}_{f}^{*} + m^{\prime}_{f} \\ \end{aligned} $$
(15.29)

such that the exact mass flow rate satisfies the continuity equation, i.e.,

$$ \dot{m}_{e} + \dot{m}_{w} = \dot{m}_{e}^{*} + \dot{m}^{\prime}_{e} + \dot{m}_{w}^{*} + \dot{m}^{\prime}_{w} = 0 $$
(15.30)

which can be rewritten as

$$ \dot{m}^{\prime}_{e} + \dot{m}^{\prime}_{w} = - \dot{m}_{e}^{*} - \dot{m}_{w}^{*} $$
(15.31)

This is an interesting form of the continuity equation showing that once the computed mass flow rate reaches the exact solution and satisfies the continuity equation, then the RHS becomes zero leading to a zero correction field. Thus it is the mass conservation error of the current fields that drives the correction field. The mass flow rates and mass flow rate corrections at an element faces are given by

$$ \begin{aligned} \dot{m}_{e} & = \rho {\mathbf{v}}_{e}^{*} \cdot {\mathbf{S}}_{e} = \rho u_{e}^{*} S_{e}^{x} = \rho u_{e}^{*}\Delta y_{e} \\ \dot{m}_{w} & = \rho {\mathbf{v}}_{w}^{*} \cdot {\mathbf{S}}_{w} = \rho u_{w}^{*} S_{w}^{x} = - \rho u_{w}^{*}\Delta y_{w} \\ \end{aligned} $$
(15.32)

and

$$ \begin{aligned} \dot{m}^{\prime}_{e} & = \rho {\mathbf{v}}^{{\prime}}_{e} \cdot {\mathbf{S}}_{e} = \rho u^{\prime}_{e} S_{e}^{x} = \rho u^{\prime}_{e}\Delta y_{e} \\ \dot{m}^{\prime}_{w} & = \rho {\mathbf{v}}^{\prime}_{w} \cdot {\mathbf{S}}_{w} = \rho u^{\prime}_{w} S_{w}^{x} = - \rho u^{\prime}_{w}\Delta y_{w} \\ \end{aligned} $$
(15.33)

where in Eqs. (15.32) and (15.33) the fact that \( S_{e}^{x} =\Delta y_{e} \) and \( S_{w}^{x} = -\Delta y_{w} \) has been used.

The pressure field does not appear in Eq. (15.31) and to bring it into the equation, the discrete form of the momentum equation is used. The process starts by rewriting Eq. (15.26) in a more compact form as

$$ u_{e} + H_{e} (u) = B_{e}^{u} - D_{e}^{u} \left( {\frac{\partial p}{\partial x}} \right)_{e} $$
(15.34)

where

$$ H_{e} (u) = \sum\limits_{f \sim NB(e)} {\frac{{a_{f}^{u} }}{{a_{e}^{u} }}} u_{f} \quad B_{e}^{u} = \frac{{b_{e}^{u} }}{{a_{e}^{u} }}\quad {\text{and}}\quad D_{e}^{u} = \frac{{V_{e} }}{{a_{e}^{u} }} $$
(15.35)

For the case of the computed velocity field, the above equation is written as

$$ u_{e}^{*} + H_{e} (u^{*} ) = B_{e}^{u} - D_{e}^{u} \left( {\frac{{\partial p^{(n)} }}{\partial x}} \right)_{e} $$
(15.36)

Subtracting the computed momentum equation, Eq. (15.36), from the exact one, Eq. (15.34), an equation for the correction field is obtained as

$$ u^{\prime}_{e} + \underline{{H_{e} (u^{\prime})}} = - D_{e}^{u} \left( {\frac{{\partial p^{\prime}}}{\partial x}} \right)_{e} $$
(15.37)

A similar approach is used for the w face yielding

$$ u^{\prime}_{w} + \underline{{H_{w} (u^{\prime})}} = - D_{w}^{u} \left( {\frac{{\partial p^{\prime}}}{\partial x}} \right)_{w} $$
(15.38)

Substituting Eq. (15.33) into the continuity equation, Eq. (15.31), its expanded form becomes

$$ \rho_{e} u^{\prime}_{e}\Delta y_{e} + \left( { - \rho_{w} u^{\prime}_{w}\Delta y_{w} } \right) = - (\dot{m}_{e}^{*} + \dot{m}_{w}^{*} ). $$
(15.39)

Then replacing the discrete forms of \( u^{\prime}_{e} \) and \( u^{\prime}_{w} \) computed from Eqs. (15.37) and (15.38), respectively, in Eq. (15.39), an equation involving pressure correction is obtained and is given by

$$ \begin{aligned} & \rho_{e} \left[ { - H_{e} \left( {u^{\prime}} \right) - D_{e}^{u} \left( {\frac{{\partial p^{\prime}}}{\partial x}} \right)_{e} } \right]\Delta y_{e} \\ & \quad - \rho_{w} \left[ { - H_{w} \left( {u^{\prime}} \right) - D_{w}^{u} \left( {\frac{{\partial p^{\prime}}}{\partial x}} \right)_{w} } \right]\Delta y_{w} = - \left( {\dot m_{e}^{*} + \dot m_{w}^{*} } \right) \\ \end{aligned} $$
(15.40)

In this equation the pressure field appears in a diffusion like form, which after discretization becomes

$$ \begin{aligned} & \rho_{e} \left[ { - H_{e} \left( {u^{\prime}} \right) - D_{e}^{u} \left( {\frac{{p^{\prime}_{E} - p^{\prime}_{C} }}{{\Delta x}}} \right)_{e} } \right]\Delta y_{e} \\ & \quad + \rho_{w} \left[ { - H_{w} \left( {u^{\prime}} \right) - D_{w}^{u} \left( {\frac{{p^{\prime}_{C} - p^{\prime}_{W} }}{{\Delta x}}} \right)_{w} } \right]\left( { -\Delta y_{w} } \right) = - \left( {\dot m_{e}^{*} + \dot m_{w}^{*} } \right) \\ \end{aligned} $$
(15.41)

or

$$ \begin{aligned} & - \rho_{e} D_{e}^{u} \left( {\frac{{\Delta y_{w} }}{{\Delta x_{w} }}} \right)\left( {p^{\prime}_{E} - p^{\prime}_{C} } \right) - \rho_{w} D_{w}^{u} \left( { - \frac{{\Delta y_{w} }}{{\Delta x_{w} }}} \right)\left( {p^{\prime}_{C} - p^{\prime}_{W} } \right) \\ & \quad = - \left( {\dot{m}_{e}^{*} + \dot{m}_{w}^{*} } \right) + \left( {\rho_{e} H_{e} \left( {u^{\prime}} \right)\Delta y_{e} \rho_{w} H_{w} \left( {u^{\prime}} \right)\left( { -\Delta y_{w} } \right)} \right) \\ \end{aligned} $$
(15.42)

Rearranging, the pressure correction equation is formulated as

$$ a_{C}^{{p^{\prime}}} p^{\prime}_{C} + a_{E}^{{p^{\prime}}} p^{\prime}_{E} + a_{W}^{{p^{\prime}}} p^{\prime}_{W} = b_{C}^{{p^{\prime}}} $$
(15.43)

where

$$ \begin{aligned} a_{E}^{{p^{\prime}}} & = - \frac{{\rho_{e} D_{e}^{u}\Delta y_{e} }}{{\delta x_{e} }} \\ a_{W}^{{p^{\prime}}} & = - \frac{{\rho_{w} D_{w}^{u}\Delta y_{w} }}{{\delta x_{w} }} \\ a_{C}^{{p^{\prime}}} & = - \left( {a_{E}^{{p^{\prime}}} + a_{W}^{{p^{\prime}}} } \right) \\ b_{C}^{{p^{\prime}}} & = - \left( {\dot{m}_{e}^{*} + \dot{m}_{w}^{*} } \right) + \underline{{\left[ {\rho_{e}\Delta y_{e} H_{e}\left( {u^{\prime}} \right) - \rho_{w}\Delta y_{w} H_{w} \left( {u^{\prime}} \right)} \right]}} \\ \end{aligned} $$
(15.44)

The underlined terms in Eqs. (15.37), (15.38), and (15.44) involve corrections which become zero at the state of convergence. Therefore they have no effect on the final solution. Different approximations to these terms result in different algorithms as will be explained later. In the original SIMPLE algorithm these terms are simply neglected. Moreover for one dimensional constant area situations Δy may be set to 1 and dropped from the equations.

2.6 The SIMPLE Algorithm on Staggered Grid

Using the momentum and pressure correction equations, a solution to the flow problem can be obtained. In the SIMPLE algorithm this solution is found iteratively by generating pressure and velocity fields that consecutively satisfy the momentum and continuity equations, while approaching the final solution (which satisfies both equations) at every iteration [46]. This sequential, rather than simultaneous, solution of the equations is denoted in the literature by the segregated approach. The sequence of events in the segregated SIMPLE algorithm can be summarized as follows:

  1. 1.

    Start with a guessed pressure and velocity fields p (n) and u (n), respectively.

  2. 2.

    Solve the momentum equation given by Eq. (15.27) to obtain a new velocity field \( u_{f}^{*} \).

  3. 3.

    Update the mass flow rates using the momentum satisfying velocity field to obtain the \( \dot{m}_{f}^{*} \) field.

  4. 4.

    Using the new mass flow rates solve the pressure correction equation to obtain a pressure correction field \( p^{\prime} \).

  5. 5.

    Update the pressure and velocity fields to obtain continuity-satisfying fields using the following equations:

    $$ \begin{aligned} u_{f}^{**} & = u_{f}^{*} + u^{\prime}_{f} \quad u^{\prime}_{f} = -D_{f}^{u} \left( {\frac{{\partial p^{\prime}}}{\partial x}} \right)_{f} \\ p_{C}^{*} & = p_{C}^{(n)} + p^{\prime}_{C} \\ \dot{m}_{f}^{**} & = \dot{m}_{f}^{*} + \dot{m}^{\prime}_{f} \quad \dot{m}^{\prime}_{f} = - \rho_{f} D_{f}^{u}{\Delta y}_{f} \left( {\frac{{\partial p^{\prime}}}{\partial x}} \right)_{f} \\ \end{aligned} $$
    (15.45)
  6. 6.

    set \( u^{(n)} = u^{**} \) and \( p^{(n)} = p^{*} \)

  7. 7.

    Go back to step 2 and repeat until convergence.

The SIMPLE algorithm is best illustrated via the example presented next.

Example 1

Flow in a Pipe Network

A portion of a water pipe system is shown in Fig. 15.4 . The momentum equation for the flow in the pipes can be written as

$$ \dot{m} = \rho uA = - D\Delta P $$

where D A  = 0.5, D B  = D F  = 0.4, D C  = D E  = 0.3, D D  = 0.19, D G  = 0.1875, and D H  = 0.35. Using the SIMPLE algorithm, calculate the unknown mass flow rates and pressures in the system.

Fig. 15.4
figure 4

A portion of a water pipe system

Solution

In this system, the mass flow rate field is used as a variable instead of the velocity field. This is not problematic since the momentum equation has been simplified by dropping the convection and diffusion terms as their values are negligible compared to the pressure head.

The solution using the SIMPLE algorithm starts by first computing an initial velocity field using the assumed pressure field, and then predicting a pressure field that enforces continuity on the just computed velocity field.

This procedure is summarized as

  1. 1.

    Start with a guessed pressure field.

  2. 2.

    Compute the mass flow rates using the given momentum equation.

  3. 3.

    Construct a pressure correction equation that enforces continuity (mass conservation) and use it to correct the pressure and velocity fields.

No iterations will be needed since there are no non-linear effects induced by a convection term.

step 1

Start by assigning guessed values to the pressure at the locations where solutions are to be found. Thus assume the following:

\( \begin{array}{*{20}c} {p_{3}^{(n)} = 300} & {p_{6}^{(n)} = 200} & {p_{8}^{(n)} = 120} \\ \end{array} \) (other values could have been used)

step 2

Based on the assumed pressure values calculate the various mass flow rates using the momentum equations according to

$$ \begin{aligned} \dot{m}_{A}^{*} & = D_{A} \left( {p_{1} - p_{3}^{(n)} } \right) = 0.5*\left( {400 - 300} \right) = 50 \\ \dot{m}_{B}^{*} & = D_{B} \left( {p_{3}^{(n)} - p_{2} } \right) = 0.4*\left( {300 - 350} \right) = - 20 \\ \dot{m}_{C}^{*} & = D_{C} \left( {p_{4} - p_{3}^{(n)} } \right) = 0.3*\left( {50 - 300} \right) = - 75 \\ \dot{m}_{D}^{*} & = D_{D} \left( {p_{3}^{(n)} - p_{6}^{(n)} } \right) = 0.19*\left( {300 - 200} \right) = 19 \\ \dot{m}_{E}^{*} & = D_{E} \left( {p_{6}^{(n)} - p_{5} } \right) = 0.3*\left( {200 - 300} \right) = - 30 \\ \dot{m}_{F}^{*} & = D_{F} \left( {p_{7} - p_{6}^{(n)} } \right) = 0.4*\left( {80 - 200} \right) = - 48 \\ \dot{m}_{G}^{*} & = D_{G} \left( {p_{6}^{(n)} - p_{8}^{(n)} } \right) = 0.1875*\left( {200 - 120} \right) = 15 \\ \dot{m}_{H}^{*} & = D_{H} \left( {p_{9} - p_{8}^{(n)} } \right) = 0.35*\left( {200 - 120} \right) = 28 \\ \end{aligned} $$

step 3

Check whether the mass flow rates satisfy continuity by computing \( \sum\limits_{\sim k} {\dot{m}_{k}^{*} } \) at all interior points, i.e.,

$$ Node\;3:\;\sum\limits_{\sim k} {\left( {\dot{m}_{k}^{*} } \right) = \dot{m}_{B}^{*} + \dot{m}_{D}^{*} - \dot{m}_{A}^{*} - \dot{m}_{C}^{*} = - 20 + 19 - 50 + 75 = 24} $$
$$ Node\;6:\;\sum\limits_{\sim k} {\left( {\dot{m}_{k}^{*} } \right) = \dot{m}_{G}^{*} + \dot{m}_{E}^{*} - \dot{m}_{D}^{*} - \dot{m}_{F}^{*} = 15 - 30 - 19 + 48 = 14} $$
$$ Node\;8:\;\sum\limits_{\sim k} {\left( {\dot{m}_{k}^{*} } \right) = \dot{m}_{I}^{*} - \dot{m}_{G}^{*} - \dot{m}_{H}^{*} = 50 - 15 - 28 = 7} $$

Since mass conservation is not satisfied, correction fields are needed and pressure correction equations are derived as follows:

$$ \sum\limits_{\sim k} {\left( {\dot{m}_{k}^{*} + \dot{m}^{\prime}_{k} } \right) = 0 \Rightarrow \sum\limits_{\sim k} {\left( {\dot{m}^{\prime}_{k} } \right) = - } \sum\limits_{\sim k} {\left( {\dot{m}_{k}^{*} } \right)} } $$

In term of pressure corrections, mass flow rate corrections can be expressed as

$$ \begin{aligned} \dot{m}^{\prime}_{A} & = D_{A} \left( { - p^{\prime}_{3} } \right) \\ \dot{m}^{\prime}_{B} & = D_{B} \left( {p^{\prime}_{3} } \right) \\ \dot{m}^{\prime}_{C} & = D_{C} \left( { - p^{\prime}_{3} } \right) \\ \dot{m}^{\prime}_{D} & = D_{D} \left( {p^{\prime}_{3} - p^{\prime}_{6} } \right) \\ \dot{m}^{\prime}_{E} & = D_{E} \left( {p^{\prime}_{6} } \right) \\ \dot{m}^{\prime}_{F} & = D_{F} \left( { - p^{\prime}_{6} } \right) \\ \dot{m}^{\prime}_{G} & = D_{G} \left( {p^{\prime}_{6} - p^{\prime}_{ 8} } \right) \\ \dot{m}^{\prime}_{H} & = D_{H} \left( { - p^{\prime}_{ 8} } \right) \\ \end{aligned} $$

Note that \( p^{\prime}_{1} \), \( p^{\prime}_{2} \), \( p^{\prime}_{4} \), \( p^{\prime}_{5} \) and \( p^{\prime}_{7} \) are set to zero since the corresponding pressure values are known and hence represent the exact values.

The flow field at nodes 3, 6, and 8 are respectively given by

$$ \begin{aligned} & \dot{m}_{B}^{\prime } + \dot{m}_{D}^{\prime } - \dot{m}_{A}^{\prime } - \dot{m}_{C}^{\prime } = - \left( {\dot{m}_{B}^{*} + \dot{m}_{D}^{*} - \dot{m}_{A}^{*} - \dot{m}_{C}^{*} } \right) \\ & \dot{m}_{G}^{\prime } + \dot{m}_{E}^{\prime } - \dot{m}_{D}^{\prime } - \dot{m}_{F}^{\prime } = - \left( {\dot{m}_{G}^{*} + \dot{m}_{E}^{*} - \dot{m}_{D}^{*} - \dot{m}_{F}^{*} } \right) \\ & - \dot{m}_{G}^{\prime } - \dot{m}_{H}^{\prime } = - \left( {\dot{m}_{I}^{*} - \dot{m}_{G}^{*} - \dot{m}_{H}^{*} } \right) \\ \end{aligned} $$

and using pressure corrections as

$$ \begin{aligned} & D_{B} \left( {p^{\prime}_{3} } \right) + D_{D} \left( {p^{\prime}_{3} - p^{\prime}_{6} } \right) - D_{A} \left( { - p^{\prime}_{3} } \right) - D_{C} \left( { - p^{\prime}_{3} } \right) = - \left( {\dot{m}_{B}^{*} + \dot{m}_{D}^{*} - \dot{m}_{A}^{*} - \dot{m}_{C}^{*} } \right) \\ & D_{G} \left( {p^{\prime}_{6} - p^{\prime}_{ 8} } \right) + D_{E} \left( {p^{\prime}_{6} } \right) - D_{D} \left( {p^{\prime}_{3} - p^{\prime}_{6} } \right) - D_{F} \left( { - p^{\prime}_{6} } \right) = - \left( {\dot{m}_{G}^{*} + \dot{m}_{E}^{*} - \dot{m}_{D}^{*} - \dot{m}_{F}^{*} } \right) \\ & - D_{G} \left( {p^{\prime}_{6} - p^{\prime}_{ 8} } \right) - D_{H} \left( { - p^{\prime}_{ 8} } \right) = - \left( {\dot{m}_{I}^{*} - \dot{m}_{G}^{*} - \dot{m}_{H}^{*} } \right) \\ \end{aligned} $$

After simplification the above equations become

$$ \begin{aligned} & 1.39\left( {p^{\prime}_{3} } \right) - 0.19\left( {p^{\prime}_{6} } \right) = - \left( {\dot{m}_{B}^{*} + \dot{m}_{D}^{*} - \dot{m}_{A}^{*} - \dot{m}_{C}^{*} } \right) \\ & 1.0775\left( {p^{\prime}_{6} } \right) - 0.1875\left( {p^{\prime}_{ 8} } \right) - 0.19\left( {p^{\prime}_{3} } \right) = - \left( {\dot{m}_{G}^{*} + \dot{m}_{E}^{*} - \dot{m}_{D}^{*} - \dot{m}_{F}^{*} } \right) \\ & - 0.1875\left( {p^{\prime}_{6} } \right) + 0.5375\left( {p^{\prime}_{ 8} } \right) = - \left( {\dot{m}_{I}^{*} - \dot{m}_{G}^{*} - \dot{m}_{H}^{*} } \right) \\ \end{aligned} $$

Substituting the tentative mass flow rates, the various correction fields satisfy

$$ \begin{aligned} & 1.39\left( {p^{\prime}_{3} } \right) - 0.19\left( {p^{\prime}_{6} } \right) = - 24 \\ & 1.0775\left( {p^{\prime}_{6} } \right) - 0.1875\left( {p^{\prime}_{ 8} } \right) - 0.19\left( {p^{\prime}_{3} } \right) = - 14 \\ & - 0.1875\left( {p^{\prime}_{6} } \right) + 0.5375\left( {p^{\prime}_{ 8} } \right) = - 7 \\ \end{aligned} $$

Solving the system of pressure correction equations yields

$$ \left\{ {\begin{array}{*{20}l} {p^{\prime}_{3} = - 20} \\ {p^{\prime}_{6} = - 20} \\ {p^{\prime}_{ 8} = - 20} \\ \end{array} } \right. $$

With the pressure correction computed, the velocity and pressure fields can now be updated to produce a mass conserving velocity field. The mass flow rates are computed as

$$ \begin{aligned} \dot{m}_{A}^{**} & = \dot{m}_{A}^{*} + \dot{m}^{\prime}_{A} = \dot{m}_{A}^{*} - 0.5p^{\prime}_{3} = 50 - 0.5\left( { - 20} \right) = 60 \\ \dot{m}_{B}^{**} & = \dot{m}_{B}^{*} + \dot{m}^{\prime}_{B} = \dot{m}_{B}^{*} + 0.4p^{\prime}_{3} = - 20 + 0.4\left( { - 20} \right) = - 28 \\ \dot{m}_{C}^{**} & = \dot{m}_{C}^{*} + \dot{m}^{\prime}_{C} = \dot{m}_{C}^{*} - 0.3p^{\prime}_{3} = - 75 - 0.3\left( { - 20} \right) = - 69 \\ \dot{m}_{D}^{**} & = \dot{m}_{D}^{*} + \dot{m}^{\prime}_{D} = \dot{m}_{D}^{*} + 0.19\left( {p^{\prime}_{3} - p^{\prime}_{6} } \right) = 19 + 0.19\left( { - 20 + 20} \right) = 19 \\ \dot{m}_{E}^{**} & = \dot{m}_{E}^{*} + \dot{m}^{\prime}_{E} = \dot{m}_{E}^{*} + 0.3p^{\prime}_{6} = - 30 + 0.3\left( { - 20} \right) = - 36 \\ \dot{m}_{F}^{**} & = \dot{m}_{F}^{*} + \dot{m}^{\prime}_{F} = \dot{m}_{F}^{*} - 0.4p^{\prime}_{6} = - 48 - 0.4\left( { - 20} \right) = - 40 \\ \dot{m}_{G}^{**} & = \dot{m}_{G}^{*} + \dot{m}^{\prime}_{G} = \dot{m}_{G}^{*} + 0.1875\left( {p^{\prime}_{6} - p^{\prime}_{ 8} } \right) = 15 + 0.1875\left( { - 20 + 20} \right) = 15 \\ \dot{m}_{H}^{**} & = \dot{m}_{H}^{*} + \dot{m}^{\prime}_{H} = \dot{m}_{H}^{*} - 0.35p^{\prime}_{ 8} = 28 - 0.35\left( { - 20} \right) = 35 \\ \end{aligned} $$

while the pressure is updated using

$$ \begin{array}{*{20}c} {p_{3}^{*} = p_{3}^{(n)} + p^{\prime}_{3} = 300 - 20 = 280} \\ {p_{6}^{*} = p_{6}^{(n)} + p^{\prime}_{6} = 200 - 20 = 180} \\ {p_{ 8}^{*} = p_{ 8}^{(n)} + p^{\prime}_{ 8} = 120 - 20 = 100} \\ \end{array} $$

Treat the corrected values as a new guess and repeat. Better estimate for the mass flow rates are computed using the momentum equations as

$$ \begin{aligned} \dot{m}_{A}^{*} & = D_{A} \left( {p_{1} - p_{3}^{(n)} } \right) = 0.5*\left( {400 - 280} \right) = 60 \\ \dot{m}_{B}^{*} & = D_{B} \left( {p_{3}^{(n)} - p_{2} } \right) = 0.4*\left( {280 - 350} \right) = - 28 \\ \dot{m}_{C}^{*} & = D_{C} \left( {p_{4} - p_{3}^{(n)} } \right) = 0.3*\left( {50 - 280} \right) = - 69 \\ \dot{m}_{D}^{*} & = D_{D} \left( {p_{3}^{(n)} - p_{6}^{(n)} } \right) = 0.19*\left( {280 - 180} \right) = 19 \\ \dot{m}_{E}^{*} & = D_{E} \left( {p_{6}^{(n)} - p_{5} } \right) = 0.3*\left( {180 - 300} \right) = - 36 \\ \dot{m}_{F}^{*} & = D_{F} \left( {p_{7} - p_{6}^{(n)} } \right) = 0.4*\left( {80 - 180} \right) = - 40 \\ \dot{m}_{G}^{*} & = D_{G} \left( {p_{6}^{(n)} - p_{ 8}^{(n)} } \right) = 0.1875*\left( {180 - 100} \right) = 15 \\ \dot{m}_{H}^{*} & = D_{H} \left( {p_{9} - p_{8}^{(n)} } \right) = 0.35*\left( {200 - 100} \right) = 35 \\ \end{aligned} $$

The imbalance in the mass flow rate at nodes 3, 6, and 8 are computed as

$$ \begin{aligned} \sum\limits_{\sim k} {\left( {\dot{m}_{k}^{*} } \right)} & = \dot{m}_{B}^{*} + \dot{m}_{D}^{*} - \dot{m}_{A}^{*} - \dot{m}_{C}^{*} = - 28 + 19 - 60 + 69 = 0 \\ \sum\limits_{\sim k} {\left( {\dot{m}_{k}^{*} } \right)} & = \dot{m}_{G}^{*} + \dot{m}_{E}^{*} - \dot{m}_{D}^{*} - \dot{m}_{F}^{*} = 15 - 36 - 19 + 40 = 0 \\ \sum\limits_{\sim k} {\left( {\dot{m}_{k}^{*} } \right) \, } & = \dot{m}_{I}^{*} - \dot{m}_{G}^{*} - \dot{m}_{H}^{*} = 50 - 15 - 35 = 0 \\ \end{aligned} $$

The pressure correction equations become

$$ \begin{aligned} & 1.39\left( {p^{\prime}_{3} } \right) - 0.19\left( {p^{\prime}_{6} } \right) = 0 \\ & 1.0775\left( {p^{\prime}_{6} } \right) - 0.1875\left( {p^{\prime}_{ 8} } \right) - 0.19\left( {p^{\prime}_{3} } \right) = 0 \\ & - 0.1875\left( {p^{\prime}_{6} } \right) + 0.5375\left( {p^{\prime}_{ 8} } \right) = 0 \\ \end{aligned} $$

The solution to the pressure correction field is found to be

$$ \left\{ {\begin{array}{*{20}l} {p^{\prime}_{3} = 0} \\ {p^{\prime}_{6} = 0} \\ {p^{\prime}_{ 8} = 0} \\ \end{array} } \right. $$

Thus the solution is obtained in one iteration.

2.7 Pressure Correction Equation in Two Dimensional Staggered Cartesian Grids

In a two dimensional Cartesian grid, three grid systems are used. One for the u-velocity component, a second one for the v-velocity component, and a third grid system for the pressure and other variables as illustrated in Fig. 15.5.

Fig. 15.5
figure 5

u, v, and p elements in a two dimensional Cartesian staggered grid

The derivations presented above for the pressure correction equation in one dimensional domains can be easily extended into multi dimensional situations. For element C shown in Fig. 15.6, the pressure correction equation is obtained as

$$ a_{C}^{{p^{\prime}}} p^{\prime}_{C} + a_{E}^{{p^{\prime}}} p^{\prime}_{E} + a_{W}^{{p^{\prime}}} p^{\prime}_{W} + a_{N}^{{p^{\prime}}} p^{\prime}_{N} + a_{S}^{{p^{\prime}}} p^{\prime}_{S} = b_{C}^{{p^{\prime}}} $$
(15.46)

where

$$ \begin{aligned} a_{E}^{{p^{\prime}}} & = - \frac{{\rho_{e} D_{e}^{u}\Delta y_{C} }}{{\delta x_{e} }}\quad a_{W}^{{p^{\prime}}} = - \frac{{\rho_{w} D_{w}^{u}\Delta y_{C} }}{{\delta x_{w} }} \\ a_{N}^{{p^{\prime}}} & = - \frac{{\rho_{n} D_{n}^{v}\Delta x_{C} }}{{\delta y_{n} }}\quad a_{S}^{{p^{\prime}}} = - \frac{{\rho_{s} D_{s}^{v}\Delta x_{C} }}{{\delta y_{s} }} \\ a_{C}^{{p^{\prime}}} & = - \left( {a_{E}^{{p^{\prime}}} + a_{W}^{{p^{\prime}}} + a_{N}^{{p^{\prime}}} + a_{S}^{{p^{\prime}}} } \right) \\ b_{C}^{{p^{\prime}}} & = - \left( {\dot{m}_{e}^{*} + \dot{m}_{w}^{*} + \dot{m}_{n}^{*} + \dot{m}_{s}^{*} } \right) \\ \end{aligned} $$
(15.47)
Fig. 15.6
figure 6

A two dimensional Cartesian element for the derivation of the pressure correction equation

Example 2

In the two dimensional problem shown in Fig. 15.7 , the following quantities are given u w  = 50, v s  = 20, p N  = 0 and p E  = 10.

The flow is steady and the density is uniform and equal to 1. The momentum equations for u e and v n are given by

$$ \begin{aligned} u_{e} & = - d_{e} \left( {p_{E} - p_{C} } \right) \\ v_{n} & = - d_{n} \left( {p_{N} - p_{C} } \right) \\ \end{aligned} $$

where the constants d e  = 1 and d n  = 0.25. The element shown has Δx = Δy = 1. Use the SIMPLE algorithm to compute the values of u e , v n , and p C .

Fig. 15.7
figure 7

The two dimensional domain used in Example 2

Solution

Start by assigning a guessed value to the pressure at the C location where solution is to be found. Thus assume the following:

\( p_{C}^{(n)} = 100 \) (other values could have been guessed)

Based on the assumed pressure value calculate the various velocities using the momentum equation according to

$$ \begin{aligned} u_{e}^{*} & = - d_{e} \left( {p_{E} - p_{C}^{(n)} } \right) = - 1*\left( {10 - 100} \right) = 90 \\ v_{n}^{*} & = - d_{n} \left( {p_{N} - p_{C}^{(n)} } \right) = - 0.25*\left( {0 - 100} \right) = 25 \\ \end{aligned} $$

Since the density is uniform and equal to 1 and Δx = Δy = 1, then

$$ \begin{aligned} \dot{m}_{e}^{*} & = u_{e}^{*} = 90 \\ \dot{m}_{n}^{*} & = v_{n}^{*} = 25 \\ \end{aligned} $$

Check whether the mass flow rates satisfy continuity over element C by computing \( \sum\limits_{\sim f} {\dot{m}_{f}^{*} } \) at the element faces.

$$ \sum\nolimits_{\sim f} {\left( {\dot{m}_{f}^{*} } \right) = \dot{m}_{e}^{*} - \dot{m}_{w}^{*} + \dot{m}_{n}^{*} - \dot{m}_{s}^{*} = 90 - 50 + 25 - 20 = 45} $$

In the above mass conservation equation the negative sign for \( \dot{m}_{w}^{*} \) and \( \dot{m}_{s}^{*} \) is explicitly used. Since mass conservation is not satisfied, correction fields are needed and a pressure correction equation is derived as follows:

$$ \sum\limits_{\sim f} {\left( {\dot{m}_{f}^{*} + \dot{m}^{\prime}_{f} } \right) = 0 \Rightarrow \sum\limits_{ \sim f} {\left( {\dot{m}^{\prime}_{f} } \right) = } - \sum\limits_{ \sim f} {\left( {\dot{m}_{f}^{*} } \right)} } $$

In term of pressure corrections, mass flow rate corrections can be expressed as

$$ \begin{array}{*{20}c} {\dot{m}^{\prime}_{e} = u^{\prime}_{e} = p^{\prime}_{C} } & {\dot{m}^{\prime}_{n} = v^{\prime}_{n} = 0.25\,p^{\prime}_{C} } \\ \end{array} $$

The correction equation becomes

$$ \dot{m}^{\prime}_{e} + \dot{m}^{\prime}_{n} = - \sum\limits_{ \sim f} {\dot{m}_{f}^{*} \Rightarrow 1.25p^{\prime}_{C} = - 45 \Rightarrow p^{\prime}_{C} = - 36} $$

Applying the correction to the mass flow rate and pressure fields, continuity satisfying fields are obtained as

$$ \begin{aligned} & \dot{m}_{e}^{**} = \dot{m}_{e}^{*} + \dot{m}^{\prime}_{e} = \dot{m}_{e}^{*} + p^{\prime}_{C} = 90 - 36 = 54 \\ & \dot{m}_{n}^{**} = \dot{m}_{n}^{*} + \dot{m}^{\prime}_{n} = \dot{m}_{n}^{*} + 0.25p^{\prime}_{C} = 25 - 0.25\left( {36} \right) = 16 \\ & p_{C}^{**} = p_{C}^{*} + p^{\prime}_{C} = 100 - 36 = 64 \\ \end{aligned} $$

Treat the corrected values as a new guess and repeat.

$$ \begin{aligned} & \dot{m}_{e}^{*} = - d_{e} \left( {p_{E} - p_{C}^{*} } \right) = - 1*\left( {10 - 64} \right) = 54 \\ & \dot{m}_{n}^{*} = - d_{n} \left( {p_{N} - p_{C}^{*} } \right) = - 0.25*\left( {0 - 64} \right) = 16 \\ \end{aligned} $$

The imbalance in the mass flow rate is computed as

$$ \sum\limits_{\sim f} {\left( {\dot{m}_{f}^{*} } \right) = \dot{m}_{e}^{*} - \dot{m}_{w}^{*} + \dot{m}_{n}^{*} - \dot{m}_{s}^{*} = 54 - 50 + 16 - 20 = 0} $$

The pressure correction equations become

$$ 1.25\left( {p^{\prime}_{c} } \right) = 0 $$

The solution to the pressure correction field is found to be

$$ p^{\prime}_{C} = 0 $$

Thus the solution is obtained in one iteration as

$$ \begin{aligned} & u_{e} = 54 \\ & v_{n} = 16 \\ & p_{C} = 64 \\ \end{aligned} $$

2.8 Pressure Correction Equation in Three Dimensional Staggered Cartesian Grid

Without going into details and for completeness of presentation, the pressure correction equation over the three dimensional staggered Cartesian grid shown in Fig. 15.8, where the u, v, and w velocity components are stored at the (e, w), (n, s), and (t, b) element faces, respectively, is given by

$$ a_{C}^{{p^{\prime}}} p^{\prime}_{C} + a_{E}^{{p^{\prime}}} p^{\prime}_{E} + a_{W}^{{p^{\prime}}} p^{\prime}_{W} + a_{N}^{{p^{\prime}}} p^{\prime}_{N} + a_{S}^{{p^{\prime}}} p^{\prime}_{S} + a_{T}^{{p^{\prime}}} p^{\prime}_{T} + a_{B}^{{p^{\prime}}} p^{\prime}_{B} = b_{C}^{{p^{\prime}}} $$
(15.48)

where

$$ \begin{aligned} & a_{E}^{{p^{\prime}}} = - \frac{{\rho_{e} D_{e}^{u}\Delta y_{e}\Delta z_{e} }}{{\delta x_{e} }}\quad a_{W}^{{p^{\prime}}} = - \frac{{\rho_{w} D_{w}^{u}\Delta y_{w}\Delta z_{w} }}{{\delta x_{w} }} \\ & a_{N}^{{p^{\prime}}} = - \frac{{\rho_{n} D_{n}^{v}\Delta x_{n}\Delta z_{n} }}{{\delta y_{n} }}\quad a_{S}^{{p^{\prime}}} = - \frac{{\rho_{s} D_{s}^{v}\Delta x_{s}\Delta z_{s} }}{{\delta y_{s} }} \\ & a_{T}^{{p^{\prime}}} = - \frac{{\rho_{t} D_{t}^{w}\Delta x_{t}\Delta y_{t} }}{{\delta z_{t} }}\quad a_{B}^{{p^{\prime}}} = - \frac{{\rho_{b} D_{b}^{w}\Delta x_{b}\Delta y_{b} }}{{\delta z_{b} }} \\ & a_{C}^{{p^{\prime}}} = - \left( {a_{E}^{{p^{\prime}}} + a_{W}^{{p^{\prime}}} + a_{N}^{{p^{\prime}}} + a_{S}^{{p^{\prime}}} + a_{T}^{{p^{\prime}}} + a_{B}^{{p^{\prime}}} } \right) \\ & b_{C}^{{p^{\prime}}} = - \left( {\dot{m}_{e}^{*} + \dot{m}_{w}^{*} + \dot{m}_{n}^{*} + \dot{m}_{s}^{*} + \dot{m}_{t}^{*} + \dot{m}_{b}^{*} } \right) \\ \end{aligned} $$
(15.49)
Fig. 15.8
figure 8

A three dimensional Cartesian element for the derivation of the pressure correction equation

3 Disadvantages of the Staggered Grid

The use of staggered grids was critical to the development of the SIMPLE algorithm. Nevertheless adopting a staggered grid arrangement has its disadvantages. As mentioned above, in two and three dimensions, three and four staggered grid systems, respectively, are required with the velocity components integrated over different elements, as shown in Fig. 15.5 for a two dimensional situation.

Besides the memory requirement to store a grid system for every velocity component and a grid system for pressure and other variables, the staggering procedure itself becomes an issue for non-Cartesian grids and more so for unstructured grids.

In curvilinear grids, the use of Cartesian velocity components can lead to problems when one or more of the surfaces become aligned with the staggered velocity component as shown in Fig. 15.9.

Fig. 15.9
figure 9

Staggered Cartesian velocity components in a curvilinear grid system

Therefore a better alternative in this case is to use either covariant or contra-variant curvilinear velocity components, as shown in Fig. 15.10a, b, respectively.

Fig. 15.10
figure 10

Curvilinear coordinates a Covariant component and b contra-variant components

An example of staggering using contra-variant velocity components is shown in Fig. (15.11).

Fig. 15.11
figure 11

Curvilinear velocities: staggering using contra-variant velocity components

Unfortunately complications arise when discretizing the momentum equations in curvilinear coordinates [1, 3, 4, 7], due to the increased complexity in the treatment of the diffusion term, and because the equations gain non-conservative terms.

Another option shown in Fig. 15.12 is to stagger all Cartesian velocity components in all directions so as to have all velocity components at all faces. This would double (in two dimensions) or triple (in three dimensions) the number of momentum equations to be solved. The problem is further complicated in the case of an unstructured grid. In this case there is no obvious staggering direction, and the only way for a staggering concept to apply is by changing the size of the cell elements used for the pressure and velocity components, or by resorting to staggering all velocity components along all the faces, again dramatically increasing the number of variables to be solved. Finally, the geometric information stored is more than doubled, as a new unstructured grid need to be used for the velocity components.

Fig. 15.12
figure 12

Cartesian components defined at each face

It turns out that the use of a cell-centered collocated grid system (Fig. 15.13), where all variables are stored at the same location (the cell centroid), is a more attractive solution. It is worth noting that while the velocity components are stored at the centroids of the elements as is the case for pressure or any other variable, the mass flux, a scalar value, in a collocated grid is stored at the element faces. The mass flux can actually be viewed as a contra-variant component, except that in this case it is computed using a custom interpolation of the discrete momentum equation, known as the Rhie-Chow interpolation, which is the subject of the next section.

Fig. 15.13
figure 13

Collocated grid arrangement

4 The Rhie-Chow Interpolation

The deficiency in the original collocated formulation presented earlier was in the linear interpolation used to calculate the velocities at the element faces. This interpolation resulted in decoupling the pressure and velocity values at the cell level giving rise to the checkerboard problem. In 1983, Rhie and Chow [8] reported on an interpolation procedure that allowed the formulation of the SIMPLE algorithm on a collocated grid [916]. In their method a dissipation term, representing the difference between two estimates of the cell face pressure gradient, is added to the linearly interpolated cell face velocity. As shown in Fig. 15.14 the two pressure gradient estimates are based on different grid stencils.

Fig. 15.14
figure 14

The two pressure gradient estimates in the Rhie-Chow interpolation technique

This procedure will be shown to be equivalent to constructing a pseudo-momentum equation at the element face with its coefficients linearly interpolated from the coefficients of the momentum equations at the centroids of the elements straddling the face and its pressure gradient computed using a small grid stencil. In that respect, the Rhie-Chow interpolation simply mimics the small stencil pressure-velocity coupling of the staggered grid arrangement.

Starting with the discretized x-momentum equations for cells C and F, which are

$$ \begin{aligned} u_{C} + H_{C} \left[ u \right] & = B_{C}^{u} - D_{C}^{u} \left( {\frac{\partial p}{\partial x}} \right)_{C} \\ u_{F} + H_{F} \left[ u \right] & = B_{F}^{u} - D_{F}^{u} \left( {\frac{\partial p}{\partial x}} \right)_{F} \\ \end{aligned} $$
(15.50)

A u f velocity equation similar to that of Eq. (15.50), with the pressure gradient linked to the local neighboring pressure values, as illustrated in Fig. 15.14, will have the following form:

$$ u_{f} + H_{f} \left[ u \right] = B_{f}^{u} - D_{f}^{u} \left( {\frac{\partial p}{\partial x}} \right)_{f} . $$
(15.51)

Since in a collocated grid, the coefficients of this equation cannot be directly computed, they are approximated by interpolation from the coefficients of the neighboring nodes. Using a linear interpolation profile, these coefficients are computed as

$$ \begin{aligned} H_{f} \left[ u \right] & = \frac{1}{2}\left( {H_{C} \left[ u \right] + H_{F} \left[ u \right]} \right) = \overline{{H_{f} }} \left[ u \right] \\ B_{f}^{u} & = \frac{1}{2}\left( {B_{C}^{u} + B_{F}^{u} } \right) = \overline{{B_{f}^{u} }} \\ D_{f}^{u} & = \frac{1}{2}\left( {D_{C}^{u} + D_{F}^{u} } \right) = \overline{{D_{f}^{u} }} \\ \end{aligned} $$
(15.52)

Employing the values given in Eq. (15.52), the pseudo-momentum equation at the element face becomes

$$ u_{f} + \overline{{H_{f} }} \left[ u \right] = \overline{{B_{f}^{u} }} - \overline{{D_{f}^{u} }} \left( {\frac{\partial p}{\partial x}} \right)_{f} $$
(15.53)

This is in all practical sense the momentum equation on a “staggered” grid, which is reconstructed using the collocated grid momentum coefficients.

In all above equations and for later use, values with an over bar are obtained by linear interpolation between the values at points C and F according to

$$ \overline{{\square}} _{f} = g_{C} \square_{C} + g_{F} \square_{F} $$
(15.54)

where g C and g F are geometric interpolation factors related to the position of the element face f with respect to the nodes C and F, as explained in previous chapters.

Using Eq. (15.50), \( \overline{{H_{f} }} \) is rewritten as

$$ \begin{aligned} \overline{{H_{f} }} \left[ u \right] & = \frac{1}{2}\left( { - u_{C} + B_{C}^{u} - D_{C}^{u} \left( {\frac{\partial p}{\partial x}} \right)_{C} - u_{F} + B_{F}^{u} - D_{F}^{u} \left( {\frac{\partial p}{\partial x}} \right)_{F} } \right) \\ & = - \overline{{u_{f} }} - \overline{{D_{f}^{u} }} \overline{{\left( {\frac{\partial p}{\partial x}} \right)_{f} }} + \overline{{B_{f}^{u} }} \\ \end{aligned} $$
(15.55)

where the coefficient approximation can be shown to be second order accurate, i.e.,

$$ \begin{aligned} \overline{{D_{f}^{u} \left( {\frac{\partial p}{\partial x}} \right)_{f} }} - \overline{{D_{f}^{u} }} \overline{{\left( {\frac{\partial p}{\partial x}} \right)_{f} }} & = \frac{1}{2}\left( {D_{C}^{u} \left( {\frac{\partial p}{\partial x}} \right)_{C} +\,D_{F}^{u} \left( {\frac{\partial p}{\partial x}} \right)_{F} } \right) \\ & \quad - \frac{1}{2}\left( {D_{C}^{u} + D_{F}^{u} } \right) \times \frac{1}{2}\left( {\left( {\frac{\partial p}{\partial x}} \right)_{C} + \left( {\frac{\partial p}{\partial x}} \right)_{F} } \right) \\ & = \frac{1}{4}D_{C}^{u} \left( {\left( {\frac{\partial p}{\partial x}} \right)_{C} - \left( {\frac{\partial p}{\partial x}} \right)_{F} } \right) + \frac{1}{4}D_{F}^{u} \left( {\left( {\frac{\partial p}{\partial x}} \right)_{F} - \left( {\frac{\partial p}{\partial x}} \right)_{C} } \right) \\ & \approx O(\Delta x^{2} ) \\ \end{aligned} $$
(15.56)

Substituting Eq. (15.55) into Eq. (15.53), the velocity at the element face using the Rhie-Chow interpolation method is obtained as

$$ u_{f} = - \overline{{H_{f} }} [u] + \overline{{B_{f}^{u} }} - \overline{{D_{f}^{u} }} \left( {\frac{\partial p}{\partial x}} \right)_{f} = \mathop {\underbrace {{\overline{{u_{f} }} }}_{average}}\limits_{velocity} - \underbrace {{\overline{{D_{f}^{u} }} \left( {\left( {\frac{\partial p}{\partial x}} \right)_{f} - \overline{{\left( {\frac{\partial p}{\partial x}} \right)_{f} }} } \right)}}_{correction\;term} $$
(15.57)

For a multi dimensional situation, similar interpolation formulae can be derived for the y and z velocity components and are given by

$$ v_{f} = \overline{{v_{f} }} - \overline{{D_{f}^{v} }} \left( {\left( {\frac{\partial p}{\partial y}} \right)_{f} - \overline{{\left( {\frac{\partial p}{\partial y}} \right)_{f} }} } \right) $$
(15.58)
$$ w_{f} = \overline{{w_{f} }} - \overline{{D_{f}^{w} }} \left( {\left( {\frac{\partial p}{\partial z}} \right)_{f} - \overline{{\left( {\frac{\partial p}{\partial z}} \right)_{f} }} } \right) $$
(15.59)

Equations (15.57)–(15.59) can be written in a vector form, more suitable for deriving the multi-dimensional pressure correction equation, as

$$ {\mathbf{v}}_{f} = \overline{{{\mathbf{v}}_{f} }} - \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\nabla p_{f} - \overline{{\nabla p_{f} }} } \right) $$
(15.60)

where

$$ \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} = \left[ {\begin{array}{*{20}c} {\overline{{D_{f}^{u} }} } & 0 & 0 \\ 0 & {\overline{{D_{f}^{v} }} } & 0 \\ 0 & 0 & {\overline{{D_{f}^{w} }} } \\ \end{array} } \right] $$
(15.61)

and where ∇p f is computed as per Sect. 9.4 using

$$ \nabla p_{f} = \overline{{\nabla p_{f} }} + \underbrace {{\left[ {\frac{{p_{F} - p_{C} }}{{d_{CF} }} - \left( {\overline{{\nabla p_{f} }} \cdot {\mathbf{e}}_{CF} } \right)} \right]{\mathbf{e}}_{CF} }}_{Correction\;to\;interpolated\;face\;gradient} $$
(15.62)

and yielding a stencil in the CF direction formed only from the adjacent cell values p F and p C as

$$ \begin{aligned} \nabla p_{f} \cdot {\mathbf{e}}_{CF} & = \overline{{\nabla p_{f} }} \cdot {\mathbf{e}}_{CF} + \left[ {\frac{{p_{F} - p_{C} }}{{d_{CF} }} - \left( {\overline{{\nabla p_{f} }} \cdot {\mathbf{e}}_{CF} } \right)} \right]{\mathbf{e}}_{CF} \cdot {\mathbf{e}}_{CF} \\ & = \frac{{p_{F} - p_{C} }}{{d_{CF} }} \\ \end{aligned} $$
(15.63)

With the face velocities closely linked to the pressure of adjacent cells, checkerboard fields are inadmissible rendering solutions on collocated grids viable.

5 General Derivation

Before proceeding with the development of the multidimensional collocated pressure correction equation, the discretized multidimensional momentum equation is first presented.

5.1 The Discretized Momentum Equation

The momentum equation given by Eq. (15.2) is slightly modified and written as

$$ \underline{{\frac{\partial }{\partial t}[\rho {\mathbf{v}}]}} + \underline{{\nabla \cdot \{ \rho {\mathbf{vv}}\} }} = - \nabla p + \underline{{\nabla \cdot \{ \mu \nabla {\mathbf{v}}\} }} + \nabla \cdot \{ \mu (\nabla {\mathbf{v}})^{\text{T}} \} + {\mathbf{f}}_{b} $$
(15.64)

The discretized form of Eq. (15.64) in the time interval [t − Δt/2, t + Δt/2] is sought over element C shown in Fig. 15.15.

Fig. 15.15
figure 15

Element C in a general unstructured grid system

In Eq. (15.64), the three underlined expressions represent, from left to right, the unsteady, convection, and diffusion term, respectively. The discretization of these terms proceeds as presented in previous chapters. The remaining terms are evaluated explicitly and treated as sources. The volume integral of the second part of the shear stress term is transformed into a surface integral using the divergence theorem and then into a summation of surface fluxes as

$$ \int\limits_{{V_{C} }} \nabla \cdot \left\{ {\mu \left( {\nabla {\mathbf{v}}} \right)^{\text{T}} } \right\}dV = \int\limits_{{\partial V_{C} }} {\left\{ {\mu (\nabla {\mathbf{v}})^{\text{T}} } \right\}} \cdot d{\mathbf{S = }}\sum\limits_{f \sim nb(C)} {\mu (\nabla {\mathbf{v}})_{f}^{\text{T}} } \cdot {\mathbf{S}}_{f} $$
(15.65)

where the expanded form of \( \left( {\nabla {\mathbf{v}}} \right)_{f}^{\text{T}} \cdot {\mathbf{S}}_{f} \) in a three dimensional coordinate system is given by

$$ \left( {\nabla {\mathbf{v}}} \right)_{f}^{\text{T}} \cdot {\mathbf{S}}_{f} = \left[ {\begin{array}{*{20}c} {\frac{\partial u}{\partial x}S_{f}^{x} + \frac{\partial u}{\partial y}S_{f}^{y} + \frac{\partial u}{\partial z}S_{f}^{z} } \\ {\frac{\partial v}{\partial x}S_{f}^{x} + \frac{\partial v}{\partial y}S_{f}^{y} + \frac{\partial v}{\partial z}S_{f}^{z} } \\ {\frac{\partial w}{\partial x}S_{f}^{x} + \frac{\partial w}{\partial y}S_{f}^{y} + \frac{\partial w}{\partial z}S_{f}^{z} } \\ \end{array} } \right] $$
(15.66)

The volume integral of the pressure gradient is also treated as a source term and evaluated explicitly as

$$ \int\limits_{{V_{C} }} {\nabla p\,dV = (\nabla p)_{C} V_{C} } $$
(15.67)

or transformed into a surface integral according to Eq. (2.85) and computed as

$$ \int\limits_{{V_{C} }} {\nabla p} \,dV = \int\limits_{{\partial V_{C} }} p \,d{\mathbf{S}} = \sum\limits_{f \sim nb(C)} {p_{f} {\mathbf{S}}_{f} } $$
(15.68)

The body force term is integrated directly over the control volume to yield

$$ \int\limits_{{V_{C} }} {{\mathbf{f}}_{b} dV = ({\mathbf{f}}_{b} )_{C} V_{C} } $$
(15.69)

Using a first order Euler scheme for the discretization of the unsteady term, a HR scheme for the convection term implemented via the deferred correction approach, and decomposing the diffusion flux into an implicit part aligned with the grid and an explicit cross diffusion part, the discretized momentum equation is written in vector form as

$$ a_{C}^{{\mathbf{v}}} {\mathbf{v}}_{C} + \sum\limits_{F \sim NB(C)} {a_{F}^{{\mathbf{v}}} {\mathbf{v}}_{F} } = {\mathbf{b}}_{C}^{{\mathbf{v}}} $$
(15.70)

where the coefficients are given by

$$ \begin{aligned} a_{C}^{{\mathbf{v}}} & = FluxC_{C} + \sum\limits_{f \sim nb(C)} {(FluxC_{f} )} \\ a_{F}^{{\mathbf{v}}} & = FluxF_{f} \\ {\mathbf{b}}_{C}^{{\mathbf{v}}} & = - FluxV_{C} - \sum\limits_{f \sim nb(C)} {FluxV_{f} + \sum\limits_{f \sim nb(C)} {\mu_{f} (\nabla {\mathbf{v}})_{f}^{\text{T}} } \cdot {\mathbf{S}}_{f} - (\nabla p)_{C} } V_{C} \\ \end{aligned} $$
(15.71)

with the face fluxes calculated using

$$ \begin{aligned} FluxC_{f} & = \underbrace {{\left\| {\dot{m}_{f} ,0} \right\|}}_{\begin{subarray}{l} convection \\ contribution \end{subarray} } + \underbrace {{\mu_{f} \frac{{E_{f} }}{{d_{CF} }}}}_{\begin{subarray}{l} diffusion \, \\ contribution \end{subarray} } \\ FluxF_{f} & = \underbrace {{ - \left\| { - \dot{m}_{f} ,0} \right\|}}_{\begin{subarray}{l} convection\; \\ contribution \end{subarray} } - \underbrace {{\mu_{f} \frac{{E_{f} }}{{d_{CF} }}}}_{\begin{subarray}{l} diffusion \, \\ contribution \end{subarray} } \\ FluxV_{f} & = - \mu_{f} (\nabla {\mathbf{v}})_{f} \cdot {\mathbf{T}}_{f} + \dot{m}_{f} ({\mathbf{v}}_{f}^{HR} - {\mathbf{v}}_{f}^{U} ) \\ \end{aligned} $$
(15.72)

and the element fluxes computed from

$$ \begin{aligned} FluxC_{C} & = \frac{{\rho_{C} V_{C} }}{{\Delta t}} \\ FluxV_{C} & = \underbrace {{ - \frac{{\rho_{C}^{ \circ } V_{C} }}{{\Delta t}}{\mathbf{v}}_{C}^{ \circ } }}_{\begin{subarray}{l} transient \, \\ contribution \end{subarray} } - \underbrace {{({\mathbf{f}}_{b} )_{C} V_{C} }}_{\begin{subarray}{l} source\,term \, \\ contribution \end{subarray} } \\ \end{aligned} $$
(15.73)

Even though the algebraic form of the momentum equation, Eq. (15.70), is linear, its coefficients depend on the velocity and pressure fields. This nonlinearity is handled by an iterative process during which the coefficients are calculated at the start of every iteration based on values of the dependent variables obtained in the previous iteration. This change in the values of the coefficients results in large changes in v and affects the rate of convergence to the degree of even causing divergence. To slow down the changes, under-relaxation can be applied when the transient time steps used are large. Denoting the under relaxation factor by λ v and adopting Patankar’s implicit relaxation approach, the under relaxed momentum equation can be written as

$$ \frac{{a_{C}^{{\mathbf{v}}} }}{{\lambda^{{\mathbf{v}}} }}{\mathbf{v}}_{C} + \sum\limits_{F \sim NB(C)} {a_{F}^{{\mathbf{v}}} {\mathbf{v}}_{F} = {\mathbf{b}}_{C}^{{\mathbf{v}}} + \frac{{1 - \lambda^{{\mathbf{v}}} }}{{\lambda^{{\mathbf{v}}} }}a_{C}^{{\mathbf{v}}} {\mathbf{v}}_{C}^{(n)} } $$
(15.74)

By redefining \( a_{C}^{{\mathbf{v}}} \) and \( {\mathbf{b}}_{C}^{{\mathbf{v}}} \) such that

$$ \begin{aligned} a_{C}^{{\mathbf{v}}} & \leftarrow \frac{{a_{C}^{{\mathbf{v}}} }}{{\lambda^{{\mathbf{v}}} }} \\ {\mathbf{b}}_{C}^{{\mathbf{v}}} & \leftarrow {\mathbf{b}}_{C}^{{\mathbf{v}}} + \frac{{1 - \lambda^{{\mathbf{v}}} }}{{\lambda^{{\mathbf{v}}} }}a_{C}^{{\mathbf{v}}} {\mathbf{v}}_{C}^{(n)} \\ \end{aligned} $$
(15.75)

the under-relaxed momentum equation can be rewritten as

$$ a_{C}^{{\mathbf{v}}} {\mathbf{v}}_{C} + \sum\limits_{F \sim NB(C)} {a_{F}^{{\mathbf{v}}} {\mathbf{v}}_{F} = {\mathbf{b}}_{C}^{{\mathbf{v}}} } $$
(15.76)

For the derivation of the collocated pressure correction equation, the pressure gradient is taken out of the \( {\mathbf{b}}_{C}^{{\mathbf{v}}} \) source term and displayed explicitly to yield

$$ {\mathbf{b}}_{C}^{{\mathbf{v}}} = - V_{C} (\nabla p)_{C} + {\hat{\mathbf{b}}}_{C}^{{\mathbf{v}}} $$
(15.77)

Substituting back in Eq. (15.76), the momentum equation becomes

$$ {\mathbf{v}}_{C} + \sum\limits_{F \sim NB(C)} {\frac{{a_{F}^{{\mathbf{v}}} }}{{a_{C}^{{\mathbf{v}}} }}{\mathbf{v}}_{F} = - \frac{{V_{C} }}{{a_{C}^{{\mathbf{v}}} }}(\nabla p)_{C} } + \frac{{{\hat{\mathbf{b}}}_{C}^{{\mathbf{v}}} }}{{a_{C}^{{\mathbf{v}}} }}. $$
(15.78)

Defining the following vector operators:

$$ \begin{aligned} {\mathbf{H}}_{C} [{\mathbf{v}}] & = \sum\limits_{f{\sim}NB(C)} {\frac{{a_{F}^{{\mathbf{v}}} }}{{a_{C}^{{\mathbf{v}}} }}{\mathbf{v}}_{F} } \\ {\mathbf{B}}_{C}^{{\mathbf{v}}} & = \frac{{{\hat{\mathbf{b}}}_{C}^{{\mathbf{v}}} }}{{a_{C}^{{\mathbf{v}}} }} \\ {\mathbf{D}}_{C}^{{\mathbf{v}}} & = \frac{{V_{C} }}{{a_{C}^{{\mathbf{v}}} }} \\ \end{aligned} $$
(15.79)

Equation (15.78) is reformulated as

$$ {\mathbf{v}}_{C} + {\mathbf{H}}_{C} [{\mathbf{v}}] = - {\mathbf{D}}_{C}^{{\mathbf{v}}} (\nabla p)_{C} + {\mathbf{B}}_{C}^{{\mathbf{v}}} , $$
(15.80)

a form that will be useful in later derivations.

5.2 The Collocated Pressure Correction Equation

As in the case of a staggered grid, starting with guessed values or values obtained from the previous iteration \( \left( {{\mathbf{v}}^{(n)} ,\dot{m}^{(n)} ,p^{(n)} } \right) \), the momentum equation, Eq. (15.80), is first solved to obtain a momentum conserving velocity field v *. Thus the obtained solution satisfies

$$ {\mathbf{v}}_{C}^{*} + {\mathbf{H}}_{C} \left[ {{\mathbf{v}}^{*} } \right] = - {\mathbf{D}}_{C}^{{\mathbf{v}}} \left( {\nabla p^{(n)} } \right)_{C} + {\mathbf{B}}_{C}^{{\mathbf{v}}} $$
(15.81)

while the final solution should satisfy Eq. (15.80). The difference between these two equations is that the velocity field in Eq. (15.80) satisfies both the momentum and continuity equations while the one in Eq. (15.79) does not necessarily satisfy the continuity equation because of the linearization in which pressure and velocity are based on the previous iteration values. Therefore corrections to the velocity, mass flow rate, and pressure fields are needed to enforce mass conservation. Denoting these corrections by \( \left( {{\mathbf{v^{\prime}}},p^{\prime},\dot{m}^{\prime}} \right) \) the relations between the exact and computed fields can be written as

$$ \begin{aligned} {\mathbf{v}} & = {\mathbf{v}}^{*} + {\mathbf{v^{\prime}}} \\ p & = p^{(n)} + p^{\prime} \\ m & = m^{*} + m^{\prime} \\ \end{aligned} $$
(15.82)

Substituting the mass flow rate given by Eq. (15.82) into Eq. (15.25), the continuity equation becomes

$$ \sum\limits_{f \sim nb(C)} {\dot{m}^{\prime}_{f} } = - \sum\limits_{f \sim nb(C)} {\dot{m}_{f}^{*} } \quad {\text{where}}\;\dot{m}_{f}^{*} = \rho_{f} {\mathbf{v}}_{f}^{*} \cdot {\mathbf{S}}_{f} $$
(15.83)

with the face velocity computed using the Rhie-Chow interpolation as

$$ {\mathbf{v}}_{f}^{*} = \overline{{{\mathbf{v}}_{f}^{*} }} - \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\nabla p_{f}^{(n)} - \overline{{\nabla p_{f}^{(n)} }} } \right). $$
(15.84)

When the computed mass flow rate field is conservative, the RHS of Eq. (15.83) is zero yielding a zero correction field. On the other hand, an incorrect velocity field leads to an imbalance in mass and a nonzero value of the RHS of Eq. (15.83) implying the need for a correction field for conservation to be enforced.

Mass flow rate corrections can be written in terms of velocity corrections, which can be derived by subtracting Eq. (15.81) from Eq. (15.80) to yield

$$ {\mathbf{v^{\prime}}}_{C} + {\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}] = - {\mathbf{D}}_{C}^{{\mathbf{v}}} (\nabla p^{\prime})_{C} $$
(15.85)

A similar equation holds for element F and is given by

$$ {\mathbf{v^{\prime}}}_{F} + {\mathbf{H}}_{F} [{\mathbf{v^{\prime}}}] = - {\mathbf{D}}_{F}^{{\mathbf{v}}} (\nabla p^{\prime})_{F} $$
(15.86)

The mass flow rate correction at a cell face can be expressed as

$$ \dot{m}^{\prime}_{f} = \rho_{f} {\mathbf{v^{\prime}}}_{f} \cdot {\mathbf{S}}_{f} $$
(15.87)

where the face velocity correction is obtained by subtracting Eq. (15.84) from Eq. (15.60) to give

$$ {\mathbf{v^{\prime}}}_{f} = \overline{{{\mathbf{v^{\prime}}}_{f} }} - \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} (\nabla p^{\prime}_{f} - \overline{{\nabla p^{\prime}_{f} }} ) $$
(15.88)

Substitution of Eqs. (15.87) and (15.88) in Eq. (15.83), leads to the following form of the pressure correction equation:

$$ \underline{{\sum\limits_{f \sim nb(C)} {\left( {\rho_{f} \overline{{{\mathbf{v^{\prime}}}_{f} }} \cdot {\mathbf{S}}_{f} } \right) + \sum\limits_{f \sim nb(C)} {\left( {\rho_{f} \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \overline{{\nabla p^{\prime}_{f} }} \cdot {\mathbf{S}}_{f} } \right)} } }} - \sum\limits_{f \sim nb(C)} {\left( {\rho_{f} \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} (\nabla p^{\prime})_{f} \cdot {\mathbf{S}}_{f} } \right)} = - \sum\limits_{f \sim nb(C)} {\dot{m}_{f}^{*} } $$
(15.89)

In this equation the underlined part represents the effects of the neighboring velocity corrections on the velocity correction of the element under consideration. This influence becomes clearer by interpolating Eqs. (15.85) and (15.86) to the face yielding the following equivalent expression for the underline terms:

$$ \overline{{{\mathbf{v^{\prime}}}_{f} }} + \overline{{{\mathbf{H}}_{f} }} \left[ {{\mathbf{v^{\prime}}}} \right] = - \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\overline{{\nabla p^{\prime}}} } \right)_{f} \Rightarrow \overline{{{\mathbf{v^{\prime}}}_{f} }} + \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\overline{{\nabla p^{\prime}}} } \right)_{f} = - \overline{{{\mathbf{H}}_{f} }} \left[ {{\mathbf{v^{\prime}}}} \right]. $$
(15.90)

Substituting Eq. (15.90) in Eq. (15.89), the pressure correction equation is rewritten as

$$ \sum\limits_{f\sim nb(C)} {\left( { - \rho_{f} \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\nabla p^{\prime}} \right)_{f} \cdot {\mathbf{S}}_{f} } \right) = - \sum\limits_{f\sim nb(C)} {\dot{m}_{f}^{*} + \underline{{\sum\limits_{f\sim nb(C)} {\left( {\rho_{f} \overline{{{\mathbf{H}}_{f} }} \left[ {{\mathbf{v^{\prime}}}} \right] \cdot {\mathbf{S}}_{f} } \right)} }} } } $$
(15.91)

or more explicitly in the form

$$ \sum\limits_{f\sim nb(C)} {\left( { - \rho_{f} \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\nabla p^{\prime}} \right)_{f} \cdot {\mathbf{S}}_{f} } \right)} = - \sum\limits_{f\sim nb(C)} {\dot{m}_{f}^{*} } + \underline{{\sum\limits_{f\sim nb(C)} {\left( {\rho_{f} \left( {\overline{{\sum\limits_{F\sim NB(C)} {\frac{{a_{F}^{{\mathbf{v}}} }}{{a_{C}^{{\mathbf{v}}} }}{\mathbf{v^{\prime}}}_{F} } }} } \right) \cdot {\mathbf{S}}_{f} } \right)} }} . $$
(15.92)

In Eq. (15.91) or (15.92) the treatment of the underlined term is critical to rendering the equation solvable. In the original SIMPLE algorithm it is neglected, thus linking the velocity correction at a point directly to pressure corrections. Because this is a correction equation the modification or dropping of the term will not affect the final solution, since at convergence the corrections become zero. However it will affect the convergence rate in that the larger is the neglected term the higher will be the error present in the approximation at each iteration.

The remaining terms in Eq. (15.91) or (15.92) can be easily treated. The coefficients of the pressure correction equation are obtained as per the discretization of the diffusion term in Chap. 8, specifically the treatment of anisotropic diffusion.

Thus the term on the LHS is modified into a gradient dot product of the form

$$ \begin{aligned} \left( {\overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\nabla p^{\prime}} \right)_{f} } \right) \cdot {\mathbf{S}}_{f} & = \left( {\left( {\nabla p^{\prime}} \right)_{f} \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }}^{T} } \right) \cdot {\mathbf{S}}_{f} \\ & = \left( {\nabla p^{\prime}} \right)_{f} \cdot \left( {\overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }}^{T} \cdot {\mathbf{S}}_{f} } \right) \\ & = \left( {\nabla p^{\prime}} \right)_{f} \cdot {\mathbf{S^{\prime}}}_{f} \\ \end{aligned} $$
(15.93)

The expanded expression of \( {\mathbf{S^{\prime}}}_{f} \) is given by

$$ {\mathbf{S^{\prime}}}_{f} = \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }}^{T} \cdot {\mathbf{S}}_{f} = \left[ {\begin{array}{*{20}c} {\overline{{D_{f}^{u} }} } & 0 & 0 \\ 0 & {\overline{{D_{f}^{v} }} } & 0 \\ 0 & 0 & {\overline{{D_{f}^{w} }} } \\ \end{array} } \right]\left[ {\begin{array}{*{20}c} {S_{f}^{x} } \\ {S_{f}^{y} } \\ {S_{f}^{z} } \\ \end{array} } \right] = \left[ {\begin{array}{*{20}c} {\overline{{D_{f}^{u} }} S_{f}^{x} } \\ {\overline{{D_{f}^{v} }} S_{f}^{y} } \\ {\overline{{D_{f}^{w} }} S_{f}^{z} } \\ \end{array} } \right] $$
(15.94)

Working with \( {\mathbf{S^{\prime}}}_{f} \), the discretization of the pressure correction gradient term proceeds as usual resulting in

$$ \begin{aligned} \left( {\nabla p^{\prime}} \right)_{f}\,{\cdot}\,{\mathbf{S^{\prime}}}_{f} & = \left({\nabla p^{\prime}} \right)_{f}\,{\cdot}\,{\mathbf{E}}_{f} + \left( {\nabla p^{\prime}} \right)_{f}\,{\cdot}\,{\mathbf{T}}_{f} \\ & = \frac{{E_{f} }}{{d_{CF} }}\left( {p^{\prime}_{F} - p^{\prime}_{C} } \right) + \underline{{\left( {\nabla p^{\prime}} \right)_{f}\,{\cdot}\,{\mathbf{T}}_{f} }} \\ \end{aligned} $$
(15.95)

where the following decomposition of \( {\mathbf{S^{\prime}}}_{f} \) was used:

$$ {\mathbf{S^{\prime}}}_{f} = {\mathbf{E}}_{f} + {\mathbf{T}}_{f} . $$
(15.96)

The type of decomposition could be any of those reviewed in Chap. 8, as will be detailed later. The underlined term, arising due to grid non-orthogonality, can either be neglected or retained. If neglected, it will not affect the final solution as it is a correction term. If retained, then it will be treated explicitly with an internal loop (non-orthogonal loop in OpenFOAM®). As the solution starts with a zero pressure correction field at every iteration, the term has to be updated iteratively while solving the equation.

Dropping the non-orthogonal contribution, the linearized term of the pressure correction equation becomes

$$ \begin{aligned} \left( {\nabla p^{\prime}} \right)_{f} \cdot {\mathbf{S^{\prime}}}_{f} = & \frac{{E_{f} }}{{d_{CF} }}\left( {p^{\prime}_{F} - p^{\prime}_{C} } \right) \\ = & {\mathcal{D}}_{f} \left( {p^{\prime}_{F} - p^{\prime}_{C} } \right) \\ \end{aligned} $$
(15.97)

Substituting back in Eq. (15.91) the algebraic form of the pressure correction equation is obtained as

$$ a_{C}^{{p^{\prime}}} p^{\prime}_{C} + \sum\limits_{F\sim NB(C)} {a_{F}^{{p^{\prime}}} p^{\prime}_{F} = b_{C}^{{p^{\prime}}} } $$
(15.98)

with the coefficients given by

$$ \begin{aligned} a_{F}^{{p^{\prime}}} = & FluxF_{f} = - \rho_{f} {\mathcal{D}}_{f} \\ a_{C}^{{p^{\prime}}} = & - \sum\limits_{f\sim nb(C)} {FluxF_{f} } = - \sum\limits_{F\sim NB(C)} {a_{F}^{{p^{\prime}}} } \\ b_{C}^{{p^{\prime}}} = & - \sum\limits_{f\sim nb(C)} {FluxV_{f} + \underline{\sum\limits_{f\sim nb(C)} {\left( {\rho_{f} \overline{{{\mathbf{H}}_{f} }} \left[ {{\mathbf{v^{\prime}}}} \right]\; \cdot \;{\mathbf{S}}_{f} } \right)}} } \\ = & - \sum\limits_{f\sim nb(C)} {\dot{m}_{f}^{*} + \underline{\sum\limits_{f\sim nb(C)} {\left( {\rho_{f} \overline{{{\mathbf{H}}_{f} }} \left[ {{\mathbf{v^{\prime}}}} \right]\; \cdot \;{\mathbf{S}}_{f} } \right)}} } \\ \end{aligned} $$
(15.99)

Note that different approximations to the underlined terms in Eq. (15.99) result in different algorithms. In the original SIMPLE algorithm these terms are simply neglected.

Finally the mass flow rate \( \dot{m}_{f}^{*} \) in Eq. (15.99), is the one computed after solving the momentum equation using as usual the Rhie-Chow interpolation technique with the latest velocity field, i.e.,

$$ \dot{m}_{f}^{*} = \rho {\mathbf{v}}_{f}^{*} \cdot {\mathbf{S}}_{f} = \rho \overline{{{\mathbf{v}}_{f}^{*} }} \cdot {\mathbf{S}}_{f} - \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\nabla p_{f}^{(n)} - \overline{{\nabla p_{f}^{(n)} }} } \right) \cdot {\mathbf{S}}_{f} . $$
(15.100)

Following the calculation of the pressure correction field, the pressure and velocity at the element centroids and the mass flow rate at the element faces are all corrected. As mentioned above, the underlined term in Eq. (15.99) is neglected in the SIMPLE algorithm resulting in large pressure correction values that may slow the rate of convergence or cause divergence. To increase robustness and improve the convergence behavior, pressure correction values obtained from Eq. (15.98) are explicitly under relaxed. No under relaxation is used when updating the velocity and mass flow rate fields since the pressure correction will ensure mass conservation for these fields. Denoting the under relaxation factor by λ p, the following correction equations are used:

$$ \begin{aligned} {\mathbf{v}}_{C}^{**} & = {\mathbf{v}}_{C}^{*} + {\mathbf{v^{\prime}}}_{C} \quad {\mathbf{v^{\prime}}}_{C} = - {\mathbf{D}}_{C}^{{\mathbf{v}}} \left( {\nabla p^{\prime}} \right)_{C} \\ \dot{m}_{f}^{**} & = \dot{m}_{f}^{*} + \dot{m}^{\prime}_{f} \quad \dot{m}^{\prime}_{f} = - \rho_{f} \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \nabla p^{\prime}_{f} \cdot {\mathbf{S}}_{f} \\ p_{C}^{*} & = p_{C}^{(n)} + \lambda^{p} p^{\prime}_{C} \\ \end{aligned} $$
(15.101)

5.3 Calculation of the \( {\mathcal{D}}_{f} \) Term

The type of decomposition suggested in Eq. (15.96) could be any of those reviewed in Chap. 8 with different approaches leading to different expressions for \( {\mathcal{D}}_{f} \) as derived below.

5.3.1 Minimum Correction Approach

For this approach E f is obtained by substituting \( {\mathbf{S^{\prime}}}_{f} \) for S f in Eq. (8.68) leading to

$$ {\mathbf{E}}_{f} = \left( {{\mathbf{e}}_{CF} \cdot {\mathbf{S^{\prime}}}_{f} } \right){\mathbf{e}}_{CF} $$
(15.102)

where e CF is a unit vector in the CF direction. Combining Eqs. (15.94), (15.102), and (8.64), E f becomes

$$ {\mathbf{E}}_{f} = \frac{{d_{CF}^{x} \overline{{D_{f}^{u} }} S_{f}^{x} + d_{CF}^{y} \overline{{D_{f}^{v} }} S_{f}^{y} + d_{CF}^{z} \overline{{D_{f}^{w} }} S_{f}^{z} }}{{d_{CF}^{2} }}{\mathbf{d}}_{CF} $$
(15.103)

Using Eq. (15.103), the following expression for \( {\mathcal{D}}_{f} \) is derived:

$$ {\mathcal{D}}_{f} = \frac{{E_{f} }}{{d_{CF} }} = \frac{{d_{CF}^{x} \overline{{D_{f}^{u} }} S_{f}^{x} + d_{CF}^{y} \overline{{D_{f}^{v} }} S_{f}^{y} + d_{CF}^{z} \overline{{D_{f}^{w} }} S_{f}^{z} }}{{\left( {d_{CF}^{x} } \right)^{2} + \left( {d_{CF}^{y} } \right)^{2} + \left( {d_{CF}^{z} } \right)^{2} }} $$
(15.104)

5.3.2 Orthogonal Correction Approach

The definition of E f in this case is obtained from Eq. (8.69) and written as

$$ {\mathbf{E}}_{f} = S^{\prime}_{f} {\mathbf{e}}_{CF} $$
(15.105)

Combining Eqs. (15.105), (15.94), and (8.64), \( {\mathcal{D}}_{f} \) is found to be

$$ {\mathcal{D}}_{f} = \frac{{E_{f} }}{{d_{CF} }}\,=\,\sqrt {\frac{{\left( {\overline{{D_{f}^{u} }} S_{f}^{x} } \right)^{2} + \left( {\overline{{D_{f}^{v} }} S_{f}^{y} } \right)^{2} + \left( {\overline{{D_{f}^{w} }} S_{f}^{z} } \right)^{2} }}{{\left( {d_{CF}^{x} } \right)^{2} + \left( {d_{CF}^{y} } \right)^{2} + \left( {d_{CF}^{z} } \right)^{2} }}} $$
(15.106)

5.3.3 Over-Relaxed Approach

In this method, E f is computed from Eqs. (8.64) and (8.70) as

$$ {\mathbf{E}}_{f} = \frac{{{\mathbf{S^{\prime}}}_{f} \cdot {\mathbf{S^{\prime}}}_{f} }}{{{\mathbf{d}}_{CF} \cdot {\mathbf{S^{\prime}}}_{f} }}{\mathbf{d}}_{CF} $$
(15.107)

Combining Eq. (15.107) with Eq. (15.94), \( {\mathcal{D}}_{f} \) is found to be

$$ {\mathcal{D}}_{f} = \frac{{\left( {\overline{{D_{f}^{u} }} S_{f}^{x} } \right)^{2} + \left( {\overline{{D_{f}^{v} }} S_{f}^{y} } \right)^{2} + \left( {\overline{{D_{f}^{w} }} S_{f}^{z} } \right)^{2} }}{{d_{CF}^{x} {\overline{D_{f}^{u} }} S_{f}^{x} + d_{CF}^{y} {\overline{D_{f}^{v} }} S_{f}^{y} + d_{CF}^{z} {\overline{D_{f}^{w} }} S_{f}^{z} }} $$
(15.108)

Any of the above approaches can be adopted to calculate the value of \( {\mathcal{D}}_{f}. \)

5.4 The Collocated SIMPLE Algorithm

The sequence of events in the collocated SIMPLE algorithm is displayed in Fig. 15.16 and can be summarized as follows:

Fig. 15.16
figure 16

A flow chart of the SIMPLE algorithm

  1. 1.

    To compute the solution at iteration n + 1, start with the solution at time t for pressure, velocity, and mass flow rate fields, i.e., p (n), u (n), and \( \dot{m}^{(n)} \), respectively, as the initial guess.

  2. 2.

    Solve the momentum equation given by Eq. (15.70) to obtain a new velocity field v *.

  3. 3.

    Update the mass flow rate at the element faces using the Rhie-Chow interpolation (Eq. 15.100) to compute a momentum satisfying mass flow rate field \( \dot{m}^{*} \).

  4. 4.

    Using the new mass flow rates assemble the pressure correction equation (Eq. 15.98) and solve it to obtain a pressure correction field \( p^{\prime} \).

  5. 5.

    With the pressure correction field update the pressure and velocity fields at the element centroids and the mass flow rate at the element faces to obtain continuity-satisfying fields using Eq. (15.101). These resulting fields are denoted by u **, \( \dot{m}^{**} \), and p *, respectively.

  6. 6.

    Treat the obtained solution as a new initial guess, return to step 2 and repeat until convergence.

  7. 7.

    Set the solution at time n + 1 (i.e., t + Δt) to be equal to the converged solution and set the current time n + 1 (i.e., t + Δt) to be n (i.e., t).

  8. 8.

    Advance to the next time step.

  9. 9.

    Return to step 1 and repeat until the last time step is reached.

Example 3

In the two dimensional problem shown below, the following quantities are given p W  = 100, p N  = 20 and p E  = 50 and an inlet condition at face s with v s  = 20 and zero pressure gradient.

The flow is steady state and the density is uniform of value 1. The momentum equations for u e and v n are

$$ u_{C} = - d_{x} \left( {p_{e} - p_{w} } \right) $$

and

$$ v_{C} = - d_{y} \left( {p_{n} - p_{s} } \right) $$

where the constants d x  = 1 and d y  = 0.25. The element shown has Δx = Δy = 1. Use the collocated SIMPLE algorithm to derive the pressure correction equation and solve it to find the pressure for element C. Take \( p_{C}^{(n)} = 70 \) as an initial guess for pressure at C (Fig. 15.17).

Fig. 15.17
figure 17

The two dimensional domain used in Example 3

Solution

At the inlet the zero gradient condition can be used to compute

$$ {p}_{s} = {p}_{C} = {p}^{(n)}_{C} = 70 $$

now compute \( u_{C}^{(n)} ,v_{C}^{(n)} \) using

$$ \begin{aligned} u_{C}^{*} & = - d_{x} \left( {p_{e}^{(n)} - p_{w}^{(n)} } \right) \\ & = - 1\left( {60 - 85} \right) \\ & = 25 \\ \end{aligned} $$

and

$$ \begin{aligned} v_{C}^{*} & = - d_{y} \left( {p_{n}^{(n)} - p_{s}^{(n)} } \right) \\ & = - 0.25\left( {45 - 70} \right) \\ & = 6.25 \\ \end{aligned} $$

since \( p_{e}^{(n)} = 0.5\left( {p_{E}^{(n)} + p_{C}^{(n)} } \right),\;p_{n}^{(n)} = 0.5\left( {p_{E}^{(n)} + p_{N}^{(n)} } \right) \) and \( {p}_{w}^{(n)} = 0.5\left( {p_{E}^{(n)} + p_{W}^{(n)} } \right) \)

Now the pressure correction equation is constructed by substituting the mass flux and its correction into the mass conservation equation. Using the Rhie-Chow interpolation the face fluxes are computed as

$$ \begin{aligned} \dot{m}_{e}^{*} & = u_{e}^{*}\Delta y = \overline{{u_{e}^{*} }} - {d_{x}}\left[ {\mathop {\underbrace {{\left( {p_{E}^{(n)} - p_{C}^{(n)} } \right)}}_{pressure\;difference}}\limits_{across\;face} - \mathop {\underbrace {{0.5\left( {\left( {p_{e}^{(n)} - p_{w}^{(n)} } \right) + \left( {p_{ee}^{(n)} - p_{e}^{(n)} } \right)} \right)}}_{average\;pressure\;difference}}\limits_{across\;face} } \right] \\ & = \underbrace {{0.5\left[ {d_{x} \left( {p_{e}^{(n)} - p_{w}^{(n)} } \right) + d_{x} \left( {p_{ee}^{(n)} - p_{ww}^{(n)} } \right)} \right]}}_{{\overline{{u_{e}^{*} }} }} - d_{x} \left[ {\mathop {\underbrace {{\left( {p_{E}^{(n)} - p_{C}^{(n)} } \right)}}_{pressure\;difference}}\limits_{across\;face} - \mathop {\underbrace {{0.5\left( {\left( {p_{e}^{(n)} - p_{w}^{(n)} } \right) + \left( {p_{ee}^{(n)} - p_{e}^{(n)} } \right)} \right)}}_{average\;pressure\;difference}}\limits_{across\;face} } \right] \\ & = - d_{x} \left( {p_{E}^{(n)} - p_{C}^{(n)} } \right) \\ & = - 1\left( {50 - 70} \right) \\ & = 20 \\ \end{aligned} $$

similarly for the n and w face

$$ \begin{aligned} \dot{m}_{n}^{*} & = v_{n}^{*}\Delta x = \overline{{v_{n}^{*} }} - d_{y} \left[ {\mathop {\underbrace {{\left( {p_{N}^{(n)} - p_{C}^{(n)} } \right)}}_{pressure\;difference}}\limits_{across\;face} - \mathop {\underbrace {{0.5\left( {\left( {p_{n}^{(n)} - p_{s}^{(n)} } \right) + \left( {p_{nn}^{(n)} - p_{n}^{(n)} } \right)} \right)}}_{average\,pressure\;difference}}\limits_{ across\;face} } \right] \\ & = - d_{y} \left( {p_{N}^{(n)} - p_{C}^{(n)} } \right) \\ & = - 0.25\left( {20 - 70} \right) \\ & = 12.5 \\ \end{aligned} $$
$$ \begin{aligned} \dot{m}_{w}^{*} & = - u_{w}^{*}\Delta y = - \overline{{u_{w}^{*} }} + d_{x} \left[ {\mathop {\underbrace {{\left( {p_{C}^{(n)} - p_{W}^{(n)} } \right)}}_{pressure\;difference}}\limits_{across\;face} - \mathop {\underbrace {{0.5\left( {\left( {p_{e}^{(n)} - p_{w}^{(n)} } \right) + \left( {p_{w}^{(n)} - p_{ww}^{(n)} } \right)} \right)}}_{average\;pressure\;difference}}\limits_{across\;face} } \right] \\ & = d_{x} \left( {p_{C}^{(n)} - p_{W}^{(n)} } \right) \\ & = 1\left( {70 - 100} \right) \\ & = - 30 \\ \end{aligned} $$

with \( \dot{m}_{s} = - 20\Delta x = - 20 \) the pressure correction equation is constructed from

$$ \left( {\dot{m}_{e}^{*} + \dot{m}^{\prime}_{e} } \right) + \left( {\dot{m}_{n}^{*} + \dot{m}^{\prime}_{n} } \right) + \left( {\dot{m}_{w}^{*} + \dot{m}^{\prime}_{w} } \right) + \dot{m}_{s} = 0 $$

and

$$ \begin{aligned} \dot{m}^{\prime}_{e} + \dot{m}^{\prime}_{n} + \dot{m}^{\prime}_{w} & = - \left( {\dot{m}_{e}^{*} + \dot{m}_{n}^{*} + \dot{m}_{w}^{*} + \dot{m}_{s} } \right) \\ & = - \left( {20 + 12.5 - 30 - 20} \right) \\ & = 17.5 \\ \end{aligned} $$

now

$$ \begin{aligned} \dot{m}^{\prime}_{e} & = - d_{x} \left( {p^{\prime}_{E} - p^{\prime}_{C} } \right) \\ \dot{m}^{\prime}_{n} & = - d_{y} \left( {p^{\prime}_{N} - p^{\prime}_{C} } \right) \\ \dot{m}^{\prime}_{w} & = d_{x} \left( {p^{\prime}_{C} - p^{\prime}_{W} } \right) \\ \end{aligned} $$

thus we have

$$ - \left( {p^{\prime}_{E} - p^{\prime}_{C} } \right) - 0.25\left( {p^{\prime}_{N} - p^{\prime}_{C} } \right) + \left( {p^{\prime}_{C} - p^{\prime}_{W} } \right) = 17.5 $$

or

$$ 2.25p^{\prime}_{C} - p^{\prime}_{E} - 0.25p^{\prime}_{N} - p^{\prime}_{W} = 17.5 $$

if the E, N and W values were exact then we would have

$$ 2.25p^{\prime}_{C} = 17.5 $$

or

$$ p^{\prime}_{C} = 7.78 $$

then we would proceed with correcting the pressure and velocity components at C to yield

$$ \begin{aligned} p_{C}^{*} = p^{(n)}_{C} + p^{\prime}_{C} & = 77.78 \\ u^{\prime}_{C} & = 0 \Rightarrow u_{C}^{**} = 25 \\ v^{\prime}_{C} & = - d_{y} \left( {p^{\prime}_{n} - p^{\prime}_{s} } \right) \\ & = - 0.25\left( {0.5p^{\prime}_{C} - p^{\prime}_{C} } \right) \\ & = - 0.25\left( {0.5\,\times\,7.78\,-\,7.78} \right) \\ & = 0.9725 \\ \end{aligned} $$

so

$$ \begin{aligned} v_{C}^{**} & = 6.25 + 0.9725 \\ & = 7.2225 \\ \end{aligned} $$

6 Boundary Conditions

A boundary element has at least one face located at a boundary patch, which is denoted as a boundary face (Fig. 15.18). The treatment of boundary conditions at a boundary face is critical to the accuracy and robustness of any CFD code. Thus for any pressure-based code to succeed, it is imperative for the boundary conditions of both momentum and pressure-correction equations to be properly implemented. This section describes in detail the implementation of a variety of boundary conditions.

Fig. 15.18
figure 18

An example of a boundary element

A first note of interest is the expression of the Rhie-Chow interpolation at a boundary face, which has to be modified since the averaging cannot be performed in a fashion similar to an interior face. The average at a boundary face is written in terms of the element value as

$$ \overline{{\square}} _{b} = \square_{C} $$
(15.109)

where b refers to the boundary face centroid and C to the element centroid. Adopting this practice, the averages in the Rhie-Chow interpolation, the velocity, and the mass flow rate at a boundary face become

$$ \begin{aligned} & \overline{{{\mathbf{v}}_{b}^{*} }} = {\mathbf{v}}_{C}^{*} \\ & \overline{{ \nabla p_{b}^{(n)} }} = \nabla p_{C}^{(n)} \\ & {\overline{\mathbf{D}^{\mathbf{v}}_{b} }} = \mathbf{D}^{\mathbf{v}}_{C} \\ \end{aligned} $$
(15.110)
$$ \begin{aligned} \underbrace {{{\mathbf{v}}_{b}^{*} }}_{boundary\;face} & = \underbrace {{\overline{{{\mathbf{v}}_{b}^{*} }} - {\mathbf{D}}_{C}^{{\mathbf{v}}} \left( {\nabla p_{b}^{(n)} - \overline{{\nabla p_{b}^{(n)} }} } \right)}}_{{{\text{standard}}\;Rhie - Chow}} \\ & = \underbrace {{{\mathbf{v}}_{C}^{*} - {\mathbf{D}}_{C}^{{\mathbf{v}}} \left( {\nabla p_{b}^{(n)} - \nabla p_{C}^{(n)} } \right)}}_{boundary\;Rhie - Chow} \\ \end{aligned} $$
(15.111)
$$ \begin{aligned} \dot{m}_{b}^{*} & = \rho_{b} {\mathbf{v}}_{{^{b} }}^{*} \cdot {\mathbf{S}}_{b} \\ & = \rho_{b} \left[ {{\mathbf{v}}_{C}^{*} - {\mathbf{D}}_{C}^{{\mathbf{v}}} \left( {\nabla p_{b}^{(n)} - \nabla p_{C}^{(n)} } \right)} \right] \cdot {\mathbf{S}}_{b} \\ & = \rho_{b} {\mathbf{v}}_{C}^{*} \cdot {\mathbf{S}}_{b} - \rho_{b} {\mathcal{D}}_{C} \left( {p_{b}^{(n)} - p_{C}^{(n)} } \right) - \rho_{b} \left( {{\mathbf{D}}_{C}^{{\mathbf{v}}} \nabla p_{b}^{(n)} \cdot {\mathbf{T}}_{b} - {\mathbf{D}}_{C}^{{\mathbf{v}}} \nabla p_{C}^{(n)} \cdot {\mathbf{S}}_{b} } \right) \\ \end{aligned} $$
(15.112)

In what follows the implementation of boundary conditions is first presented for the momentum equation, followed by the implementation of the boundary conditions for the pressure (correction) equation. For the cases when the boundary conditions for the momentum and pressure correction equations are co-dependent, their full treatment is detailed in the pressure correction equation section.

6.1 Boundary Conditions for the Momentum Equation

The semi-discretized form of the momentum equation can be expressed as

$$ \underbrace {{\frac{{\left( {\rho {\mathbf{v}}} \right)_{C} - \left( {\rho {\mathbf{v}}} \right)_{C}^{^\circ } }}{{\Delta t}}V_{C} }}_{element\;discretization} + \underbrace {{\sum\limits_{f\sim nb(C)} {\left( {\dot{m}_{f} {\mathbf{v}}_{f} } \right)} }}_{face\;discretization} = - \underbrace {{\sum\limits_{f\sim nb(C)} {\left( {p_{f} {\mathbf{S}}_{f} } \right)} }}_{face\;discretization} + \underbrace {{\sum\limits_{f\sim nb(C)} {\left( {\tau_{f} \cdot {\mathbf{S}}_{f} } \right)} }}_{face\;discretization} + \mathop {\underbrace {{\mathbf{B}}}_{\text{element}}}\limits_{discretization} $$
(15.113)

where the discretization type of the various terms is explicitly stated. Terms that are evaluated at the element faces should be modified along a boundary face in accordance with the type of boundary condition used. Therefore, for boundary elements, the terms evaluated at the element faces are written as

$$ \underbrace {{\sum\limits_{f\sim nb(C)} {\left( {\dot{m}_{f} {\mathbf{v}}_{f} } \right)} }}_{face \, discretization} = \sum\limits_{f\sim interior \, nb(C)} {\left( {\dot{m}_{f} {\mathbf{v}}_{f} } \right) + \underbrace {{\dot{m}_{b} {\mathbf{v}}_{b} }}_{boundary \, face}} $$
(15.114)
$$ \begin{aligned} \underbrace {{\sum\limits_{f\sim nb(C)} {\left( {\tau_{f} \cdot {\mathbf{S}}_{f} } \right)} }}_{face \, discretization} & = \sum\limits_{f\sim interior \, nb(C)} {\left( {\tau_{f} \cdot {\mathbf{S}}_{f} } \right) + \underbrace {{\tau_{b} \cdot {\mathbf{S}}_{b} }}_{boundary \, face}} \\ & = \sum\limits_{f\sim interior \, nb(C)} {\left( {\tau_{f} \cdot {\mathbf{S}}_{f} } \right) + \mathop {\underbrace {{{\mathbf{F}}_{b} }}_{boundary}}\limits_{face} } \\ \end{aligned} $$
(15.115)
$$ \underbrace {{\sum\limits_{f\sim nb(C)} {\left( {p_{f} {\mathbf{S}}_{f} } \right)} }}_{face \, discretization} = \sum\limits_{f\sim interior \, nb(C)} {\left( {p_{f} {\mathbf{S}}_{f} } \right) + \underbrace {{p_{b} {\mathbf{S}}_{b} }}_{boundary \, face}} $$
(15.116)

where subscript b refers to a value at the boundary. As previously stated, the pressure term may be discretized following either an element or a face discretization. In either case the expanded form is the same since \( V_{C} \left( {\nabla p} \right)_{C} \) is calculated as \( \sum\limits_{f\sim nb(C)} {p_{f} {\mathbf{S}}_{f} } \) implying that the value at the boundary is always required. To show the way boundary pressure affects solution, the expanded form of the pressure gradient (i.e., face discretization) is adopted in the implementation of boundary conditions.

6.1.1 Wall Boundary Conditions

Generally a no-slip or a slip boundary condition may be applied to a moving or a stationary wall. The implementation involves computing and linearizing the shear stress at the wall. This is different from the Dirichlet condition, though for a cartesian grid the two conditions may be shown to be identical.

6.1.1.1 No-Slip Wall Boundary \( \left( {p_{b} = ?;\dot{m}_{b} = 0;{\mathbf{v}}_{b} = {\mathbf{v}}_{wall} } \right) \)

A no slip boundary condition implies that the velocity of the fluid at the wall v b is equal to the velocity of the wall v wall . For a stationary wall, the boundary velocity v b is zero. The known velocity at the wall could be wrongly viewed as a Dirichlet boundary condition. However this is not really the case, since what is needed is to have a zero normal boundary flux while also accounting for the shear stress. This cannot be satisfied by simply setting v b  = v wall . Figure 15.19 shows that this can be guaranteed by ensuring a shear stress that is tangential to the wall in addition to a boundary velocity equation that is equal to the wall velocity. The force F b exerted by the wall on the fluid can be written as

$$ {\mathbf{F}}_{b} = {\mathbf{F}}_{ \bot } + {\mathbf{F}}_{\parallel } $$
(15.117)

where \( {\mathbf{F}}_{\parallel } \) is in the tangential direction to the wall and \( {\mathbf{F}}_{ \bot } \) is in the normal direction, which is supposed to be zero. Thus

$$ {\mathbf{F}}_{b} = {\mathbf{F}}_{\parallel } = \tau_{wall} S_{b} $$
(15.118)

where \( \tau_{wall} \) is the shear stress exerted by the wall on the fluid given by

$$ \tau_{wall} = - \mu \frac{{\partial {\mathbf{v}}_{\parallel } }}{{\partial d_{ \bot } }}. $$
(15.119)
Fig. 15.19
figure 19

A schematic of a no-slip wall boundary condition

In Eq. (15.119) \( {\mathbf{v}}_{\parallel } \) is the velocity vector in the direction parallel to the wall and \( d_{ \bot } \) is the normal distance from the centroid of the boundary element to the wall computed as

$$ \begin{aligned} {\mathbf{n}} & = \frac{{{\mathbf{S}}_{b} }}{{S_{b} }}\,=\,{n_x}\mathbf{i}\,+\,{n_y}\mathbf{j}\,+\,{n_z}\mathbf{k} \\ d_{ \bot } & = {\mathbf{d}}_{Cb} \cdot {\mathbf{n}} = \frac{{{\mathbf{d}}_{Cb} \cdot {\mathbf{S}}_{b} }}{{S_{b} }} \\ \end{aligned} $$
(15.120)

and \( {\mathbf{n}}\) the wall normal unit vector. The velocity vector \( {\mathbf{v}}_{\parallel } \) can be written as the difference between v and its normal component as

$$ {\mathbf{v}}_{\parallel } = {\mathbf{v}} - \left( {{\mathbf{v}} \cdot {\mathbf{n}} } \right){\mathbf{n}} = \left\{ {\begin{array}{*{20}l} {u - \left( {un_{x} + vn_{y} + wn_{z} } \right)n_{x} } \\ {v - \left( {un_{x} + vn_{y} + wn_{z} } \right)n_{y} } \\ {w - \left( {un_{x} + vn_{y} + wn_{z} } \right)n_{z} } \\ \end{array} } \right\} $$
(15.121)

From Eq. (15.119), the wall shear stress can be approximated using

$$ \begin{aligned} \tau_{wall} & \approx - \mu_{b} \frac{{\left( {{\mathbf{v}}_{C} - {\mathbf{v}}_{b} } \right)_{||} }}{{d_{ \bot } }} = - \mu_{b} \frac{{\left( {{\mathbf{v}}_{C} - {\mathbf{v}}_{b} } \right) - \left[ {\left( {{\mathbf{v}}_{C} - {\mathbf{v}}_{b} } \right) \cdot {\mathbf{n}}} \right]{\mathbf{n}} }}{{d_{ \bot } }} \\ & = - \frac{{\mu_{b} }}{{d_{ \bot } }}\left\{ {\begin{array}{*{20}c} {\left( {u_{C} - u_{b} } \right) - \left[ {\left( {u_{C} - u_{b} } \right)n_{x} + \left( {v_{C} - v_{b} } \right)n_{y} + \left( {w_{C} - w_{b} } \right)n_{z} } \right]n_{x} } \\ {\left( {v_{C} - v_{b} } \right) - \left[ {\left( {u_{C} - u_{b} } \right)n_{x} + \left( {v_{C} - v_{b} } \right)n_{y} + \left( {w_{C} - w_{b} } \right)n_{z} } \right]n_{y} } \\ {\left( {w_{C} - w_{b} } \right) - \left[ {\left( {u_{C} - u_{b} } \right)n_{x} + \left( {v_{C} - v_{b} } \right)n_{y} + \left( {w_{C} - w_{b} } \right)n_{z} } \right]n_{z} } \\ \end{array} } \right\} \\ \end{aligned} $$
(15.122)

from which the boundary force for a laminar flow can be obtained as

$$ {\mathbf{F}}_{b} = - \frac{{\mu_{b} S_{b} }}{{d_{ \bot } }}\left\{ {\begin{array}{*{20}c} {\left( {u_{C} - u_{b} } \right) - \left[ {\left( {u_{C} - u_{b} } \right)n_{x} + \left( {v_{C} - v_{b} } \right)n_{y} + \left( {w_{C} - w_{b} } \right)n_{z} } \right]n_{x} } \\ {\left( {v_{C} - v_{b} } \right) - \left[ {\left( {u_{C} - u_{b} } \right)n_{ x} + \left( {v_{C} - v_{b} } \right)n_{y} + \left( {w_{C} - w_{b} } \right)n_{z} } \right]n_{y} } \\ {\left( {w_{C} - w_{b} } \right) - \left[ {\left( {u_{C} - u_{b} } \right)n_{x} + \left( {v_{C} - v_{b} } \right)n_{y} + \left( {w_{C} - w_{b} } \right)n_{z} } \right]n_{z} } \\ \end{array} } \right\} $$
(15.123)

Using Eq. (15.123) the coefficients of the boundary elements for the momentum equation in the x, y and z directions are modified as follows:

  • u-component equation

$$ \begin{aligned} & a_{C}^{u} \leftarrow \underbrace {{a_{C}^{u} }}_{interior\;faces\;contribution} + \underbrace {{\frac{{\mu_{b} S_{b} }}{{d_{ \bot } }}\left( {1 - n_{ x}^{2} } \right)}}_{boundary\;face\;contribution} \\ & 0 \leftarrow a_{F = b}^{u} \\ & b_{C}^{u} \leftarrow \underbrace {{b_{C}^{u} }}_{interior\;faces\;contribution} +\,\underbrace {{\frac{{\mu_{b} S_{b} }}{{d_{ \bot } }}\left[ {u_{b} \left( {1 - n_{x}^{2} } \right) +\left( {v_{C} - v_{b} } \right)n_{y} n_{x} - \left( {w_{C} - w_{b} } \right)n_{z} n_{x} } \right] - p_{b} S_{b}^{x} }}_{boundary\;face\; contribution} \\ \end{aligned} $$
(15.124)
  • v-component equation

$$ \begin{aligned} & a_{C}^{v} \leftarrow \underbrace {{a_{C}^{v} }}_{interior\;faces\;contribution} + \underbrace {{\frac{{\mu_{b} S_{b} }}{{d_{ \bot } }}\left( {1 - n_{y}^{2} } \right)}}_{boundary\;face\;contribution} \\ & 0 \leftarrow a_{F = b}^{v} \\ & b_{C}^{v} \leftarrow \underbrace {{b_{C}^{v} }}_{interior\;faces\;contribution} +\,\underbrace {{\frac{{\mu_{b} S_{b} }}{{d_{ \bot } }}\left[ { \left( {u_{C} - u_{b} } \right)n_{x} n_{y} + v_{b} \left( {1 - n_{y}^{2} } \right) + \left( {w_{C} - w_{b} } \right)n_{z} n_{y} } \right] - p_{b} S_{b}^{y} }}_{boundary\;face\;contribution} \\ \end{aligned} $$
(15.125)
  • w-component equation

$$ \begin{aligned} & a_{C}^{w} \leftarrow \underbrace {{a_{C}^{w} }}_{interior\;faces\;contribution} + \underbrace {{\frac{{\mu_{b} S_{b} }}{{d_{ \bot } }}\left( {1 - n_{z}^{2} } \right)}}_{boundary\,face\,contribution} \\ & 0 \leftarrow a_{F = b}^{w} \\ & b_{C}^{w} \leftarrow \underbrace {{b_{C}^{w} }}_{interior\;faces\;contribution} + \underbrace {{\frac{{\mu_{b} S_{b} }}{{d_{ \bot } }}\left[ { \left( {u_{C} - u_{b} } \right)n_{ x} n_{z} + \left( {v_{C} - v_{b} } \right)n_{y} n_{z} + w_{b} \left( {1 - n_{z}^{2} } \right)} \right] - p_{b} S_{b}^{z} }}_{boundary\;face\;contribution} \\ \end{aligned} $$
(15.126)

The unknown boundary pressure p b is extrapolated from the interior solution using either a truncated Taylor series expansion around point C such that pressure is found from

$$ p_{b} = p_{C} + \nabla p_{C}^{(n)} \cdot {\mathbf{d}}_{Cb} $$
(15.127)

or the mass flow rate expressed via the Rhie-Chow interpolation as

$$ \dot{m}_{b}^{*} = \rho_{b} {\mathbf{v}}_{{^{b} }}^{*} \cdot {\mathbf{S}}_{b} - \rho_{b} {\mathbf{D}}_{C}^{{\mathbf{v}}} \left( {\nabla p_{b}^{(n)} - \nabla p_{C}^{(n)} } \right) \cdot {\mathbf{S}}_{b} $$
(15.128)

Since the mass flow rate and velocity at the wall boundary are zero, the above equation reduces to

$$ 0 = 0 - \rho_{b} {\mathbf{D}}_{C}^{{\mathbf{v}}} \left( {\nabla p_{b}^{(n)} - \nabla p_{C}^{(n)} } \right) \cdot {\mathbf{S}}_{b} $$
(15.129)

which can be modified into

$$ \begin{aligned} {\mathbf{D}}_{C}^{{\mathbf{v}}} \nabla p_{b}^{(n)} \cdot {\mathbf{S}}_{b} & = \nabla p_{b}^{(n)} \cdot {\mathbf{S^{\prime}}}_{b} \\ & = \nabla p_{C}^{(n)} \cdot {\mathbf{S^{\prime}}}_{b} \\ \end{aligned} $$
(15.130)

Expressing \( {\mathbf{S^{\prime}}}_{b} \) as the sum of the two vector E b and T b , Eq. (15.130) becomes

$$ \nabla p_{b}^{(n)} \cdot \left( {{\mathbf{E}}_{b} + {\mathbf{T}}_{b} } \right) = \nabla p_{C}^{(n)} \cdot {\mathbf{S^{\prime}}}_{b} $$
(15.131)

Since E b is in the direction of Cb, the above equation can be modified to

$$ {\mathcal{D}}_{C} \left( {p_{b} - p_{C} } \right) = \left( {\nabla p_{C}^{(n)} \cdot {\mathbf{S^{\prime}}}_{b} - \nabla p_{b}^{(n)} \cdot {\mathbf{T}}_{b} } \right) $$
(15.132)

from which the boundary pressure is obtained as

$$ p_{b} = p_{C} + \frac{{\left( {\nabla p_{C}^{(n)} \cdot {\mathbf{S^{\prime}}}_{b} - \nabla p_{b}^{(n)} \cdot {\mathbf{T}}_{b} } \right)}}{{{\mathcal{D}}_{C} }} $$
(15.133)
6.1.1.2 Slip Wall Boundary \( \left( {p_{b} = ?;\dot{m}_{b} = 0;{\mathbf{F}}_{b} = 0} \right) \)

For this boundary condition, the wall shear stress is zero (Fig. 15.20). Therefore the boundary force is zero. The boundary pressure is computed as for the no-slip wall boundary case using Eq. (15.127) or Eq. (15.133). The coefficients of the momentum equation (in vector form) are modified as follows:

Fig. 15.20
figure 20

A schematic of a slip wall boundary condition

$$ \begin{aligned} & a_{C}^{{\mathbf{v}}} \leftarrow \underbrace {{a_{C}^{{\mathbf{v}}} }}_{interior\;faces\;contribution} \\ & 0 \leftarrow a_{F = b}^{{\mathbf{v}}} \\ & {\mathbf{b}}_{C}^{{\mathbf{v}}} \leftarrow \underbrace {{{\mathbf{b}}_{C}^{{\mathbf{v}}} }}_{interior\;faces\;contribution} - \underbrace {{p_{b} {\mathbf{S}}_{b} }}_{boundary\;face\;contribution} \\ \end{aligned} $$
(15.134)

6.1.2 Inlet Boundary Conditions

Three types of inlet boundary conditions are considered. (i) specified velocity; (ii) specified static pressure and velocity direction; and (iii) specified total pressure and velocity direction. All treatments of the pressure boundary conditions will be detailed in the pressure correction boundary conditions section.

6.1.2.1 Specified Velocity \( \left( {p_{b} = ?;\dot{m}_{b} \,specified;{\mathbf{v}}_{b} \,specified} \right) \)

For a specified velocity boundary condition at inlet (Fig. 15.21) the convection \( \left( {\dot{m}_{b} {\mathbf{v}}_{b} } \right) \) and diffusion \( \left( {{\mathbf{F}}_{b} = \tau_{b} \cdot {\mathbf{S}}_{b} } \right) \) terms at the boundary face are calculated using the known values of velocity v b and mass flow rate \( \dot{m}_{b} \). The pressure at the boundary is extrapolated from the boundary element centroid as

Fig. 15.21
figure 21

A schematic of specified velocity boundary condition at inlet

$$ p_{b} = p_{C} + \nabla p_{C}^{(n)} \cdot {\mathbf{d}}_{Cb} $$
(15.135)

The terms involving the boundary velocity are treated explicitly by adding them to the source term and setting the coefficient \( a_{F = b}^{{\mathbf{v}}} \) to zero while adding its value to the \( a_{C}^{{\mathbf{v}}} \) coefficient.

The coefficients of the boundary element are modified according to

$$ \begin{aligned} & a_{C}^{{\mathbf{v}}} \leftarrow a_{C}^{{\mathbf{v}}} \\ & b_{C}^{{\mathbf{v}}} \leftarrow b_{C}^{{\mathbf{v}}}\,-\,a_{F = b}^{{\mathbf{v}}} {\mathbf{v}}_{b} \\ & 0 \leftarrow a_{F = b}^{{\mathbf{v}}} \\ \end{aligned} $$
(15.136)
6.1.2.2 Specified Pressure and Velocity Direction \( \left( {p_{b}} = p_{specified} ;\;\right. \left.{\dot{m}_{b} ?;{\mathbf{e}}_{{\mathbf{v}}} \;specified;{\mathbf{v}}_{b} ?} \right) \)

In the case of a specified static pressure at inlet (Fig. 15.22), p b is known. The velocity being unknown, has to be computed from the pressure gradient at the boundary. To this end, a velocity direction should be specified as part of the boundary condition.

Fig. 15.22
figure 22

A schematic of specified pressure and velocity direction boundary condition at inlet

As the boundary pressure p b is known, its value is directly used in calculating the pressure gradient in the boundary element without any special treatment. Therefore p b is used in calculating \( \nabla p_{C} \).

The mass flow rate at the boundary is computed from the continuity equation (see next section). Then, for a specified velocity direction given by the unit vector e v , the velocity for a specified pressure boundary condition at inlet is obtained as

$$ \dot{m}_{b}^{**} = \rho_{b} {\mathbf{v}}_{b}^{**} \cdot {\mathbf{S}}_{b} = \rho_{b} \left\| {{\mathbf{v}}_{b}^{**} } \right\|{\mathbf{e}}_{{\mathbf{v}}} \cdot {\mathbf{S}}_{b} \Rightarrow \left\| {{\mathbf{v}}_{b}^{**} } \right\| = \frac{{\dot{m}_{b}^{**} }}{{\rho_{b} \left( {{\mathbf{e}}_{{\mathbf{v}}} \cdot {\mathbf{S}}_{b} } \right)}} \Rightarrow {\mathbf{v}}_{b}^{**} = \left\| {{\mathbf{v}}_{b}^{**} } \right\|{\mathbf{e}}_{{\mathbf{v}}} $$
(15.137)

The velocity at the boundary is computed at every iteration and the problem is solved as in the case of a specified velocity with the coefficients in the momentum equation modified according to Eq. (15.136).

Specified Total Pressure and Velocity Direction \( \left( {p_{o,b}} = p_{o,specified} ; \right. \) \( \left.{\dot{m}_{b} ?;{\mathbf{e}}_{{\mathbf{v}}} \;specified;{\mathbf{v}}_{b} ?} \right) \)

In the case of a specified total pressure at inlet (Fig. 15.23) the velocity direction should also be specified. However, the magnitude of the velocity and the pressure at the boundary are unknown though related using the total pressure definition given by

$$ p_{0} = \underbrace {p}_{static \, pressure} + \underbrace {{\frac{1}{2}\rho {\mathbf{v}} \cdot {\mathbf{v}}}}_{dynamic \, pressure} $$
(15.138)

where p 0 is the total pressure, p the static pressure, ρ the density, and v the velocity vector. The mass flow rate at the boundary is computed from the continuity equation (see next section). Knowing the mass flow rate, the velocity is computed in the same manner as for the specified pressure case using Eq. (15.137). The velocity is thus treated as a known velocity condition (i.e., a Dirichlet boundary condition) with the coefficients in the momentum equation modified according to Eq. (15.136).

Fig. 15.23
figure 23

A schematic of specified total pressure and velocity direction boundary condition at inlet

6.1.3 Outlet Boundary Conditions

Three types of boundary conditions at an outlet are considered: (i) a specified static pressure, (ii) a specified mass flow rate, and (iii) a fully developed flow.

6.1.3.1 Specified Static Pressure \( \left( {p_{b} = p_{specified} ;\dot{m}_{b} ?;{\mathbf{v}}_{b} ?} \right) \)

For the momentum equation, fully developed conditions are assumed at a specified pressure outlet (Fig. 15.24) implying a zero velocity gradient along the direction of the surface vector at outlet. This is also equivalent to assuming the velocity at the outlet to be equal to that of the boundary element. Thus it is similar to a zero flux boundary condition whose implementation is rather simple.

Fig. 15.24
figure 24

A schematic of specified static pressure boundary condition at outlet

The modifications to the coefficients are given by

$$ \begin{aligned} & a_{C}^{{\mathbf{v}}} \leftarrow \underbrace {{a_{C}^{{\mathbf{v}}} }}_{interior\;faces\;contribution} + \underbrace {{\dot{m}_{b} }}_{boundary\;face\;contribution} \\ & 0 \leftarrow a_{F = b}^{{\mathbf{v}}} \\ & {\mathbf{b}}_{C}^{{\mathbf{v}}} \leftarrow \underbrace {{{\mathbf{b}}_{C}^{{\mathbf{v}}} }}_{interior\;faces\;contribution} - \underbrace {{p_{b} {\mathbf{S}}_{b} }}_{boundary\;face\;contribution} \\ \end{aligned} $$
(15.139)

This sets the contribution of the outlet velocity to zero and uses the specified pressure boundary value in the computation of the pressure gradient.

However to ensure that the flux is zeroed in the outflow surface vector direction only, the velocity is usually extrapolated to the outlet using the boundary flux, which is computed from the boundary element flux as

$$ \nabla {\mathbf{v}}_{b} = \nabla {\mathbf{v}}_{C} - \left( {\nabla {\mathbf{v}}_{C} \cdot {\mathbf{e}}_{b} } \right){\mathbf{e}}_{b} $$
(15.140)

This ensures that the gradient along the boundary surface vector is zero. Then, using a Taylor series expansion, the velocity at the boundary is computed as

$$ {\mathbf{v}}_{b} = {\mathbf{v}}_{C} + \nabla {\mathbf{v}}_{b} \cdot {\mathbf{d}}_{Cb} $$
(15.141)

where \( \nabla {\mathbf{v}}_{b} \) is used instead of \( \nabla {\mathbf{v}}_{C} \). Therefore an additional correction is now added to the source term and the modifications to the coefficients become

$$ \begin{aligned} & a_{C}^{{\mathbf{v}}} \leftarrow \underbrace {{a_{C}^{{\mathbf{v}}} }}_{interior \, faces \, contribution} + \underbrace {{\dot{m}_{b} }}_{boundary \, face \, contribution} \\ & 0 \leftarrow a_{F = b}^{{\mathbf{v}}} \\ & {\mathbf{b}}_{C}^{{\mathbf{v}}} \leftarrow \underbrace {{{\mathbf{b}}_{C}^{{\mathbf{v}}} }}_{interior \, faces \, contribution}\underbrace {{ - \dot{m}_{b} \left( {\nabla {\mathbf{v}}_{b} \cdot {\mathbf{d}}_{Cb} } \right) - p_{b} {\mathbf{S}}_{b} }}_{boundary\,face\,contribution} \\ \end{aligned} $$
(15.142)
6.1.3.2 Specified Mass Flow Rate \( \left( {\dot{m}_{b} = \dot{m}_{specified} ;p_{b} ?{\mathbf{v}}_{b} ?} \right) \)

Since the flow is incompressible, a specified mass flow rate boundary condition (Fig. 15.25) is equivalent to specifying the normal component of velocity at the boundary. The velocity is calculated by assuming its direction to be the same as that at the main grid point, i.e., \( \left( {{\mathbf{e}}_{{\mathbf{v}}} } \right)_{b} = \left( {{\mathbf{e}}_{{\mathbf{v}}} } \right)_{C} \). Thus, the velocity is expressed as

$$ {\mathbf{v}}_{b} = \left| {{\mathbf{v}}_{b} } \right|\left( {{\mathbf{e}}_{{\mathbf{v}}} } \right)_{C} $$
(15.143)

with \( \left| {{\mathbf{v}}_{b} } \right| \) obtained from

$$ \dot{m}_{b} = \rho_{b} {\mathbf{v}}_{b} \cdot {\mathbf{S}}_{b} = \rho_{b} \left| {{\mathbf{v}}_{b} } \right|\left( {{\mathbf{e}}_{{\mathbf{v}}} } \right)_{C} \cdot {\mathbf{S}}_{b} \Rightarrow \left| {{\mathbf{v}}_{b} } \right| = \frac{{\dot{m}_{b} }}{{\rho_{b} \left( {{\mathbf{e}}_{{\mathbf{v}}} } \right)_{C} \cdot {\mathbf{S}}_{b} }} $$
(15.144)

allowing v b to be calculated. Thus for momentum, a specified velocity boundary condition is applied. The coefficients of the boundary elements are modified according to Eq. (15.136).

Fig. 15.25
figure 25

A schematic of specified mass flow rate boundary condition at outlet

6.1.3.3 Fully Developed Outlet Flow

For a fully developed flow, the velocity gradient normal to the outlet surface is assumed to be zero. Hence the velocity at the outlet is assumed to be known and computed from the zero normal gradient using Eqs. (15.140) and (15.141). As for the pressure at the boundary, it can be extrapolated from the interior pressure field using

$$ p_{b} = p_{C} + \nabla p_{C} \cdot {\mathbf{d}}_{Cb} $$
(15.145)

The velocity is treated as known and the coefficients of the momentum equation are modified according to Eq. (15.142).

6.1.4 Symmetry Boundary Condition

A scalar is reflected across a symmetry boundary. Thus, a symmetry boundary condition for a scalar variable is imposed by setting its normal gradient to zero, as with an insulated wall boundary condition. For the velocity vector, the symmetry condition shown in Fig. 15.26 also implies that it is reflected about the symmetry boundary with its parallel component (i.e., parallel to the symmetry boundary) retaining magnitude and direction, while its normal component becoming zero. This results in a zero shear stress but a non-zero normal stress along the symmetry boundary. Thus, the same boundary condition can be used to impose a slip wall boundary condition for viscous flows.

Fig. 15.26
figure 26

A schematic of a symmetry boundary condition

The unit vector in the direction normal to the boundary \( {\mathbf{n}}\) and the normal distance to the boundary \( d_{ \bot } \) are given by Eq. (15.120). Therefore the velocity components normal and parallel to a symmetry boundary satisfy

$$ \begin{array}{*{20}c} {{\mathbf{v}}_{ \bot } = 0} \\ {\frac{{\partial {\mathbf{v}}_{||} }}{\partial n} = 0} \\ \end{array} $$
(15.146)

The normal component of velocity can be written as

$$ {\mathbf{v}}_{ \bot } = \left( {{\mathbf{v}}} \cdot {\mathbf{n}} \right){\mathbf{n}} = \left\{ {\begin{array}{*{20}c} {\left( {u_{C} n_{x} + v_{C} n_{y} + w_{C} n_{z} } \right)n_{x} } \\ {\left( {u_{C} n_{x} + v_{C} n_{y} + w_{C} n_{z} } \right)n_{y} } \\ {\left( {u_{C} n_{x} + v_{C} n_{y} + w_{C} n_{z} } \right)n_{z} } \\ \end{array} } \right\} $$
(15.147)

while the parallel component is given by Eq. (15.121). The boundary force F b can be decomposed into a normal component \( {\mathbf{F}}_{ \bot } \) and a parallel component \( {\mathbf{F}}_{||} \). As the shear stress along a symmetry boundary is zero, the parallel component of F b is zero. Denoting the normal stress by \( \sigma_{ \bot } \), the force F b is given by

$$ {\mathbf{F}}_{b} = \sigma_{ \bot } S_{b} $$
(15.148)

The normal stress component can be approximated as

$$ \sigma_{ \bot } \simeq - 2\mu_{b} \frac{{{\mathbf{v}}_{ \bot } }}{{d_{ \bot } }} = - 2\frac{{\mu_{b} }}{{d_{ \bot } }}\left\{ {\begin{array}{*{20}c} {\left( {u_{C} n_{x} + v_{C} n_{y} + w_{C} n_{z} } \right)n_{x} } \\ {\left( {u_{C} n_{x} + v_{C} n_{y} + w_{C} n_{z} } \right)n_{y} } \\ {\left( {u_{C} n_{x} + v_{C} n_{y} + w_{C} n_{z} } \right)n_{z} } \\ \end{array} } \right\} $$
(15.149)

from which the boundary force is found to be

$$ {\mathbf{F}}_{b} = {\mathbf{F}}_{n} = - 2\frac{{\mu_{b} S_{b} }}{{d_{ \bot } }}\left\{ {\begin{array}{*{20}c} {\left( {u_{C} n_{x} + v_{C} n_{y} + w_{C} n_{z} } \right)n_{x} } \\ {\left( {u_{C} n_{x} + v_{C} n_{y} + w_{C} n_{z} } \right)n_{y} } \\ {\left( {u_{C} n_{x} + v_{C} n_{y} + w_{C} n_{z} } \right)n_{z} } \\ \end{array} } \right\} $$
(15.150)

The pressure gradient in the direction normal to a symmetry boundary is zero. Mathematically this is written as

$$ \nabla p_{b} \cdot \mathbf{n} = 0 $$
(15.151)

The pressure at a symmetry boundary should be extrapolated from the interior of the domain. Therefore to ensure a zero normal gradient, the pressure gradient at the symmetry boundary is computed as

$$ \nabla p_{b} = \nabla p_{C} - (\nabla p_{C} \cdot \mathbf{n})\mathbf{n} $$
(15.152)

Thus, the pressure is obtained from

$$ p_{b} = p_{C} + \nabla p_{b} \cdot {\mathbf{d}}_{Cb} $$
(15.153)

Using the above equations, the coefficients of the boundary elements for the momentum equation in the x, y and z directions are modified as follows:

  • u-component equation

    $$ \begin{aligned} a_{C}^{u} & \leftarrow \underbrace {{a_{C}^{u} }}_{interior \, faces \, contribution} + \underbrace {{\frac{{2\mu_{b} S_{b} }}{{d_{ \bot } }}n_{x}^{2} }}_{boundary \, face \, contribution} \\ 0 & \leftarrow a_{F = b}^{u} \\ b_{C}^{u} & \leftarrow \underbrace {{b_{C}^{u} }}_{interior \, faces \, contribution}\underbrace {{ - \frac{{2\mu_{b} S_{b} }}{{d_{ \bot } }}\left[ {v_{C} n_{y} + w_{C} n_{z} } \right]n_{x} - p_{b} S_{b}^{x} }}_{boundary \, face \, contribution} \\ \end{aligned} $$
    (15.154)
  • v-component equation

    $$ \begin{aligned} a_{C}^{v} & \leftarrow \underbrace {{a_{C}^{v} }}_{interior \, faces \, contribution} + \underbrace {{\frac{{2\mu_{b} S_{b} }}{{d_{ \bot } }}n_{y}^{2} }}_{boundary \, face \, contribution} \\ 0 & \leftarrow a_{F = b}^{v} \\ b_{C}^{v} & \leftarrow \underbrace {{b_{C}^{v} }}_{interior \, faces \, contribution}\underbrace {{ - \frac{{2\mu_{b} S_{b} }}{{d_{ \bot } }}\left[ {u_{C} n_{x} + w_{C} n_{z} } \right]n_{y} - p_{b} S_{b}^{y} }}_{boundary \, face \, contribution} \\ \end{aligned} $$
    (15.155)
  • w-component equation

    $$ \begin{aligned} a_{C}^{w} & \leftarrow \underbrace {{a_{C}^{w} }}_{interior \, faces \, contribution} + \underbrace {{\frac{{2\mu_{b} S_{b} }}{{d_{ \bot } }}n_{z}^{2} }}_{boundary \, face \, contribution} \\ 0 & \leftarrow a_{F = b}^{w} \\ b_{C}^{w} & \leftarrow \underbrace {{b_{C}^{w} }}_{interior \, faces \, contribution}\underbrace {{ - \frac{{2\mu_{b} S_{b} }}{{d_{ \bot } }}\left[ {u_{C} n_{x} + v_{C} n_{y} } \right]n_{z} - p_{b} S_{b}^{z} }}_{boundary \, face \, contribution} \\ \end{aligned} $$
    (15.156)

While this is not a comprehensive list of momentum boundary conditions, it does cover the most common types.

6.2 Boundary Conditions for the Pressure Correction Equation

The continuity equation for a boundary cell can be written as

$$ \sum\limits_{f \sim nb(C)} {\dot{m}_{f} + \underbrace {{\dot{m}_{b} }}_{boundary \, face}} = 0 $$
(15.157)

or

$$ \sum\limits_{f \sim nb(C)} {(\dot{m}_{f}^{*} + \dot{m}^{\prime}_{f} ) + \underbrace {{(\dot{m}_{b}^{*} + \dot{m}^{\prime}_{b} )}}_{boundary \, face}} = 0 $$
(15.158)

where \( \dot{m}_{b}^{*} \) is the boundary mass flux and \( \dot{m}^{\prime}_{b} \) is its correction. While for an internal face the mass flux and its correction are defined by Eqs. (15.100) and (15.101), for a boundary face the definition is slightly different. Since at a boundary face only the boundary cell contributes to the average quantities, the use of Eq. (15.109) in combination with Eqs. (15.100) and (15.101) gives

$$ \begin{aligned} & \dot{m}_{b}^{*} = \rho_{b} {\mathbf{v}}_{C}^{*} \cdot {\mathbf{S}}_{b} - \rho_{b} {\mathbf{D}}_{C}^{{\mathbf{v}}} (\nabla p_{b}^{(n)} - \nabla p_{C}^{(n)} ) \cdot {\mathbf{S}}_{b} \\ & \dot{m}^{\prime}_{b} = - \rho_{b} {\mathcal{D}}_{C} (p^{\prime}_{b} - p^{\prime}_{C} ) \\ \end{aligned} $$
(15.159)

In implementing boundary conditions the values of \( \dot{m}_{b}^{*} \), \( \dot{m}^{\prime}_{b} \), p b , and \( p^{\prime}_{b} \) must be calculated. Based on the discussions related to the momentum equation, three types of boundary conditions can be inferred. The first type is designated by “specified mass flow rate” (e.g., walls or velocity specified at inlets). For this category \( \dot{m}^{\prime}_{b} = 0 \), which is similar to a zero scalar flux boundary condition, and no modification to the pressure-correction equation is needed. The pressure however has to be computed at the boundary from the interior field. The second type of boundary conditions is termed “pressure specified” where \( p^{\prime}_{b} = 0 \) and for which a Dirichlet-like condition has to be enforced for the pressure-correction equation. For this condition, \( \dot{m}_{b}^{*} \) is computed from the boundary and interior pressure field. In the third type, an implicit relation exists between the pressure and the mass flow rate, as in a specified total pressure boundary condition. In this case, an explicit equation is extracted from the implicit relation and substituted into the pressure-correction equation.

Details regarding the various types of boundary conditions and their implementation are now given.

6.2.1 Wall Boundary Condition

6.2.1.1 \( \left( {p_{b} = ?;\dot{m}_{b} = 0;{\mathbf{v}}_{b} = {\mathbf{v}}_{wall} } \right)\quad {\text{or}}\quad \left( {p_{b} = ?;\dot{m}_{b} = 0;{\mathbf{F}}_{b} = 0} \right) \)

Whether it is a slip (Fig. 15.20) or no-slip (Fig. 15.19) wall boundary condition the mass flow rate is zero. Therefore \( \dot{m}^{\prime}_{b} = 0 \), which is equivalent to a specified zero flux and implying that no modification is needed for the pressure-correction equation. However the pressure at the wall is required and is computed using Eq. (15.127) or Eq. (15.133) or a low order extrapolation profile, as shown below.

$$ p_{b} = \left\{ {\begin{array}{*{20}l} {p_{C} + \nabla p_{C}^{(n)} \cdot {\mathbf{d}}_{Cb} } & {Eq.\; ( 1 5. 1 2 7 )} \\ {\begin{array}{*{20}c} {p_{C} + \frac{{\left( {\nabla p_{C}^{(n)} \cdot {\mathbf{S^{\prime}}}_{b} - \nabla p_{b}^{(n)} \cdot {\mathbf{T}}_{b} } \right)}}{{{\mathcal{D}}_{C} }}} \\ {p_{C} } \\ \end{array} } & {\begin{array}{*{20}c} {Eq.\; ( 1 5. 1 3 3 )} \\ {loworder\;extrapolation} \\ \end{array} } \\ \end{array} } \right. $$
(15.160)

6.2.2 Inlet Boundary Conditions

6.2.2.1 Specified Velocity \( \left( {p_{b} = ?;\dot{m}_{b}\, specified;{\mathbf{v}}_{b} \,specified} \right) \)

For a specified velocity at inlet (Fig. 15.21), the mass flux is known and its correction is set to zero, i.e., \( \dot{m}^{\prime}_{b} = 0 \). Thus, similar to a wall boundary condition, the term is simply dropped from the pressure-correction equation. The pressure at the boundary is extrapolated from the internal pressure field using Eq. (15.127) or Eq. (15.133) or a low order extrapolation profile as summarized in Eq. (15.160).

6.2.2.2 Specified Pressure and Velocity Direction \( \left( {p_{b}} = p_{specified} ;\right. \) \( \left.{\dot{m}_{b} ?;\,{\mathbf{e}}_{{\mathbf{v}}} \,specified;{\mathbf{v}}_{b} ?} \right) \)

In the case of a specified static pressure at inlet (Fig. 15.22), p b is known and thus \( p^{\prime}_{b} \) is set to zero but \( \dot{m}^{\prime}_{b} \ne 0 \). The inlet is treated as a Dirichlet boundary condition for the pressure-correction equation. The coefficient of the \( p^{\prime} \) equation becomes

$$ a_{C}^{{p^{\prime}}} = \underbrace {{\sum\limits_{f \sim nb(C)} {\rho_{f} {\mathcal{D}}_{f} } }}_{interior \, faces \, contribution} + \underbrace {{\rho_{b} {\mathcal{D}}_{C} }}_{boundary \, face \, contribution} $$
(15.161)
6.2.2.3 Specified Total Pressure and Velocity Direction \( \left( {p_{o,b}} = p_{o,specified} ;\right. \;\left.{\dot{m}_{b} ?;\;{\mathbf{e}}_{{\mathbf{v}}} \,specified;{\mathbf{v}}_{b} ?} \right)\)

As mentioned earlier, for a specified total pressure (Fig. 15.23), the velocity direction should also be specified. The total pressure relation given by Eq. (15.138) is first rewritten as a function of the mass flow rate and pressure by replacing the velocity magnitude by the mass flux. Thus,

$$ \begin{aligned} \dot{m}_{b} & = \rho {\mathbf{v}}_{b} \cdot {\mathbf{S}}_{b} = \rho |{\mathbf{v}}_{b} |{\mathbf{e}}_{{\mathbf{v}}} \cdot {\mathbf{S}}_{b} \Rightarrow \rho |{\mathbf{v}}_{b} | = \frac{{\dot{m}_{b} }}{{{\mathbf{e}}_{{\mathbf{v}}} \cdot {\mathbf{S}}_{b} }} \\ & \Rightarrow p_{o,b} = p_{b} + \frac{1}{2{\rho}_{b}}\frac{{\dot{m}_{b}^{2} }}{{({\mathbf{e}}_{{\mathbf{v}}} \cdot {\mathbf{S}}_{b} )^{2} }} \\ \end{aligned} $$
(15.162)

Using a Taylor expansion about p b , \( p^{\prime}_{b} \) is obtained as

$$ p_{b} + p^{\prime}_{b} = p_{b} + \frac{{\partial p_{b} }}{{\partial \dot{m}_{b} }}(\dot{m}^{\prime}_{b} ) \Rightarrow p^{\prime}_{b} = \frac{{\partial p_{b} }}{{\partial \dot{m}_{b} }}\dot{m}^{\prime}_{b} $$
(15.163)

Differentiating Eq. (15.162) with respect to \( \dot{m}_{b} \) and substituting into Eq. (15.163), the final form of \( p^{\prime}_{b} \) is found to be

$$ p^{\prime}_{b} = - \frac{{\dot{m}^{*}_{b} }}{{\rho_{b} ({\mathbf{e}}_{{\mathbf{v}}} \cdot {\mathbf{S}}_{b} )^{2} }}\dot{m}^{\prime}_{b} = - \frac{{\rho_{b} {\mathbf{v}}_{b}^{*} \cdot {\mathbf{v}}_{b}^{*} }}{{\dot{m}_{b}^{*} }}\dot{m}_{b}^{\prime} $$
(15.164)

Substituting Eq. (15.164) in Eq. (15.159), the mass flux correction is expressed as

$$ \dot{m}_{b}^{\prime} = - \rho_{b} {\mathcal{D}}_{C} \left( {p^{\prime}_{b} - p^{\prime}_{C} } \right) \Rightarrow \dot{m}^{\prime}_{b} = \frac{{\dot{m}_{b}^{*} \rho_{b} {\mathcal{D}}_{C} }}{{\dot{m}_{b}^{*} - {\mathcal{D}}_{C} (\rho_{b} {\mathbf{v}}_{b}^{*} \cdot \rho_{b} {\mathbf{v}}_{b}^{*} )}}p^{\prime}_{C} $$
(15.165)

Replacing \( \dot{m}_{b}^{\prime} \) in the expanded continuity equation (Eq. 15.158) by its expression from Eq. (15.165), the modified \( a_{C}^{{p^{\prime}}} \) coefficient for the boundary cell becomes

$$ a_{C}^{{p^{\prime}}} = \underbrace {{\sum\limits_{f \sim nb(C)} {\rho_{f} {\mathcal{D}}_{f} } }}_{interior \, faces \, contribution} + \underbrace {{\frac{{\rho_{b} \dot{m}_{b}^{*} {\mathcal{D}}_{C} }}{{\dot{m}_{b}^{*} - {\mathcal{D}}_{C} (\rho_{b} {\mathbf{v}}_{b}^{*} \cdot \rho_{b} {\mathbf{v}}_{b}^{*} )}}}}_{boundary \, face \, contribution} $$
(15.166)

6.2.3 Outlet Boundary Conditions

6.2.3.1 Specified Pressure \( \left( {p_{b} = p_{specified} ;\dot{m}_{b} ?; \;{\mathbf{v}}_{b} ?} \right) \)

For a specified pressure at outlet (Fig. 15.24) \( p^{\prime}_{b} \) is set to zero. On the other hand, \( \dot{m}^{\prime}_{b} \) is computed as

$$ \dot{m}^{\prime}_{b} = - \rho_{b} {\mathcal{D}}_{{\mathcal{C}}} (p^{\prime}_{b} - p^{\prime}_{C} ) $$
(15.167)

The velocity direction being needed, it is customary to take the direction of v b to be that of the upwind velocity v C . The expression of the \( a_{C}^{{p^{\prime}}} \) coefficient in the pressure-correction equation becomes

$$ a_{C}^{{p^{\prime}}} = \underbrace {{\sum\limits_{f \sim nb(C)} {\rho_{f} {\mathcal{D}}_{f} } }}_{interior\;faces\;contribution} + \underbrace {{\rho_{b} {\mathcal{D}}_{C} }}_{boundary \, face \, contribution} $$
(15.168)
6.2.3.2 Specified Mass Flow Rate \( \left( {\dot{m}_{b} = \dot{m}_{specified} ;p_{b} ?{\mathbf{v}}_{b} ?} \right) \)

For a specified mass flow rate at outlet (Fig. 15.25), \( \dot{m}^{\prime}_{b} \) is zero and is simply dropped from the pressure correction equation with no modifications required for the coefficients of the boundary elements. By setting \( \dot{m}^{\prime}_{b} \) to zero in Eq. (15.159), the pressure correction (or pressure) at the boundary is set equal to the pressure correction (or pressure) at the boundary cell centroid.

6.2.3.3 Fully Developed Outlet Flow

For a fully developed flow, the velocity at the outlet is assumed to be known and computed from the zero normal gradient. This means that \( \dot{m}_{b} \) at the outlet is known. Therefore no correction is needed and \( \dot{m}^{\prime}_{b} \) is set to zero. However, as the boundary pressure is unknown, it is extrapolated from the interior pressure field. Since the velocity is iteratively updated, the above treatment does not guarantee overall conservation except at convergence. It is customary with incompressible flows to overcome this issue and to enforce global mass conservation at any iteration by modifying \( \dot{m}_{b} \) at the boundary to satisfy overall mass conservation. This is done by calculating the total mass flow rate entering the domain \( \sum {\dot{m}_{in} } \). Then based on the calculated mass flow rates at outlet boundaries, the total mass flow rate leaving the domain \( \sum {\dot{m}_{out} } \) is computed. The mass flow rate at an outlet is adjusted according to

$$ \dot{m}_{out} \leftarrow \dot{m}_{out} \frac{{\sum {\dot{m}_{in} } }}{{\sum {\dot{m}_{out} } }} $$
(15.169)

To be able to apply the above treatment, the outlet should be placed far away from any recirculation zone.

6.2.4 Symmetry Boundary Condition

The mass flow rate across a symmetry line (Fig. 15.26) is zero and as such its correction is set to zero, i.e., \( \dot{m}^{\prime}_{b} = 0 \). Thus, similar to a wall boundary condition, the mass flow rate correction term is simply dropped from the pressure-correction equation. The pressure at the boundary is extrapolated from the internal pressure field using Eq. (15.127) or Eq. (15.133) or a low order extrapolation profile as summarized in Eq. (15.160).

6.2.5 The Relative Nature of Pressure

For incompressible flow problems in which the normal velocities are prescribed on all boundaries, a difficulty arises due to the relative nature of pressure. In such cases, since only the pressure gradient appears in the momentum equation, there is no means for determining the absolute level of pressure, and only pressure differences have physical meaning. This indeterminacy of the pressure level leads to a singular coefficient matrix A and the direct solution of the system \( {\mathbf{A}}\phi = {\mathbf{b}} \) fails. The singularity is easily removed by simply setting the pressure at one point in the domain to a prescribed value. The remaining pressures are then calculated relative to this value.

7 The SIMPLE Family of Algorithms

In the SIMPLE algorithm [13], velocity and pressure are treated in a segregated (sequential) manner, with the pressure field computed by deriving a pressure correction equation that exploits the discrete momentum equation to replace the velocity field in the continuity equation with a pressure term. In the derivation, a velocity correction term, \( \overline{{{\mathbf{H}}_{f} }} [{\mathbf{v^{\prime}}}] \), was neglected as retaining it renders the equation unmanageable.

Discarding this term does not affect the final solution since its value is zero at convergence. Rather, it affects the path to convergence because during the initial iterations its value can be significant. This large value may either cause divergence or slow down the rate of convergence as a result of an overestimated pressure correction field. To counterbalance that, in SIMPLE the pressure is under relaxed by computing its value using \( p = p^{*} + \lambda^{p} p^{\prime} \), where \( \lambda^{p} \) is the pressure under relaxation factor. For optimum convergence, \( \lambda^{p} \) is usually set equal to \( ( 1 { }{-}\lambda^{{\mathbf{v}}} ) \), where \( \lambda^{{\mathbf{v}}} \) is the momentum under relaxation factor, with more information on this provided later.

Despite the use of under relaxation, the rate of convergence of the SIMPLE algorithm remains problem dependent and researchers sought alternatives for further improvements. Their effort culminated in the development of a SIMPLE-like family of algorithms such as SIMPLEC [17], SIMPLER [3], PISO [18], SIMPLEX [5], PRIME [19], SIMPLEM [20], and SIMPLEST [21]. Moukalled and Darwish [22] unified the formulation of these algorithms for both incompressible and compressible flows while Darwish et al. [23] and Jang et al. [24] assessed their performance. It is not the intention here to give a full account of these algorithms, rather, attention will be focussed on the two most popular variants, which are the SIMPLEC (SIMPLE Consistent) algorithm of Van Doormal and Raithby and the PISO (Pressure-Implicit Split Operator) algorithm of Issa. These two algorithms present two different approaches for dealing with the \( \overline{{{\mathbf{H}}_{f} }} [{\mathbf{v^{\prime}}}] \) term. In SIMPLEC the velocity correction at the main grid point is approximated as the weighted average of the velocity corrections at the neighboring locations altering the term \( \overline{{{\mathbf{H}}_{f} }} [{\mathbf{v^{\prime}}}] \) into a modified one, \( {\tilde{\mathbf{H}}}_{f} [{\mathbf{v^{\prime}}}] \), of smaller magnitude, which is then neglected. In the PISO algorithm, the \( \overline{{{\mathbf{H}}_{f} }} [{\mathbf{v^{\prime}}}] \) term is accounted for as part of the split operator approach. In all other algorithms, the \( \overline{{{\mathbf{H}}_{f} }} [{\mathbf{v^{\prime}}}] \) term is neglected as in SIMPLE and modifications are introduced either to the momentum equations or the D v operator. Because the PISO algorithm is equivalent to one step of the SIMPLE algorithm and one or more steps of the PRIME algorithm, the latter is also detailed.

In the PRIME [19] algorithm the momentum equation is solved explicitly. This explicit treatment of the momentum equation is justified by its small contribution to the convergence of the entire flow field. On the other hand, finding the correct solution for the pressure field represents the most important factor impacting the overall convergence.

In SIMPLEST [21], the coefficients in the momentum equation are separated into their convection and diffusion parts with the convection terms treated explicitly and the diffusion terms implicitly, thus affecting D v and H. The justification for the explicit treatment of convection is based on the similarity between the propagation of disturbances at a finite speed without any change in magnitude in a pure convection situation, and the propagation of error, from a particular point to the neighboring grid points, in a single iteration of explicit iterative methods. While the implicit treatment of diffusion is argued based on the similarity between the propagation of disturbances in a pure diffusion situation instantaneously in all directions with rapid decay in their amplitude and the reduction of errors throughout the entire solution domain, in a single iteration, by implicit solution methods.

In SIMPLEM (SIMPLE-Modified) [20], the pressure-correction equation is solved before the momentum equation implying that the pressure field is computed using the old velocity field. This results in better pressure corrections than velocity corrections and interchange the disadvantages and advantages of the SIMPLE algorithm.

In SIMPLER (SIMPLE-Revised) [3], an additional equation is developed from which the pressure is directly calculated while the SIMPLE-like pressure-correction equation is used to update the velocity field. The reason for a separate pressure equation being that, once the velocity field is updated using the predicted pressure correction field, it no longer satisfies the momentum equations. Therefore, the pressure should be calculated from another equation to match the velocities, so that the momentum equations are also satisfied.

The SIMPLEX algorithm [5] was developed with the aim of ensuring that the rate of convergence will not degrade with grid refinement. It differs from SIMPLE in the way the D v field is computed. This is done by using an additional set of equations, which is developed and solved based on the assumption that the influence of the spatial distribution of pressure difference changes little with grid refinement. Therefore, if the pressure difference influence is restricted to a cell, it would be appropriate to assume that, by extrapolation, the pressure difference at the main grid point adequately represents the pressure differences at the element faces.

Though all of the above algorithms were originally derived for a segregated grid, they are applicable within a collocated grid framework.

7.1 The SIMPLEC Algorithm

The SIMPLEC (SIMPLE-Consistent) [17] algorithm is a modified version of the SIMPLE algorithm derived by simply assuming that the velocity correction at point C is the weighted average of the corrections at the neighboring grid points. Mathematically this is expressed by

$$ {\mathbf{v^{\prime}}}_{C} \approx \frac{{\sum\limits_{F{\sim}NB(C)} {a_{F}^{{\mathbf{v}}} {\mathbf{v^{\prime}}}_{F} } }}{{\sum\limits_{F{\sim}NB(C)} {a_{F}^{{\mathbf{v}}} } }} \Rightarrow \sum\limits_{F{\sim}NB(C)} {a_{F}^{{\mathbf{v}}} {\mathbf{v^{\prime}}}_{F} } \approx {\mathbf{v^{\prime}}}_{C} \sum\limits_{F{\sim}NB(C)} {a_{F}^{{\mathbf{v}}} } $$
(15.170)

and using the H operator, Eq. (15.170) can be written as

$$ \sum\limits_{F \sim NB(C)} {\frac{{a_{F}^{{\mathbf{v}}} {\mathbf{v^{\prime}}}_{F} }}{{a_{C}^{{\mathbf{v}}} }} \approx {\mathbf{v^{\prime}}}_{C} } \sum\limits_{F \sim NB(C)} {\frac{{a_{F}^{{\mathbf{v}}} }}{{a_{C}^{{\mathbf{v}}} }} \Rightarrow {\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}]} \approx {\mathbf{v^{\prime}}}_{C} {\mathbf{H}}_{C} [1] $$
(15.171)

Therefore instead of neglecting the \( \overline{{{\mathbf{H}}_{C} }} [{\mathbf{v^{\prime}}}] \) term as in SIMPLE, it is replaced by the approximate value given by the above equation. With this approximation the velocity correction given by Eq. (15.85) becomes

$$ \left( {1 + {\mathbf{H}}_{C} [1]} \right){\mathbf{v^{\prime}}}_{C} = - {\mathbf{D}}_{C}^{{\mathbf{v}}} (\nabla p^{\prime})_{C} \Rightarrow {\mathbf{v^{\prime}}}_{C} = - {\tilde{\mathbf{D}}}_{C}^{{\mathbf{v}}} (\nabla p^{\prime})_{C} $$
(15.172)

Equation (15.172) can then be used to derive the pressure correction equation.

The same result can be achieved by adding and subtracting the term \( \sum\limits_{F \sim NB(C)} {a_{F}^{{\mathbf{v}}} {\mathbf{v}}_{C} } \) from the momentum equation obtained by combining Eqs. (15.76) and (15.77), leading to the following modified equation:

$$ \left( {a_{C}^{{\mathbf{v}}} + \sum\limits_{F \sim NB(C)} {a_{F}^{{\mathbf{v}}} } } \right){\mathbf{v}}_{C} + \sum\limits_{F \sim NB(C)} {a_{F}^{{\mathbf{v}}} ({\mathbf{v}}_{F} - {\mathbf{v}}_{C} )} = - V_{C} (\nabla p)_{C} + {\hat{\mathbf{b}}}_{C}^{{\mathbf{v}}} $$
(15.173)

which, in turn, can be written as

$$ {\mathbf{v}}_{C} + {\tilde{\mathbf{H}}}_{C} [{\mathbf{v}} - {\mathbf{v}}_{C} ] = - {\tilde{\mathbf{D}}}_{C}^{{\mathbf{v}}} (\nabla p)_{C} + {\tilde{\mathbf{B}}}_{C}^{{\mathbf{v}}} $$
(15.174)

By using Eq. (15.174), the velocity correction equation becomes

$$ {\mathbf{v^{\prime}}}_{C} {\mathbf{ = }} - {\tilde{\mathbf{H}}}_{C} [{\mathbf{v^{\prime}}} - {\mathbf{v^{\prime}}}_{C} ] - {\tilde{\mathbf{D}}}_{C}^{{\mathbf{v}}} (\nabla p^{\prime})_{C} $$
(15.175)

Then the term \( {\tilde{\mathbf{H}}}_{C} [{\mathbf{v^{\prime}}} - {\mathbf{v^{\prime}}}_{C} ] \) is dropped, which is equivalent to the approximation given by Eq. (15.171), and the modified velocity correction is used in deriving the pressure correction equation.

Due to a better estimate in SIMPLEC (i.e., a smaller term is dropped), the relaxation of pressure becomes unnecessary and as compared to SIMPLE, the resulting velocity corrections will satisfy better the momentum equations. Consequently, a higher rate of convergence is obtained. Thus, with the exceptions of dropping \( {\tilde{\mathbf{H}}}_{C} [{\mathbf{v^{\prime}}} - {\mathbf{v^{\prime}}}_{C} ] \) rather than \( {\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}] \) and replacing \( {\mathbf{D}}_{C}^{{\mathbf{v}}} \) by \( {\tilde{\mathbf{D}}}_{C}^{{\mathbf{v}}} \), the steps involved in the SIMPLEC algorithm are similar to those of the SIMPLE algorithm.

7.2 The PRIME Algorithm

In the PRIME (PRessure Implicit Momentum Explicit) [19] algorithm, the momentum equation is solved explicitly. This explicit treatment is justified by the small contribution to the convergence of the entire flow field by the iterative sweeps of the momentum equation. On the other hand, finding the correct solution for the pressure field represents the most important factor in the overall convergence. Based on this argument, the PRIME algorithm can be summarized as follows:

The momentum equation is solved explicitly to obtain a new velocity field v * using

$$ {\mathbf{v}}_{C}^{*} = - {\mathbf{H}}_{C} \left[{\mathbf{v}}^{(n)} \right] - {\mathbf{D}}_{C}^{{\mathbf{v}}} \left(\nabla p^{(n)} \right)_{C} + {\mathbf{B}}_{C}^{{\mathbf{v}}} $$
(15.176)

This velocity field is employed to derive the pressure correction equation. Thus defining the correction fields such that

$$ \begin{array}{*{20}c} {{\mathbf{v}}_{C}^{**} = {\mathbf{v}}_{C}^{*} + {\mathbf{v^{\prime}}}_{C} } & {\;p_{C}^{*} = p_{C}^{(n)} } \\ \end{array} + p^{\prime}_{C} $$
(15.177)

the corrected field would satisfy

$$ {\mathbf{v}}_{C}^{**} = - {\mathbf{H}}_{C} [{\mathbf{v}}^{**} ] - {\mathbf{D}}_{C}^{{\mathbf{v}}} (\nabla p^{*} )_{C} + {\mathbf{B}}_{C}^{{\mathbf{v}}} = - {\mathbf{H}}_{C} [{\mathbf{v}}^{*} + {\mathbf{v^{\prime}}}] - {\mathbf{D}}_{C}^{{\mathbf{v}}} \left[ {\nabla \left( {p^{(n)} + p^{\prime}} \right)} \right]_{C} + {\mathbf{B}}_{C}^{{\mathbf{v}}} $$
(15.178)

leading to the following expression relating velocity and pressure correction:

$$ {\mathbf{v^{\prime}}}_{C} = \underline{{ - \left( {{\mathbf{H}}_{C} \left[ {{\mathbf{v}}^{*} - {\mathbf{v}}^{(n)} } \right] + {\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}]} \right)}} - {\mathbf{D}}_{C}^{{\mathbf{v}}} \nabla p^{\prime}_{C} $$
(15.179)

Substituting Eq. (15.179) and its correction into the continuity equation yields

$$ - \sum\limits_{f{\sim}nb(C)} {\rho_{f} \overline{{{\mathbf{D}}_{f} }} } \nabla p^{\prime}_{f} \cdot {\mathbf{S}}_{f} = - \sum\limits_{f{\sim}nb(C)} {\dot{m}_{f}^{*} } + \underline{{\sum\limits_{f{\sim}nb(C)} {\left[ {\rho_{f} \left( {\overline{{{\mathbf{H}}_{f} }} \left[ {{\mathbf{v}}^{*} - {\mathbf{v}}^{(n)} } \right] + \overline{{{\mathbf{H}}_{f} }} [{\mathbf{v^{\prime}}}]} \right) \cdot {\mathbf{S}}_{f} } \right]} }} $$
(15.180)

where the underlined terms in Eqs. (15.179) and (15.180) are neglected.

The terms neglected in PRIME \( \left( {{\mathbf{H}}_{C} \left[ {{\mathbf{v}}^{*} {-}{\mathbf{v}}^{(n)} } \right] \, + {\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}]} \right) \) can become smaller than the term neglected in SIMPLE \( \left( {{\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}]} \right) \) if \( {\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}] \) and \( {\mathbf{H}}_{C} \left[ {{\mathbf{v}}^{*} {-}{\mathbf{v}}^{(n)} } \right] \) are of opposite signs. It is worth noting that \( {\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}\left] { \, = {\mathbf{H}}_{C} } \right[{\mathbf{v}}^{**} {-}{\mathbf{v}}^{*} ] \) is a correction to satisfy continuity, while \( {\mathbf{H}}_{C} \left[ {{\mathbf{v}}^{*} {-}{\mathbf{v}}^{(n)} } \right] \) is a correction to satisfy momentum. Usually the corrector added to satisfy momentum is opposite to that added to satisfy continuity and hence, the neglected term \( \left( {{\mathbf{H}}_{C} \left[ {{\mathbf{v}}^{*} {-}{\mathbf{v}}^{(n)} } \right] \, + {\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}]} \right) \) is smaller. Moreover, since the momentum equations are explicitly solved, no under-relaxation is required. This has the advantage of increasing the stability of the algorithm.

7.3 The PISO Algorithm

In the PISO algorithm [18, 25], the \( {\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}] \) term is accounted for as part of a correction procedure composed of two or more steps. The first step is similar to the SIMPLE algorithm where \( \mathbf{v}^{\prime} \) is computed from Eq. (15.83) while neglecting \( {\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}] \). The continuity satisfying velocity v ** and pressure p * fields are used to recalculate the coefficients of the momentum equation and then to solve it explicitly. The new velocity field v *** is used to calculate the mass flow rate field \( \dot{m}^{***} \) at the element faces using the Rhie-Chow interpolation. Then, \( {\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}] \) is partially recovered in a second corrector step where the velocity correction is written as

$$ \begin{aligned} {\mathbf{v}}_{C}^{****} & = {\mathbf{v}}_{C}^{***} + {\mathbf{v^{\prime\prime}}}_{C} \\ & = - {\mathbf{H}}_{C}^{**} [{\mathbf{v}}^{**} ] - ({\mathbf{D}}_{C}^{{\mathbf{v}}} )^{**} (\nabla p^{*} )_{C} + {\mathbf{v^{\prime\prime}}}_{C} \\ & = - {\mathbf{H}}_{C}^{**} [{\mathbf{v}}^{*} + {\mathbf{v}}^{\prime} ] - ({\mathbf{D}}_{C}^{{\mathbf{v}}} )^{**} (\nabla p^{*} )_{C} + {\mathbf{v^{\prime\prime}}}_{C} \\ & = - {\mathbf{H}}_{C}^{**} [{\mathbf{v}}^{*} ] - {\mathbf{H}}_{C}^{**} [{\mathbf{v^{\prime}}}] - ({\mathbf{D}}_{C}^{{\mathbf{v}}} )^{**} (\nabla p^{*} )_{C} + {\mathbf{v^{\prime\prime}}}_{C} \\ & = \underbrace {{ - {\mathbf{H}}_{C}^{**} [{\mathbf{v}}^{*} ] - ({\mathbf{D}}_{C}^{{\mathbf{v}}} )^{**} (\nabla p^{*} )_{C} }}_{{ \approx {\mathbf{v}}_{C}^{**} }} - {\mathbf{H}}_{C}^{**} \left[ { - {\mathbf{D}}_{C}^{{\mathbf{v}}} (\nabla p^{\prime})_{C} } \right] + {\mathbf{v^{\prime\prime}}}_{C} \\ & \approx {\mathbf{v}}_{C}^{**} + \underline{{\mathbf{v^{\prime\prime}}}_{C} - {\mathbf{H}}_{C}^{**} {\left[ {{\mathbf{D}}_{C}^{{\mathbf{v}}} (\nabla p^{\prime})_{C} } \right]}} \\ \end{aligned} $$
(15.181)

In Eq. (15.181) the underlined term represents the portion of the \( {\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}] \) that is recovered by the second corrector step. The second velocity correction satisfies

$$ {\mathbf{v^{\prime\prime}}}_{C} = - \underline{{{\mathbf{H}}_{C}^{**} [{\mathbf{v^{\prime\prime}}}]}} - ({\mathbf{D}}_{C}^{{\mathbf{v}}} )^{**} (\nabla p^{\prime\prime})_{C} $$
(15.182)

Using Eq. (15.181) with the Rhie-Chow interpolation between points C and F, a new pressure-correction field is obtained as

$$ - \sum\limits_{f{\sim}nb(C)} {\rho_{f} \overline{{{\mathbf{D}}_{f} }} \nabla p^{\prime\prime}_{f} \cdot {\mathbf{S}}_{f} = - \sum\limits_{f{\sim}nb(C)} {\dot{m}_{f}^{*} } + \underline{{\sum\limits_{f \sim nb(C)} {\left( {\rho_{f} \overline{{{\mathbf{H}}_{f} }} [{\mathbf{v^{\prime\prime}}}] \cdot {\mathbf{S}}_{f} } \right)} }} } $$
(15.183)

where the underlined terms in Eqs. (15.182) and (15.183) are again neglected. This corrector step may be repeated as many times as desired, each time recovering a new additional portion of \( {\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}] \).

By following the sequence of events, it can be easily seen that PISO may be considered as a combination of one SIMPLE step and one or more PRIME steps, hence combining the implicitness of the SIMPLE algorithm with the stability of the PRIME algorithm. The sequence of events in the collocated PISO algorithm can be summarized as follows:

  1. 1.

    To compute the solution at time t + Δt, use as an initial guess the solution at time t for pressure, velocity, and mass flow rate fields p (n), u (n), and \( \dot{m}^{(n)} \), respectively.

  • SIMPLE Step

  1. 2.

    Solve implicitly the momentum equation given by Eq. (15.70) to obtain a new velocity field v *.

  2. 3.

    Update the mass flow rate at the cell faces using the Rhie-Chow interpolation technique (Eq. 15.100) to obtain a momentum satisfying mass flow rate field \( \dot{m}_{f}^{*} \).

  3. 4.

    Using the new mass flow rates, assemble the pressure correction equation (Eq. 15.98) and solve it to obtain a pressure correction field p′.

  4. 5.

    Update the pressure and velocity fields at the cell centroids and the mass flow rate at the cell faces to obtain continuity-satisfying fields using Eq. (15.101).

  • PRIME Step(s)

  1. 6.

    Using the latest available velocity and pressure fields, calculate the coefficients of the momentum equation and solve it explicitly.

  2. 7.

    Update the mass flow rate at the cell faces using the Rhie-Chow interpolation technique.

  3. 8.

    Using the new mass flow rates, assemble the pressure correction equation (Eq. 15.183) and solve it to obtain a pressure correction field.

  4. 9.

    Update pressure, velocity, and mass flow rate fields using expressions similar to the ones given in Eq. (15.101).

  5. 10.

    Go to step 6 and repeat based on the desired number of corrector steps.

  6. 11.

    Set the initial guess for velocity, mass flow rate, and pressure as u **, \( \dot{m}^{**} \), and p *.

  7. 12.

    Go back to step 2 and repeat until convergence.

  8. 13.

    Set the solution at time t + Δt to be equal to the converged solution and set the current time t + Δt to be t.

  9. 14.

    Advance to the next time step.

  10. 15.

    Go back to step 1 and repeat until the last time step is reached.

A flowchart of the PISO algorithm is presented in Fig. 15.27.

Fig. 15.27
figure 27

A flow chart of the PISO algorithm

8 Optimum Under-Relaxation Factor Values for v and \( p^{\prime} \)

To promote convergence in the SIMPLE algorithm the momentum and continuity equations are under relaxed using the under relaxation factors λ v and λ p, respectively. An important task is to find the under relaxation values that will result in the optimum convergence rate. Recalling that the velocity correction is obtained without any under relaxation from

$$ {\mathbf{v^{\prime}}}_{C} = - {\mathbf{D}}_{C} (\nabla p^{\prime})_{C} $$
(15.184)

Moreover, in calculating the pressure field, the pressure correction is under relaxed in order for the velocity correction field given by Eq. (15.184) to satisfy the exact velocity correction equation given by

$$ {\mathbf{v^{\prime}}}_{C} = - {\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}] - \lambda^{p} {\mathbf{D}}_{C} (\nabla p^{\prime})_{C} $$
(15.185)

Equating Eqs. (15.184) and (15.185), an expression for λ p is obtained as

$$ - {\mathbf{D}}_{C} (\nabla p^{\prime})_{C} = - {\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}] - \lambda^{p} {\mathbf{D}}_{C} (\nabla p^{\prime})_{C} \Rightarrow \lambda^{p} = 1 + \frac{{{\mathbf{H}}_{C} [{\mathbf{v^{\prime}}}]}}{{{\mathbf{v^{\prime}}}_{C} }} = 1 + \frac{{\sum\limits_{F \sim NB(C)} {a_{F}^{{\mathbf{v}}} {\mathbf{v^{\prime}}}_{F} } }}{{a_{C}^{{\mathbf{v}}} {\mathbf{v^{\prime}}}_{C} }} $$
(15.186)

The SIMPLEC algorithm eliminated the need to under relax pressure correction and resulted in the optimum acceleration rate. Therefore, using the approximation introduced in SIMPLEC, the velocity correction at C can be written as the weighted average of the velocity corrections at the neighboring grid points such that

$$ {\mathbf{v^{\prime}}}_{C} \approx \frac{{\sum\limits_{F \sim NB(C)} {a_{F}^{{\mathbf{v}}} {\mathbf{v^{\prime}}}_{F} } }}{{\sum\limits_{F \sim NB(C)} {a_{F}^{{\mathbf{v}}} } }} $$
(15.187)

From Eqs. (15.70)–(15.73) the coefficient \( a_{C}^{{\mathbf{v}}} \) can be expressed as

$$ a_{C}^{{\mathbf{v}}} = \frac{1}{{\lambda^{{\mathbf{v}}} }}\left( {a_{C}^{\mathbf{v}} - \sum\limits_{F \sim NB(C)} {a_{F}^{{\mathbf{v}}} } + \sum\limits_{f \sim nb(C)} {\dot{m}_{f} } } \right) $$
(15.188)

which in the limit of a steady state solution (the case for which under relaxation is used, since for an unsteady situation the time step plays the role of the under relaxation factor) reduces to

$$ a_{C}^{{\mathbf{v}}} = - \frac{1}{{\lambda^{{\mathbf{v}}} }}\sum\limits_{F \sim NB(C)} {a_{F}^{{\mathbf{v}}} } $$
(15.189)

Substituting Eq. (15.189) in Eq. (15.187), the velocity correction is approximated as

$$ {\mathbf{v^{\prime}}}_{C} \approx - \frac{{\sum\limits_{F \sim NB(C)} {a_{F}^{{\mathbf{v}}} {\mathbf{v^{\prime}}}_{F} } }}{{\lambda^{{\mathbf{v}}} a_{C}^{{\mathbf{v}}} }} \Rightarrow a_{C}^{{\mathbf{v}}} {\mathbf{v^{\prime}}}_{C} \approx - \frac{{\sum\limits_{F \sim NB(C)} {a_{F}^{{\mathbf{v}}} {\mathbf{v^{\prime}}}_{F} } }}{{\lambda^{{\mathbf{v}}} }} $$
(15.190)

substituting Eq. (15.190) in Eq. (15.186), an expression relating λ v and λ p is obtained as

$$ \lambda^{p} \approx 1 - \lambda^{{\mathbf{v}}} $$
(15.191)

Experience has shown that the performance of the SIMPLE algorithm with its under relaxation factors satisfying Eq. (15.191) is similar to that of the SIMPLEC algorithm.

9 Treatment of Various Terms with the Rhie-Chow Interpolation

9.1 Treatment of the Under-Relaxation Term

The use of the collocated grid method with the Rhie-Chow interpolation resulted in solutions that are dependent on the value of under relaxation factor in the momentum equation. To eliminate this dependence, a modification to the Rhie-Chow interpolation is required. The under relaxed momentum equation is written as

$$ \frac{1}{{\lambda^{{\mathbf{v}}} }}a_{C}^{{\mathbf{v}}} {\mathbf{v}}_{C} = - \sum\limits_{F \sim NB(C)} {a_{F}^{{\mathbf{v}}} {\mathbf{v}}_{F} + {\mathbf{b}}_{C}^{{\mathbf{v}}} } - V_{C} \nabla p_{C} + \left( {\frac{{1 - \lambda^{{\mathbf{v}}} }}{{\lambda^{{\mathbf{v}}} }}} \right)a_{C}^{{\mathbf{v}}} {\mathbf{v}}_{C}^{(n)} $$
(15.192)

where \( {\mathbf{b}}_{C}^{{\mathbf{v}}} \) is the source term of the momentum equation from which the pressure and under relaxation source terms are extracted and \( {\mathbf{v}}_{C}^{(n)} \) is the previous iteration value of velocity at cell centroid C. The corresponding under relaxed momentum equation using a staggered grid formulation can be expressed as

$$ \frac{1}{{\lambda^{{\mathbf{v}}} }}a_{f}^{{\mathbf{v}}} {\mathbf{v}}_{f} = - \sum\limits_{nb \sim NB(f)} {a_{nb}^{{\mathbf{v}}} {\mathbf{v}}_{nb} + {\mathbf{b}}_{f}^{{\mathbf{v}}} } - V_{f} \nabla p_{f} + \left( {\frac{{1 - \lambda^{{\mathbf{v}}} }}{{\lambda^{{\mathbf{v}}} }}} \right)a_{f}^{{\mathbf{v}}} {\mathbf{v}}_{f}^{(n)} $$
(15.193)

The Rhie-Chow interpolation method mimics the staggered grid formulation by forming a pseudo-momentum equation at the cell face. It is because of this behavioral imitation that the Rhie-Chow interpolation is successful. Therefore as a guiding principle, the yardstick to any modification to the Rhie-Chow interpolation should be whether the modified formulation is similar to the staggered grid formulation. Therefore, the form of the under relaxed equation using the Rhie-Chow interpolation should be given by

$$ \frac{1}{{\lambda^{{\mathbf{v}}} }}\overline{{a_{f}^{{\mathbf{v}}} }} {\mathbf{v}}_{f} = - \overline{{\sum\limits_{nb \sim NB(f)} {a_{nb}^{{\mathbf{v}}} {\mathbf{v}}_{nb} + {\mathbf{b}}_{f}^{{\mathbf{v}}} } }} - \overline{{V_{f} }} \nabla p_{f} + \left( {\frac{{1 - \lambda^{{\mathbf{v}}} }}{{\lambda^{{\mathbf{v}}} }}} \right)\overline{{a_{f}^{{\mathbf{v}}} }} {\mathbf{v}}_{f}^{(n)} $$
(15.194)

The average of the first term on the right hand side is obtained as

$$ \begin{aligned} - \overline{{\sum\limits_{nb \sim NB(f)} {a_{nb}^{{\mathbf{v}}} {\mathbf{v}}_{nb} + {\mathbf{b}}_{f}^{{\mathbf{v}}} } }} & = - g_{C} \left( {\sum\limits_{F \sim NB(C)} {\left( {a_{F}^{{\mathbf{v}}} {\mathbf{v}}_{F} } \right) + {\mathbf{b}}_{C}^{{\mathbf{v}}} } } \right) - g_{F} \left( {\sum\limits_{N \sim NB(F)} {\left( {a_{N}^{{\mathbf{v}}} {\mathbf{v}}_{N} } \right) + {\mathbf{b}}_{F}^{{\mathbf{v}}} } } \right) \\ & = g_{C} \left[ {\frac{1}{{\lambda^{{\mathbf{v}}} }}a_{C}^{{\mathbf{v}}} {\mathbf{v}}_{C} + V_{C} \nabla p_{C} - \left( {\frac{{1 - \lambda^{{\mathbf{v}}} }}{{\lambda^{{\mathbf{v}}} }}} \right)a_{C}^{{\mathbf{v}}} {\mathbf{v}}_{C}^{(n)} } \right] \\ & \quad + g_{F} \left[ {\frac{1}{{\lambda^{{\mathbf{v}}} }}a_{F}^{{\mathbf{v}}} {\mathbf{v}}_{F} + V_{F} \nabla p_{F} - \left( {\frac{{1 - \lambda^{{\mathbf{v}}} }}{{\lambda^{{\mathbf{v}}} }}} \right)a_{F}^{{\mathbf{v}}} {\mathbf{v}}_{F}^{(n)} } \right] \\ & = \frac{1}{{\lambda^{{\mathbf{v}}} }}\overline{{a_{f}^{{\mathbf{v}}} {\mathbf{v}}_{f} }} + \overline{{V_{f} \nabla p_{f} }} - \left( {\frac{{1 - \lambda^{{\mathbf{v}}} }}{{\lambda^{{\mathbf{v}}} }}} \right)\overline{{a_{f}^{{^{{\mathbf{v}}} }} {\mathbf{v}}_{f}^{(n)} }} \\ \end{aligned} $$
(15.195)

Substituting Eq. (15.195) into Eq. (15.194), the extended Rhie-Chow interpolated cell face velocity \( {\mathbf{v}}_{f} \) is obtained as

$$ {\mathbf{v}}_{f} = \overline{{{\mathbf{v}}_{f} }} - \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\nabla p_{f} - \overline{{\nabla p_{f} }} } \right) + (1 - \lambda^{{\mathbf{v}}} )\left( {{\mathbf{v}}_{f}^{(n)} - \overline{{{\mathbf{v}}_{f}^{(n)} }} } \right) $$
(15.196)

Not accounting for the effect of under-relaxation on the face velocity results in solutions that depend on the under relaxation factor.

9.2 Treatment of the Transient Term

When solving a transient problem with a backward Euler transient scheme the discretized momentum equation can be written as

$$ a_{C}^{{\mathbf{v}}} {\mathbf{v}}_{C} = - \sum\limits_{F \sim NB(C)} {\left( {a_{F}^{{\mathbf{v}}} {\mathbf{v}}_{F} } \right) + {\mathbf{b}}_{C}^{{\mathbf{v}}} } - V_{C} \nabla p_{C} + a_{C}^{ \circ } {\mathbf{v}}_{C}^{ \circ } $$
(15.197)

where \( {\mathbf{b}}_{C}^{{\mathbf{v}}} \) is the source term of the momentum equation from which the pressure and transient source terms are extracted. The equivalent equation for the staggered grid variable arrangement has a similar form given by

$$ a_{f}^{{\mathbf{v}}} {\mathbf{v}}_{f} = - \sum\limits_{nb \sim NB(f)} {\left( {a_{nb}^{{\mathbf{v}}} {\mathbf{v}}_{nb} } \right) + {\mathbf{b}}_{f}^{{\mathbf{v}}} } - V_{f} \nabla p_{f} + a_{f}^{ \circ } {\mathbf{v}}_{f}^{ \circ } $$
(15.198)

Using the Rhie-Chow interpolation method, a pseudo cell-face equation will be constructed as

$$ \overline{{a_{f}^{{\mathbf{v}}} }} {\mathbf{v}}_{f} = - \overline{{\sum\limits_{nb \sim NB(f)} {a_{nb}^{{\mathbf{v}}} {\mathbf{v}}_{nb} + {\mathbf{b}}_{f}^{{\mathbf{v}}} } }} - \overline{{V_{f} }} \nabla p_{f} + \overline{{a_{f}^{ \circ } }} {\mathbf{v}}_{f}^{ \circ } $$
(15.199)

The average of the first term on the right hand side is obtained as

$$ \begin{aligned} - \overline{{\sum\limits_{nb \sim NB(f)} {a_{nb}^{{\mathbf{v}}} {\mathbf{v}}_{nb} + {\mathbf{b}}_{f}^{{\mathbf{v}}} } }} & = - g_{C} \left( {\sum\limits_{F \sim NB(C)} {\left( {a_{F}^{{\mathbf{v}}} {\mathbf{v}}_{F} } \right) + {\mathbf{b}}_{C}^{{\mathbf{v}}} } } \right) \\ & \quad - g_{F} \left( {\sum\limits_{N \sim NB(F)} {\left( {a_{N}^{{\mathbf{v}}} {\mathbf{v}}_{N} } \right) + {\mathbf{b}}_{F}^{{\mathbf{v}}} } } \right) \\ & = g_{C} \left[ {a_{C}^{{\mathbf{v}}} {\mathbf{v}}_{C} + V_{C} \nabla p_{C} - a_{C}^{ \circ } {\mathbf{v}}_{C}^{ \circ } } \right] \\ & \quad + g_{F} \left[ {a_{F}^{{\mathbf{v}}} {\mathbf{v}}_{F} + V_{F} \nabla p_{F} - a_{F}^{ \circ } {\mathbf{v}}_{F}^{ \circ } } \right] \\ & = \overline{{a_{f}^{{\mathbf{v}}} {\mathbf{v}}_{f} }} + \overline{{V_{f} \nabla p_{f} }} - \overline{{a_{f}^{ \circ } {\mathbf{v}}_{f}^{ \circ } }} \\ \end{aligned} $$
(15.200)

Substituting into Eq. (15.84), the extended Rhie-Chow interpolated cell face velocity \( {\mathbf{v}}_{f} \) is obtained

$$ {\mathbf{v}}_{f} = \overline{{{\mathbf{v}}_{f} }} - \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\nabla p_{f} - \overline{{\nabla p_{f} }} } \right) + \frac{{\overline{{a_{f}^{ \circ } {\mathbf{D}}_{f}^{{\mathbf{v}}} }} }}{{V_{f} }}\left( {{\mathbf{v}}_{f}^{ \circ } - \overline{{{\mathbf{v}}_{f}^{ \circ } }} } \right) $$
(15.201)

Not accounting for the effect of the unsteady term on the face velocity results in solutions that are time step dependent and have an oscillatory behavior for small time step. This correction is valid only for the first order Euler discretization. In case of more accurate time discretization schemes similar corrections can be performed following the same principles.

9.3 Treatment of the Body Force Term

When treating body forces in the staggered grid arrangement, the stencil of the body force term is exactly that of the pressure gradient term. In the case of a collocated grid arrangement, the body force, velocity, and momentum variables are calculated at the same location. Thus, in order to have a discretization of the body force that retains a similar stencil as the pressure, a redistribution of the body force term is needed. The discretized momentum equation is written as

$$ a_{C}^{{\mathbf{v}}} {\mathbf{v}}_{C} = - \sum\limits_{F \sim NB(C)} {a_{F}^{{\mathbf{v}}} {\mathbf{v}}_{F} + {\mathbf{b}}_{C}^{{\mathbf{v}}} } - V_{C} (\nabla p)_{C} + V_{C} \overline{\overline{{{\mathbf{B}}_{C}^{{\mathbf{v}}} }}} $$
(15.202)

where the double bar indicates two averaging steps. The first step is to compute \( \overline{{{\mathbf{B}}_{C}^{{\mathbf{v}}} }} \) (Fig. 15.28) at the cell face as

$$ \overline{{{\mathbf{B}}_{f}^{{\mathbf{v}}} }} = g_{C} {\mathbf{B}}_{C}^{{\mathbf{v}}} + (1 - g_{C} ){\mathbf{B}}_{F}^{{\mathbf{v}}} $$
(15.203)

while the second (Fig. 15.29) is to get an average of these face values at the cell centre.

Fig. 15.28
figure 28

Treatment of body force and pressure gradient on a staggered grid

Fig. 15.29
figure 29

Standard and improved Rhie-Chow treatment of body forces

The average values at cell center can best be derived [26] by considering the one dimensional situation depicted in Fig. 15.30.

Fig. 15.30
figure 30

One dimensional stationary fluid

For the case of a stationary fluid, the pressure gradient should be in equilibrium with the body forces leading to

$$ 0 = - \nabla p_{f} + {\mathbf{B}}_{f}^{{\mathbf{v}}} $$
(15.204)

Expanding the above equation, a relation between the pressures at C and F can be written as

$$ p_{C} = p_{F} + B_{f} \delta y $$
(15.205)

or more generally as

$$ p_{C} = p_{F} + {\mathbf{B}}_{f} \cdot {\mathbf{d}}_{CF} $$
(15.206)

where B f is the magnitude of B f given by

$$ B_{f} = \rho_{f} g $$
(15.207)

For incompressible flows, the variation with temperature of the density appearing in the body force term is modeled using the Boussinesq approximation as given by Eq. (3.101).

Again for cell C the pressure gradient should be in equilibrium with the body forces, resulting in

$$ 0 = - \nabla p_{C} + {\mathbf{B}}_{C}^{{\mathbf{v}}} \Rightarrow \nabla p_{C} = {\mathbf{B}}_{C}^{{\mathbf{v}}} $$
(15.208)

However the pressure gradient for cell C is computed as

$$ \begin{aligned} \nabla p_{C} & = \frac{{\sum\limits_{f} {p_{f} {\mathbf{S}}_{f} } }}{{V_{C} }} \\ & = \frac{{\sum\limits_{f} {\left( {g_{C} p_{C} + \left( {1 - g_{C} } \right)p_{F} } \right){\mathbf{S}}_{f} } }}{{V_{C} }} \\ \end{aligned} $$
(15.209)

substituting from Eq. (15.206) gives

$$ \begin{aligned} \nabla p_{C} & = \frac{{\sum\limits_{f} {\left( {g_{C} \left( {p_{F} + \overline{{{\mathbf{B}}_{f}^{{\mathbf{v}}} }} \cdot {\mathbf{d}}_{CF} } \right) + (1 - g_{C} )p_{F} } \right){\mathbf{S}}_{f} } }}{{V_{C} }} \\ & = \frac{{\sum\limits_{f} {p_{F} {\mathbf{S}}_{f} } }}{{V_{C} }} + \frac{{\sum\limits_{f} {g_{C} } \left( {\overline{{{\mathbf{B}}_{f}^{{\mathbf{v}}} }} \cdot {\mathbf{d}}_{CF} } \right){\mathbf{S}}_{f} }}{{V_{C} }} \\ & = p_{F} \frac{{\sum\limits_{f} {{\mathbf{S}}_{f} } }}{{\underbrace {{V_{C} }}_{0}}} + \frac{{\sum\limits_{f} {g_{C} } \left( {\overline{{{\mathbf{B}}_{f}^{{\mathbf{v}}} }} \cdot {\mathbf{d}}_{f} } \right){\mathbf{S}}_{f} }}{{V_{C} }} \\ & = \frac{{\sum\limits_{f} {g_{C} } \left( {\overline{{{\mathbf{B}}_{f}^{{\mathbf{v}}} }} \cdot {\mathbf{d}}_{f} } \right){\mathbf{S}}_{f} }}{{V_{C} }} \\ & = \overline{\overline{{{\mathbf{B}}_{C}^{{\mathbf{v}}} }}} \\ \end{aligned} $$
(15.210)

which implies that

$$ \overline{\overline{{{\mathbf{B}}_{C}^{{\mathbf{v}}} }}} = \frac{{\sum\limits_{f} {g_{C} \left( {\overline{{{\mathbf{B}}_{f}^{{\mathbf{v}}} }} \cdot {\mathbf{d}}_{f} } \right)} {\mathbf{S}}_{f} }}{{V_{C} }} $$
(15.211)

The second requirement is that the cell-face velocity be similar to that of the staggered arrangement equation:

$$ \overline{{a_{f}^{{\mathbf{v}}} }} {\mathbf{v}}_{f} = \overline{{ - \sum\limits_{nb \sim NB(f)} {a_{nb}^{{\mathbf{v}}} {\mathbf{v}}_{nb} + {\mathbf{b}}_{f}^{{\mathbf{v}}} } }} - \overline{{V_{f} }} \nabla p_{f} + \overline{{V_{f} {\mathbf{B}}_{f}^{{\mathbf{v}}} }} $$
(15.212)

where \( {\mathbf{b}}_{C}^{{\mathbf{v}}} \) is the source term given in Eq. (15.71) from which the pressure and body force terms are extracted. The averaging of the coefficients yields

$$ \begin{aligned} - \overline{{\sum\limits_{nb \sim NB(f)} {a_{nb}^{{\mathbf{v}}} {\mathbf{v}}_{nb} + {\mathbf{b}}_{f}^{{\mathbf{v}}} } }} & = - g_{C} \left( {\sum\limits_{F \sim NB(C)} {\left( {a_{F}^{{\mathbf{v}}} {\mathbf{v}}_{F} } \right) + {\mathbf{b}}_{C}^{{\mathbf{v}}} } } \right) \\ & \quad - g_{F} \left( {\sum\limits_{N \sim NB(F)} {\left( {a_{N}^{{\mathbf{v}}} {\mathbf{v}}_{N} } \right) + {\mathbf{b}}_{F}^{{\mathbf{v}}} } } \right) \\ & = g_{C} \left[ {a_{C}^{{\mathbf{v}}} {\mathbf{v}}_{C} + V_{C} \nabla p_{C} - V_{C} \overline{\overline{{{\mathbf{B}}_{C}^{{\mathbf{v}}} }}} } \right] \\ & \quad + g_{F} \left[ {a_{F}^{{\mathbf{v}}} {\mathbf{v}}_{F} + V_{F} \nabla p_{F} - V_{F} \overline{\overline{{{\mathbf{B}}_{F}^{{\mathbf{v}}} }}} } \right] \\ & = \overline{{a_{f}^{{\mathbf{v}}} {\mathbf{v}}_{f} }} + \overline{{V_{f} \nabla p_{f} }} - \overline{{V_{f} \overline{\overline{{{\mathbf{B}}_{f}^{{\mathbf{v}}} }}} }} \\ \end{aligned} $$
(15.213)

and substituting into Eq. (15.179), the extended Rhie-Chow interpolated cell face velocity \( {\mathbf{v}}_{f} \) is obtained as

$$ {\mathbf{v}}_{f} = \overline{{\mathbf{v}}_{f}} - \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\nabla p_{f} - \overline{{\nabla p_{f} }} } \right) + \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\overline{{{\mathbf{B}}_{f}^{{\mathbf{v}}} }} - \overline{{\overline{\overline{{{\mathbf{B}}_{f}^{{\mathbf{v}}} }}} }} } \right) $$
(15.214)

where \( \overline{{\overline{\overline{{{\mathbf{B}}_{f}^{{\mathbf{v}}} }}} }} \) is calculated as

$$ \overline{{\overline{\overline{{{\mathbf{B}}_{f}^{{\mathbf{v}}} }}} }} = g_{C} {{\overline{\overline{{{\mathbf{B}}_{C}^{{\mathbf{v}}} }}} }} + (1 - g_{C} ){{\overline{\overline{{{\mathbf{B}}_{F}^{{\mathbf{v}}} }}} }} $$
(15.215)

The above additional treatment of the cell face velocity increases the overall robustness of the solution procedure for situations where variations in body forces are important (e.g., free-surface flows).

9.4 Combined Treatment of Under-Relaxation, Transient, and Body Force Terms

In general all three terms described above should be dealt with together. This necessitates modifying the Rhie-Chow interpolation to account for all three effects. Fortunately this can easily be derived by using the principle of superposition leading to the following interface velocity:

$$ \begin{aligned} {bf{v}}_{f} & = \overline{{{bf{v}}_{f} }} - \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\nabla p_{f} - \overline{{\nabla p_{f} }} } \right) + \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\overline{{{\mathbf{B}}_{f}^{{\mathbf{v}}} }} - \overline{{\overline{\overline{{{\mathbf{B}}_{f}^{{\mathbf{v}}} }}} }} } \right) \\ & \quad + \frac{{\overline{{a_{f}^{ \circ } {\mathbf{D}}_{f}^{{\mathbf{v}}} }} }}{{V_{f} }}\left( {{\mathbf{v}}_{f}^{ \circ } - \overline{{{\mathbf{v}}_{f}^{ \circ } }} } \right) + \left( {1 - \lambda^{{\mathbf{v}}} } \right)\left( {{\mathbf{v}}_{f}^{(n)} - \overline{{{\mathbf{v}}_{f}^{(n)} }} } \right) \\ \end{aligned} $$
(15.216)

where in calculating \( \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \) the under relaxed value of the \( a_{C}^{{\mathbf{v}}} \) coefficient is used.

10 Computational Pointers

10.1 uFVM

In uFVM, the pressure correction equation is implemented in one script file denoted by cfdAssembleMdotTerm. Listing 15.1 shows the core of the algorithm whereby the coefficients of the pressure correction equation are assembled by linearizing the fluxes at each of the interior faces. In addition, the mdot field (i.e., the mass flow rate at the faces) is calculated based on Eq. (15.216), which is subdivided into 9 terms (i.e., terms I trough IX) and assembled step by step to produce the cell face velocity. The terms into which the velocity at the face is decomposed are as follows:

Listing 15.1
figure 31figure 31

Script used for the calculation of the mass flow rates and coefficients of the pressure correction equation in uFVM

  • term I: the interpolated velocity field \( \overline{{{\mathbf{v}}_{f} }} \),

  • terms II and III: the face and average pressure gradients \( - \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\nabla p_{f} - \overline{{\nabla p_{f} }} } \right) \),

  • terms IV and V: the average and redistributed body forces \( \overline{{{\mathbf{D}}_{f}^{{\mathbf{v}}} }} \left( {\overline{{{\mathbf{B}}_{f}^{{\mathbf{v}}} }} - \overline{{\overline{\overline{{{\mathbf{B}}_{f}^{{\mathbf{v}}} }}} }} } \right) \),

  • terms VI and VII: the transient fluxes \( \frac{{\overline{{a_{f}^{ \circ } {\mathbf{D}}_{f}^{{\mathbf{v}}} }} }}{{V_{f} }}\left( {{\mathbf{v}}_{f}^{ \circ } - \overline{{{\mathbf{v}}_{f}^{ \circ } }} } \right) \), and

  • terms VIII and IX: the relaxation correction term \( (1 - \lambda^{\textbf{v}} )({\mathbf{v}}_{f}^{(n)} - \overline{{{\mathbf{v}}_{f}^{(n)} }} ) \).

10.2 OpenFOAM®

The numerical techniques introduced so far are used in what follows to develop OpenFOAM® [27] applications for solving the incompressible Navier-Stokes equations.

10.2.1 Pressure Correction SIMPLE Solvers

Based on the SIMPLE algorithm, a number of solvers will be constructed. The base solver, simpleFoam, will be presented first. This is followed by a number of versions, with each one adding more capabilities to the base code. These solvers can be summarized as follows:

  1. 1.

    simpleFoam (not the OpenFOAM® built-in solver) is the base code that incorporates the SIMPLE Algorithm in its most basic form.

  2. 2.

    simpleFoamImproved extends the base code to allow for improved treatment of relaxation.

  3. 3.

    simpleFoamTransient adds transient capabilities to the steady-state simpleFoam.

  4. 4.

    simpleFoamBuoyancy adds to the code the body force treatment.

More versions will be covered in the chapters to follow, each one with extended capabilities, added by modifying the base code described in this chapter. A list of the versions that will be covered in the next chapters is given below.

  1. 5.

    simpleFoamCompressible is the compressible version of simpleFoam (Chap. 16)

  2. 6.

    simpleFoamTurbulent includes capabilities for treating turbulent flows (Chap. 17).

  • simpleFoam

Before reviewing the simpleFoam code, some basic notational issues are addressed. The first step is to define, as shown in Listing 15.2, the geometric fields and parameters that will be initialized and used in the code.

Listing 15.2
figure 32

The #include macro derivatives used to define the types of objects needed

In Listing 15.2, the #include macro directives outside the main function are needed to define the types of objects that are then declared and used in the application. The #include “fvCFD.H” contains a list of definitions for classes that are in general necessary to build any application in OpenFOAM®. In the developed application an additional header, not present in the fvCFD.H header, necessary for the SIMPLE solver implementation will be added.

The use of the #include statements inside the main function is a compacting procedure, with each declared statement representing a piece of the code moved to the corresponding file name. For example, the statement #include “createMesh.H” just represents the code shown in Listing 15.3, which is necessary to instantiate the mesh class.

Listing 15.3
figure 33

The code representing the #include createMesh.H file necessary to instantiate the mesh class

Once the necessary initialization has been performed, the next step is the definition of the proper fields or variables needed by the solver. These are defined in file “createFields.H”. The first defined field, shown in Listing 15.4, is the pressure field (p).

Listing 15.4
figure 34

Script used to define the pressure field

Since the solution is obtained by solving a pressure correction equation instead of a pressure equation, a pressure correction field (pp) is also defined (Listing 15.5).

Listing 15.5
figure 35

Script used to define the pressure correction field

It is worth noting that in Listing 15.5 a different constructor is used to define the pressure correction field. Since the pressure corrector represents the pressure itself, the same boundary conditions defined for the real pressure can be used for the pressure correction field without the need to define the same quantity twice.

The list of pressure boundary types displayed in Listing 15.6 are now copied under the pbt variable in Listing 15.5 and directly used in the constructor of pp.

Listing 15.6
figure 36

Script showing the declaration of the different pressure boundary types

The corrector should reset to zero the correction field at every iteration and should also apply a zero value at all boundaries for which a Dirichlet boundary condition is used for the pressure.

The velocity and corresponding mass flux fields must also to be defined. As depicted in Listing 15.7, the velocity field is defined through an input file while the mass flux field can be defined as a derived quantity.

Listing 15.7
figure 37

Script used to define the velocity and mass flux fields

Finally the fluid thermo-physical properties should also be defined. For incompressible laminar flows this involves simply assigning a value to the kinematic viscosity nu, as shown in Listing 15.8.

Listing 15.8
figure 38

Code used to define the fluid thermo-physical properties

After defining all variables the implementation of the SIMPLE algorithm can proceed. A while loop can be used for the cases when the stopping criterion is the number of SIMPLE iterations. For each single loop, the momentum and pressure correction equations are solved and updates of the variables are performed. Starting with the momentum equation written as (the form solved in OpenFOAM®),

$$ \nabla \cdot \left\{ {{\mathbf{vv}}} \right\} = v\nabla^{2} {\mathbf{v}} - \nabla p $$
(15.217)

where the kinematic viscosity v is defined as

$$ v = \frac{\mu }{\rho } $$
(15.218)

and p represents the pressure divided by the density, i.e.,

$$ p = \frac{static \, pressure}{\rho } $$
(15.219)

its solution is translated into the script shown in Listing 15.9.

Listing 15.9
figure 39

Script to solve the momentum equation

The first instruction in Listing 15.9 defines the finite volume discretization of the momentum equation in vector form with its storage matrix (the three components of the velocity vector are solved in a segregated manner despite its vectorial implementation). The system is then implicitly relaxed and solved via an iterative solver.

Once the momentum equation is solved, a new guess for the velocity field is obtained. This velocity does not satisfy the continuity equation in general and the assembly of the continuity equation in the form of a pressure correction equation is now required to correct the flow field. The pressure correction equation is written as

$$ - \nabla \cdot ({\bar{\mathbf{D}}}_{f} \nabla p^{\prime}) = - \nabla \cdot ({\mathbf{v}}) $$
(15.220)

where a component of \( {\bar{\mathbf{D}}}\) at an element centroid is computed as

$$ D = \frac{V}{{a_{c}^{{\mathbf{v}}} }} $$
(15.221)

with values at the faces obtained by interpolation. Its implementation is translated into the following syntax (Listing 15.10):

where div(mDot) is basically \( \sum {\dot{m}_{f} } \), while pp represents p′ and is reset to zero at each iteration. Moreover, the DUf variable is the value of D at the cell face obtained, as shown in Listing 15.11, by linear interpolation using the values at the nodes straddling the face. Further, .A() represents the diagonal terms in the momentum matrix divided by the volume.

Listing 15.10
figure 40

Script to implement the pressure correction equation

Listing 15.11
figure 41

Script to calculate the values of DUf

Listing 15.12 computes the mass flow rate at cell faces (mDot) using the Rhie-Chow interpolation where the calculation of ∇p f and \( \overline{{\nabla p_{f} }} \) is clearly shown.

Listing 15.12
figure 42

Script to compute the mass flow rate at cell faces using the Rhie-Chow interpolation

The pressure correction equation is now fully set and is solved by executing the statement in Listing 15.13.

Listing 15.13
figure 43

Statement used to solve the pressure correction equation

Once the pressure correction equation is solved, the velocity, pressure, and mass flow rate fields are updated using the obtained pressure correction field. Starting with the mass flow rate field (i.e., the mDot flux), it is updated by executing the below statement (Listing 15.14).

Listing 15.14
figure 44

Statement used to update the mass flow rate field to satisfy continuity

The flux() function in Listing 15.14 provides the matrix multiplication, the extra diagonal matrix coefficients, and the corresponding solution. Recalling the finite volume discretization of the diffusion term, each extra diagonal of coefficients represents a face of the mesh. Thus the update of the fluxes can be performed in a more consistent way using directly the matrix coefficients and cell values. A simplified version of the flux() function is shown in Listing 15.15.

Listing 15.15
figure 45

A simplified version of the flux() function where the flux correction mDotPrime is computed

In Listing 15.15 the correction flux mDotPrime (Eq. 15.101) is basically evaluated by performing a loop over the faces using the upper and lower coefficients of the matrix and multiplying these coefficients with the corresponding cell values.

Finally the velocity and pressure at cell centroids are updated using the script shown in Listing 15.16,

Listing 15.16
figure 46

Update of the velocity and pressure fields at cell centroids

where the variable URF is the explicit relaxation factor for pressure update λp, necessary for a stable SIMPLE solver.

  • simpleFoamImproved

In simpleFoamImproved the Rhie-Chow interpolation is extended to account for the relaxation of the velocity field. This is translated into the syntax presented below in Listing 15.17 that expands the generic Rhie-Chow interpolation to include the additional term in Eq. (15.196).

Listing 15.17
figure 47

Improved Rhie-Chow interpolation accounting for under relaxation

Thus the fields mdotf.prevIter() and U.prevIter() need to be defined.

  • simpleFoamTransient

In simpleFoamTransient the Rhie-Chow interpolation is extended to account for the transient term. Thus the expression for the mass flow rate becomes (Listing 15.18).

Listing 15.18
figure 48

Rhie-Chow interpolation accounting for the effects of under-relaxation and the unsteady term

Furthermore the main loop is modified to add a transient loop, with the main code becoming as shown in Listing 15.19.

Listing 15.19
figure 49

The main loop used for solving unsteady flow problems

  • simpleFoamBuoyancy

The simpleFoamBuoyancy solver adds to simpleFoamTransient the following capabilities: (i) the solution of the energy equation, (ii) the inclusion of a body source term in the momentum equation, and (iii) an account of the effects of the body force term redistribution in the Rhie-Chow interpolation.

The codes used to introduce these modifications are shown in Listings (15.20), (15.21), and (15.22).

Listing 15.20
figure 50

The script used to solve the energy equation

The code needed to solve the energy equation is given in Listing (15.20).

The source term in the momentum equation is implemented as (Listing 15.21),

Listing 15.21
figure 51

Accounting for the body force term source in the momentum equation

while the calculation of the mass fluxes using the Rhie-Chow interpolation are as displayed in Listing (15.22).

Listing 15.22
figure 52

The modified Rhie-Chow interpolation accounting for body forces

11 Closure

This chapter presented the segregated pressure-based approach for solving incompressible flow problems on collocated grids. It also demonstrated that the success of the Rhie-Chow interpolation on collocated grids is due to its formation of a pseudo-momentum equation at the cell face that has a tight pressure gradient stencil similar to the one resulting from a staggered grid formulation. In addition, the details of implementing the most commonly encountered boundary conditions in the momentum and pressure-correction equations were discussed. The next chapter will extend the pressure based method to predict compressible fluid flow at all speeds.

12 Exercises

Exercise 1

A portion of a water-supply system is shown in Fig. 15.31. The flow rate \( \dot{m} \) in a pipe section is given by

$$ \dot{m} = C\Delta p $$

where Δp is the pressure drop over the length of the pipe section, and C is the hydraulic conductance. The following data is known:

$$ \begin{aligned} p_{1} & = 400, \; p_{2} = 350 \\ \dot{m}_{F} & = 25 \\ C_{A} & = 0.4,C_{B} = 0.2,C_{C} = 0.1,C_{D} = 0.3,C_{E} = 0.2 \\ \end{aligned} $$

Find p 3, p 4, p 5, \( \dot{m}_{A} ,\dot{m}_{B} ,\dot{m}_{C} ,\dot{m}_{D} \) and \( \dot{m}_{E} \) using the following procedure

  • Start with a guess for p 3, p 4, and p 5.

  • Compute \( \dot{m}^{*} \) values based on the guessed pressures.

  • Construct the pressure-correction equations and solve for \( p^{\prime}_{3} \), \( p^{\prime}_{4} \) and \( p^{\prime}_{5} \).

  • Update the pressures and the \( \dot{m}^{*} \) values

Do you need to iterate? Why?

Fig. 15.31
figure 53

A portion of a water-supply system

Exercise 2

A one dimensional flow through a porous material is governed by

$$ c|u|u + \frac{dp}{dx} = 0 $$

where c is a constant. The continuity equation is

$$ \frac{du}{dx} = 0 $$
$$ \begin{array}{*{20}l} {x_{2} {-}x_{1} = 1} \hfill & {x_{3} {-}x_{2} = 2} \hfill \\ {S_{A} = 3} \hfill & {S_{B} = 2} \hfill \\ \end{array} $$

Use the SIMPLE procedure for the grid shown in Fig. 15.32 to compute p 2, u A , and u B from the following data:

$$ \begin{array}{*{20}l} {c_{A} = 0.3} & {c_{B} = 0.15} \\ {p_{1} = 150} & {p_{3} = 18} \\ \end{array} $$

with the size and area at the center of each control volume given by

$$ \begin{array}{*{20}c} {\Delta x_{A} = 1;A_{A} = 3} \\ {\Delta x_{B} = 3;A_{B} = 2} \\ \end{array} $$
Fig. 15.32
figure 54

One dimensional flow in a porous material

Exercise 3

In the Steady, one dimensional, constant density situation shown in Fig. 15.33, the velocity u is calculated at locations B and C, while the pressure is calculated at locations 1 and 2. The velocity correction formulae are written as

$$ u_{B} = D_{B} (p_{1} - p_{2} )\quad {\text{and}}\quad u_{C} = D_{C} (p_{2} - p_{3} ) $$

where the values of D B and D C are 3 and 4, respectively. The boundary conditions are u A  = 5 and p 3 = 70.

  1. (a)

    If at a given stage in the iteration process, the momentum equations give \( u_{B}^{*} = 4 \) and \( u_{C}^{*} = 6 \), calculate the values of p 1 and p 2.

  2. (b)

    Explain how you could obtain the values of p 1 and p 3 if the right hand boundary condition is given as u C  = 5 instead of p 3 = 70.

    Fig. 15.33
    figure 55

    Incompressible flow in a one dimensional domain

Exercise 4

Consider the main control volume shown in Fig. 15.34. A staggered mesh is used with the u and v velocity components stored as shown. The following quantities are given: u w  = 7, v s  = 3, p N  = 0 and p E  = 50. The flow is steady and the density is constant. The momentum equations for u e and v n are given by:

Fig. 15.34
figure 56

A main control volume in a two-dimensional staggered grid arrangement

$$ \begin{array}{*{20}c} {u_{e} = - D_{e} (p_{E} - p_{C} )} \\ {v_{n} = - D_{n} (p_{N} - p_{C} )} \\ \end{array} $$

Also given D e  = 2, D n  = 1.6, and the control volume has Δx = Δy = 1.

  1. (a)

    Starting with a guessed value of \( p_{C}^{(n)} = 50 \), use the SIMPLE algorithm to find u e and v n .

  2. (b)

    Is an iteration loop needed for this problem? Explain.

Exercise 5

Consider the simplified one-dimensional Forchheimer model for flow in porous media given by

$$ bu^{2} = - k\frac{dp}{dx} $$

with the continuity equation given by

$$ \frac{d(\varepsilon u)}{dx} = 0 $$

In the above equations b is a constant and ε is the porosity coefficient that accounts for the effective porous area.

Devise a SIMPLE-like procedure to compute p C , u e , and u w for the following data:

$$\begin{aligned}\Delta x &= 0.1;\quad \Delta y = 1\\ b_{W} &= 5;\quad b_{C} = 4;b_{E} = 3 \\ \varepsilon_{e} &= 0.9;\quad \varepsilon_{w} = 0.6 \\ p_{W} &= 40;\quad p_{E} = - 200\\ \end{aligned} $$

Start with the following initial values for velocity and pressure (Fig. 15.35):

Fig. 15.35
figure 57

One-dimensional Forchheimer model for flow in porous media

$$ u_{e}^{*} = u_{w}^{*} = 3\;{\text{and}}\;p_{C} = - 100. $$

Exercise 6

Compute the interface velocities u e and u w using the Rhie-Chow interpolation and compare it to the averaged values \( \bar{u}_{e} \) and \( \bar{u}_{w} \) knowing the following data (Fig. 15.36):

Fig. 15.36
figure 58

A one dimensional collocated grid

$$ \begin{aligned} & p_{WW} = 10;p_{W} = 12;p_{C} = 16;p_{E} = 24;p_{EE} = 40,{\text{and}} \\ & u_{W} = 5;u_{C} = 10;u_{E} = 40. \\ \end{aligned} $$

Exercise 7

In OpenFOAM® develop a SIMPLEC pressure correction algorithm by modifying the SIMPLE algorithm described in this chapter. Hint: in order to find the summation of the extra diagonal coefficients use the H1() function of the fvMatrix.

Exercise 8

Check the pisoFoam solver located in $FOAM_SRC/../applications/solvers/incompressible/pisoFoam/pisoFoam.C and compare it with the algorithm described in this chapter, i.e., “The Collocated PISO Algorithm”. Find out the inconsistency with the standard OpenFOAM® implementation.

Exercise 9

Develop a pressure correction PISO algorithm for OpenFOAM®.