# POROSITY_MODEL

Specifies a porosity model for the flow equation.

AcuSolve Command

## Syntax

POROSITY_MODEL("name") {parameters...}

User-given name.

## Parameters

type (enumerated) [=none]
Type of the porosity model.
none
No porosity.
constant or const
Darcy-Forchheimer porosity model. Requires permeability, darcy_coefficient, forchheimer_coefficient and permeability_direction.
porosity (real) >0 <=1 [=1]
Porosity value.
permeability_type (enumerated) [=cartesian]
Permeability type.
cartesian
Use Cartesian coordinate system to specify permeabilities and directions.
cylindrical
Use cylindrical coordinate system to specify permeabilities and directions.
spherical
Use spherical coordinate system to specify permeabilities and directions.
direction_1_permeability (real) [=1]
direction_2_permeability (real) [=1]
direction_3_permeability (real) [=1]
Permeability of the porous media in each of the three orthogonal principal axes. Used with constant type. These commands are valid only when permeability_type=cartesian. Also, these commands are equivalent to the previously used permeability array [={1,1,1}], which has been deprecated. AcuSolve will automatically map the permeability_array to the appropriate direction_1_permeability, direction_2_permeability, and direction_3_permeability parameters when reading an input file that uses the deprecated syntax. Note that if both parameters are specified, this mapping will cause the permeability to take precedence over the values that are specified for direction_1_permeability, direction_2_permeability and direction_3_permeability.
cartesian_permeability_directions (array) [={1,0,0;0,1,0;0,0,1}]
Orthogonal principal axes of the permeability values. The vectors are ortho-normalized prior to use. Used with constant type. This command is equivalent to the previously used permeability_direction [={1,0,0;0.1.0;0,0,1}]. Note that if both are specified in the input file, the one that appears last will be used for the computation.
direction_1_permeability_multiplier_function (string) [=none]
direction_2_permeability_multiplier_function (string) [=none]
direction_3_permeability_multiplier_function (string) [=none]
User-given name of the multiplier function for scaling the permeabilities. If none, no scaling is performed. These commands are valid only when permeability_type = cartesian.
Radial permeability of the porous media in cylindrical and spherical coordinate systems. This command is valid only when permeability_type = cylindrical or spherical.
axial_permeability (real) [=1]
Axial permeability of the porous media in cylindrical coordinate system. This command is valid only when permeability_type = cylindrical.
tangential_permeability (real) [=1]
Tangential permeability of the porous media in cylindrical and spherical coordinate systems. This command is valid only when permeability_type = cylindrical or spherical.
cylindrical_permeability_axis (array) [={0,0.0;1,0,0}]
Principal axis of the axial permeability value. Other two principal axes in cylindrical coordinate are computed internally and ortho-normalized prior to use.
User-given name of the multiplier function for scaling the permeabilities. If none, no scaling is performed. This command is valid only when permeability_type = cylindrical or spherical.
axial_permeability_multiplier_function (string) [=none]
User-given name of the multiplier function for scaling the permeabilities. If none, no scaling is performed. This command is valid only when permeability_type = cylindrical.
tangential_permeability_multiplier_function (string) [=none]
User-given name of the multiplier function for scaling the permeabilities. If none, no scaling is performed. This command is valid only when permeability_type = cylindrical or spherical.
spherical_permeability_center (array) [={0,0,0}]
Spherical center of permeability values. This command is valid only when permeability_type = spherical.
darcy_coefficient (real) [=0]
Coefficient of Darcy's (linear) term. Used with constant type.
forchheimer_coefficient (real) [=0]
Coefficient of Forchheimer's (quadratic) term. Used with constant type.
darcy_multiplier_function (string) [=none]
User-given name of the multiplier function for scaling the Darcy coefficient. If none, no scaling is performed.
forchheimer_multiplier_function (string) [=none]
User-given name of the multiplier function for scaling the Forchheimer coefficient. If none, no scaling is performed.

## Description

