# POROSITY_MODEL

Specifies a porosity model for the flow equation.

## Type

AcuSolve Command

## Syntax

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

## Qualifier

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. 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}]. 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 (real) [=1]
- 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.
- radial_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.
- 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.
- effectiveness_type (enumerated) [=none]
- Type of the effectiveness of the porous model.
- effectiveness (real) >0 <=1 [=1]
- Effectiveness of the flow resistance exerted by the porous medium.This command is valid only when effectiveness_type = constant.
- effectiveness_curve_fit_variable (enumerated) [=temperature]
- Independent variable of the curve fit for effectiveness. Used with piecewise_linear and cubic_spline types.
- effectiveness_curve_fit_values (array) [={0,0}]
- A two-column array of independent-variable/effectiveness data values. Used with piecewise_linear and cubic_spline effectiveness types.
- effectiveness_user_function (string) [no default]
- Name of the effectiveness user-defined function. Used with effectiveness_type = user_function.
- effectiveness_user_values (array) [={}]
- Array of values to be passed to the user-defined function. Used with effectiveness_type = user_function.
- effectiveness_user_strings (array) [={}]
- Array of strings to be passed to the user-defined function. Used with effectiveness_type = user_function.

## Description

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

```
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"
...
}
```

- Superficial Velocity
- Physical Velocity

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

```
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
}
```

```
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"
}
```

```
POROSITY_MODEL( "my porous media" ) {
type = constant
permeability_type = cylindrical
radial_permeability = 1.e-6
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
}
```

```
POROSITY_MODEL( "my porous media" ) {
type = constant
permeability_type = spherical
radial_permeability = 1.e-2
tangential_permeability = 1.e-6
spherical_permeability_axis = {0, 0, 0 ;
darcy_coefficient = 1
forchheimer_coefficient = 0.5
}
```

The effectiveness parameter may be used to define a multiplicative constant applied to the force f in equations (Equation 4) and (Equation 7). This parameter controls the effectiveness of the porous medium at providing a resistance to the flow. By setting a value of 1, the porous medium fully exerts its resistance to the flow, while by setting a value of 0, no resistance to the flow is applied.

```
POROSITY_MODEL( "ModelforMelting" ) {
type = constant
direction_1_permeability = 1.0
direction_2_permeability = 1.0
direction_3_permeability = 1.0
cartesian_permeability_direction = { 1, 0, 0 ; 0, 1, 0 ; 0, 0, 1}
darcy_coefficient = 5e+8
forchheimer_coefficient = 0
effectiveness_type = piecewise_linear
effectiveness_curve_fit_values = { 0, 1 ; 261.15, 1; 263.15, 0; 1000, 0 }
effectiveness_curve_fit_variable = temperature
```

```
POROSITY_MODEL( "ModelForMelting" ) {
type = constant
direction_1_permeability = 1.0
direction_2_permeability = 1.0
direction_3_permeability = 1.0
cartesian_permeability_direction = { 1, 0, 0 ; 0, 1, 0 ; 0, 0, 1 }
darcy_coefficient = 5e+8
forchheimer_coefficient = 0
effectiveness_type = user_function
effectiveness_user_function = usrEffectiveness
effectiveness_user_values = {262.15, 2.0}
}
```

```
#include "acusim.h"
#include "udf.h"
UDF_PROTOTYPE( usrEffectiveness ) ; /* function prototype */
Void usrEffectiveness (
UdfHd udfHd, /* Opaque handle for accessing data */
Real* outVec, /* Output vector */
Integer nItems, /* Number of elements */
Integer vecDim /* = 1, porosity is a scalar */
) {
Integer elem ; /* an element counter */
Real* temp ; /* Temperatures of quadrature point */
Real* usrVals ; /* user values */
Real tmelt ; /* melting temperature */
Real dmelt ; /* delta melting */
Real Tp, Tm ; /* temperature intervals */
Real phi ; /* porosity effectiveness */
udfCheckNumUsrVals( udfHd, 2 ) ; /* check for error */
usrVals= udfGetUsrVals( udfHd ) ; /* get the user vals */
tmelt = usrVals[0] ; /* User Value - Melting temperature */
dmelt = usrVals[1] ; /* User Value - Melting delta */
Tp=tmelt+dmelt*0.5 ;
Tm=tmelt-dmelt*0.5 ;
// get temperature at integration points
temp = udfGetElmData( udfHd, UDF_ELM_TEMPERATURE ) ;
for ( elem = 0 ; elem < nItems ; elem++ ) {
// compute porosity effectiveness at integration points
if ( temp[elem] > Tp) {
phi=0.0 ;
} else if ( temp[elem] < Tm) {
phi=1.0 ;
} else {
phi=(Tp-temp[elem])/dmelt ;
}
outVec[elem] = phi ;
}
} /* end of usrEffectiveness */
```