This command specifies a porosity model for the flow (momentum) equations. This model is only applicable to fluid element sets.

POROSITY_MODEL commands are referenced by MATERIAL_MODEL commands, which in turn are referenced by ELEMENT_SET commands:
POROSITY_MODEL( "my porous media" ) {
type                                = constant
direction_1_permeability            = 1.e-6
direction_2_permeability            = 1.e-2
direction_3_permeability            = 1.e-6
cartesian_permeability_directions   = { 1, 0, 0 ;
0, 1, 0 ;
0, 0, 1 ; }
darcy_coefficient                   = 0
forchheimer_coefficient             = 0.5
}
MATERIAL_MODEL( "my material model" ) {
porosity_model                      = "my porous media"
...
}
ELEMENT_SET( "fluid elements" ) {
material_model                      = "my material model"
...
}
In AcuSolve, a porous media problem can be solved using two methods:
• Superficial Velocity
• Physical Velocity
In AcuSolve, the porous media is solved at the macroscopic level by averaging the behavior of the flow. The continuity and momentum equation of the flow, in AcuSolve, can be averaged using the superficial averaging method or intrinsic/physical averaging method. AcuSolve, by default, reports the superficially averaged value in the form of superficial velocity. Superficial velocity is calculated based on volumetric flow rate as follows:(1)
${}_{{V}_{\mathrm{sup}erficial}=\frac{Q}{A}}$
where Q is the volumetric flow rate and A is the cross-sectional area of the porous media. The continuity equation in superficial averaged form is divergence free for incompressible flow, which ensures continuity of velocity vector across the porous media boundaries. The superficial averaged method may not be very accurate but is useful when flow and pressure drop needs to be solved at the macro level. In AcuSolve, the below form of superficially averaged continuity and momentum equation has been used:(2)
$\frac{\partial {\epsilon }_{\beta }{\rho }_{\beta }}{\partial t}+\nabla ·\left({\rho }_{\beta }<{v}_{\beta }>\right)=0$
(3)
$\frac{{\rho }_{\beta }}{{\epsilon }_{\beta }}\frac{\partial <{v}_{\beta }>}{\partial t}+\frac{1}{{\epsilon }_{\beta }^{2}{}_{}}\nabla ·\left({\rho }_{\beta }<{v}_{\beta }><{v}_{\beta }>\right)=-\nabla <{p}_{\beta }{>}^{\beta }+{\rho }_{\beta }g+\frac{{\mu }_{\beta }}{{\epsilon }_{\beta }}{\nabla }^{2}<{v}_{\beta }>-Rf$
where $<{v}_{\beta }>$ is the superficial velocity, ${\epsilon }_{\beta }$ is the porosity of the porous media, f is the porous media contribution to the momentum equation, p is the pressure, g is the gravity, 𝝆 is the density, and $\mu$ is the viscosity. R is the rotation tensor to rotate f along the global coordinate system. The term f is defined as:(4)
$f=\left[\frac{{C}_{Darcy}{\mu }_{\beta }}{k}+\frac{{C}_{Forch}{\rho }_{\beta }}{\sqrt{k}}<{v}_{\beta }>\right]<{v}_{\beta }>$

where ${C}_{Darcy}$ is the Darcy coefficient and ${C}_{Forch}$ is the Forchheimer coefficient.

A more accurate representation of velocity inside the porous media can be attained by solving the continuity and momentum equation inside the porous media using the intrinsic/physical averaging method. AcuSolve solves for physical velocity $<{v}_{\beta }{>}^{\beta }$ inside the porous media using the below form of the flow equation:(5)
$\frac{\partial {\epsilon }_{\beta }<{\rho }_{\beta }{>}^{\beta }}{\partial t}+<{\rho }_{\beta }{v}_{\beta }{>}^{\beta }\nabla {\epsilon }_{\beta }+{\epsilon }_{\beta }\nabla ·<\left({\rho }_{\beta }{v}_{\beta }\right){>}^{\beta }=0$
(6)
$\begin{array}{l}{\rho }_{\beta }\frac{\partial <{v}_{\beta }{>}^{\beta }}{\partial t}+{\epsilon }_{\beta }^{-1}\nabla ·\left({\epsilon }_{\beta }{\rho }_{\beta }<{v}_{\beta }{>}^{\beta }<{v}_{\beta }{>}^{\beta }\right)=-\nabla <{p}_{\beta }{>}^{\beta }+{\rho }_{\beta }g\\ +{\mu }_{\beta }\left[{\nabla }^{2}<{v}_{\beta }{>}^{\beta }+{\epsilon }_{\beta }^{-1}\nabla {\epsilon }_{\beta }·\nabla <{v}_{\beta }{>}^{\beta }+{\epsilon }_{\beta }^{-1}\nabla <{v}_{\beta }{>}^{\beta }{\nabla }^{2}{\epsilon }_{\beta }\right]-Rf\end{array}$
where the term f is defined as:(7)
$f={\epsilon }_{\beta }\left[\frac{{C}_{Darcy}{\mu }_{\beta }}{k}+\epsilon \frac{{C}_{Forch}{\rho }_{\beta }}{\sqrt{k}}<{v}_{\beta }{>}^{\beta }\right]<{v}_{\beta }{>}^{\beta }$
The superficial velocity and the physical velocity are related using the equation below:(8)
$<{v}_{\beta }>={\epsilon }_{\beta }<{v}_{\beta }{>}^{\beta }$
The darcy_multiplier_function parameter may be used to uniformly scale the Darcy coefficient. The value of this parameter refers to the user-given name of a MULTIPLIER_FUNCTION command in the input file. For example, a Darcy coefficient ramped from zero to 0.5 over the first 10 time steps may be specified by:
POROSITY_MODEL( "ramped Darcy coefficient" ) {
type                                = constant
permeability_type                   = cartesian
direction_1_permeability            = 1.e-6
direction_2_permeability            = 1.e-2
direction_3_permeability            = 1.e-6
cartesian_permeability_directions   = { 1, 0, 0 ;    0, 1, 0 ;    0, 0, 1 ; }
darcy_coefficient                   = 1
forchheimer_coefficient             = 0.5
darcy_multiplier_function           = "ramped"
}
MULTIPLIER_FUNCTION( "ramped" ) {
type       = piecewise_linear
curve_fit_vales                     = { 1, 0 ; 10, 0.5 }
curve_fit_variable                  = time_step
}
Similarly, forchheimer_multiplier_function may be used to uniformly scale the Forchheimer coefficient. The value of this parameter refers to the user-given name of a MULTIPLIER_FUNCTION command in the input file. For example, using the same MULTIPLIER_FUNCTION command as above, a Forchheimer coefficient ramped from zero to 0.5 over the first 10 time steps may be specified by:
POROSITY_MODEL( "ramped Forchheimer coefficient" ) {
type                              = constant
direction_1_permeability          = 1.e-6
direction_2_permeability          = 1.e-2
direction_3_permeability          = 1.e-6
cartesian_permeability_direction  = { 1, 0, 0 ;    0, 1, 0 ;    0, 0, 1 ; }
darcy_coefficient                 = 0.5
forchheimer_coefficient           = 1
forchheimer_multiplier_function   = "ramped"
}
While the default coordinate system is Cartesian, you can also use cylindrical or spherical coordinate systems to specify permeabilities and their directions. The POROSITY_MODEL commands below are an example of cylindrical coordinate system:
POROSITY_MODEL( "my porous media" ) {
type                          = constant
permeability_type             = cylindrical
axial_permeability            = 1.e-2
tangential_permeability       = 1.e-6
cylindrical_permeability_axis = {0, 0, 0 ;   1, 0, 0 ; }
darcy_coefficient             = 1
forchheimer_coefficient       = 0.5
}
and for spherical coordinate system:
POROSITY_MODEL( "my porous media" ) {
type                        = constant
permeability_type           = spherical
}