.. _InputsBoundaryConditions:

Boundary conditions
===================


General boundary conditions
---------------------------

The following inputs are defined using the prefix ``bc``:

+---------------------+--------------------------------------------------------------------------+-------------+-----------+
|                     | Description                                                              |   Type      | Default   |
+=====================+==========================================================================+=============+===========+
| regions             | Regions used to define boundary conditions.                              |  String     | None      |
+---------------------+--------------------------------------------------------------------------+-------------+-----------+
| delp_dir            | Direction for specified pressure drop. Note that this direction          |  Int        | 0         |
|                     | should also be periodic.                                                 |             |           |
+---------------------+--------------------------------------------------------------------------+-------------+-----------+
| delp                | Pressure drop (Pa)                                                       |  Real       | 0         |
+---------------------+--------------------------------------------------------------------------+-------------+-----------+
| po_no_par_out       | Force particles to bounce back rather than exiting at pressure outflows. |  Int        | 0         |
+---------------------+--------------------------------------------------------------------------+-------------+-----------+

The type of the boundary conditions in the BC region must be defined with the prefix ``bc``:

+---------------------+-----------------------------------------------------------------------+-------------+-----------+
|                     | Description                                                           |   Type      | Default   |
+=====================+=======================================================================+=============+===========+
| [region]            | Specify boundary condition type.                                      |  String     |  None     |
|                     |                                                                       |             |           |
|                     | Options:                                                              |             |           |
|                     |                                                                       |             |           |
|                     | * ``pi``  - pressure inflow                                           |             |           |
|                     | * ``po``  - pressure outflow                                          |             |           |
|                     | * ``mi``  - mass inflow                                               |             |           |
|                     | * ``nsw`` - no-slip wall                                              |             |           |
|                     | * ``eb``  - embedded boundary - for inhomogeneous Dirichlet BCs       |             |           |
|                     |              of temperature or fluid velocity (mass inflow) on the    |             |           |
|                     |              contained EBs                                            |             |           |
+---------------------+-----------------------------------------------------------------------+-------------+-----------+


Fluid settings
~~~~~~~~~~~~~~

For each boundary condition region, the fluid inputs are defined
using the prefix ``bc.[region].[fluid]``:


+------------------------+------------------------------------------------------------------------+-------------+-----------+
|                        | Description                                                            |   Type      | Default   |
+========================+========================================================================+=============+===========+
| volfrac                | Volume fraction [required if bc_region_type='mi']                      | Real        | 0         |
+------------------------+------------------------------------------------------------------------+-------------+-----------+
| density                | Fluid density [required if bc_region_type='mi' or 'pi']                | Real        | 0         |
+------------------------+------------------------------------------------------------------------+-------------+-----------+
| pressure               | Fluid pressure [required if bc_region_type='po' or 'pi']               | Real        | 0         |
+------------------------+------------------------------------------------------------------------+-------------+-----------+
| temperature            | Fluid temperature [required if bc_region_type='mi' or 'pi']            | Real        | 0         |
+------------------------+------------------------------------------------------------------------+-------------+-----------+
| velocity               | Velocity components [required if bc_region_type='mi'                   | Reals       | 0 0 0     |
|                        | and ``volflow`` or ``massflow`` not specified]                         |             |           |
+------------------------+------------------------------------------------------------------------+-------------+-----------+
| volflow                | Volumetric flow rate [required if bc_region_type='mi'                  | Real        | 0         |
|                        | and ``velocity`` or ``massflow`` not specified]                        |             |           |
+------------------------+------------------------------------------------------------------------+-------------+-----------+
| massflow               | Mass flow rate [required if bc_region_type='mi'                        | Real        | 0         |
|                        | and ``velocity`` or ``volflow`` not specified]                         |             |           |
+------------------------+------------------------------------------------------------------------+-------------+-----------+
| species.[species0]     | Species 'species0' mass fraction [required if solve_species=1          | Real        | 0         |
|                        | and bc_region_type='mi' or 'pi'].                                      |             |           |
+------------------------+------------------------------------------------------------------------+-------------+-----------+

Note that for a ``mi`` only one of ``velocity`` or ``volflow`` or ``massflow`` should be specified.
Additionally, velocity can be specified as a vector or a scalar, the latter of which is applied
normal to the inflow plane, as with volflow and massflow.

Below is an example for specifying boundary conditions for fluid (``fluid``).

.. code-block:: none

   bc.regions = inflow outflow

   bc.inflow = mi
   bc.inflow.fluid.volfrac     =  1.0
   bc.inflow.fluid.density     =  1.0
   bc.inflow.fluid.velocity    =  0.015  0.0  0.0
   bc.inflow.fluid.temperature =  300
   bc.inflow.fluid.species.O2  =  0.0
   bc.inflow.fluid.species.CO  =  0.5
   bc.inflow.fluid.species.CO2 =  0.5

   bc.outflow = po

   bc.outflow.fluid.pressure =  0.0


Transient boundary conditions
-----------------------------

Velocity, temperature, and pressure boundary conditions may also be specified as a
function of time simply by adding a new column. The time value is entered in the
new first column. We can make the `mi` boundary condition above time-dependent
by replacing:

.. code-block:: none

   bc.inflow.fluid.velocity    =  0.0  0.0    0.0  0.0
   bc.inflow.fluid.velocity    =  3.0  0.015  0.0  0.0

   bc.inflow.fluid.temperature =  0.0  300
   bc.inflow.fluid.temperature =  2.99 300
   bc.inflow.fluid.temperature =  3.0  500
   bc.inflow.fluid.temperature =  4.0  500
   bc.inflow.fluid.temperature =  4.01 300

In the above example, the inflow velocity is accelerated from zero to its
final value over a period of three seconds. Linear interpolation is used in
between discrete time values and held constant at the last time value. The
temperature sees an abrupt spike from 300 up to 500 at t = 3s and then back
down again after 4s. Note that the timestep is not adjusted to sync with
transient BCs.

.. image:: ./images/transient-bc.png

Embedded boundary options
-------------------------

In MFIX-Exa it is possible to set boundary conditions on the embedded
boundaries. For instance, it is possible to set inhomogeneous Dirichlet boundary
conditions for the fluid temperature variable on the subpart of the embedded
boundaries which is contained in the BC region (which in this case has to be
tridimensional). We recall that, on the remaining part of the EBs, homogeneous
Neumann boundary conditions are assumed by default.

In the following table there is a list of the possible entries for EB boundary
conditions. Each entry must be preceded by `bc.[region0].`

+---------------------+-----------------------------------------------------------------------+-------------+-----------+
|                     | Description                                                           |   Type      | Default   |
+=====================+=======================================================================+=============+===========+
| eb.temperature      | Inhomogeneous Dirichlet BC value for temperature on EBs contained in  | Real        | 0.0       |
|                     | the (tridimensional) region [required if advect_enthalpy=1 and        |             |           |
|                     | bc_region_type='eb'].                                                 |             |           |
+---------------------+-----------------------------------------------------------------------+-------------+-----------+

Below is an example for specifying boundary conditions for a fluid `myfluid`.

.. code-block:: none

   bc.regions = hot-wall

   bc.hot-walls = eb
   bc.hot-walls.eb.temperature = 800

In addition to the temperature, it is possible to set an inflow condition for fluid
on an embedeed boundary. We recall that, on the remaining part of the EBs,
no slip velocity conditions are assumed by default.

In the following table there is a list of the possible entries for inflow EB boundary
conditions. Each entry must be preceded by `bc.[region0].` Like traditional mass
inflows, the fluid temperature, pressure, and species composition must be
provided when appropriate.

+---------------------+-----------------------------------------------------------------------+-------------+-----------+
|                     | Description                                                           |   Type      | Default   |
+=====================+=======================================================================+=============+===========+
| fluid.velocity      | [Required if not `volflow` or `massflow`]                             |             |           |
|                     | Inflow fluid velocity on EB faces                                     | Reals       | 0 0 0     |
|                     | contained in the (tridimensional) region.                             |             |           |
|                     | Note that if only one value is specified, that is assumed to          |             |           |
|                     | be the magnitude in the direction of the EB face's normal.            |             |           |
+---------------------+-----------------------------------------------------------------------+-------------+-----------+
| fluid.volflow       | [Required if not `velocity` or `massflow`]                            |             |           |
|                     | Inflow BC for fluid volumetric flow                                   | Real        | 0         |
|                     | rate in the (tridimensional) region. The flow is assumed to be        |             |           |
|                     | normal to the EB surface in the region.                               |             |           |
+---------------------+-----------------------------------------------------------------------+-------------+-----------+
| fluid.massflow      | [Required if not `velocity` or `volflow`]                             |             |           |
|                     | Inflow BC for fluid mass flow rate in the (tridimensional) region.    | Real        | 0         |
|                     | The flow is assumed to be normal to the EB surface in the region.     |             |           |
+---------------------+-----------------------------------------------------------------------+-------------+-----------+
| fluid.volfrac       | [Required] Volume fraction.                                           | Real        | 0         |
+---------------------+-----------------------------------------------------------------------+-------------+-----------+
| eb.normal           | [Optional] When specified, only cells with EB face normal that is     | Reals       | 0 0 0     |
|                     | parallel and opposite in direction to the specified values            |             |           |
|                     | are imposed with the inflow velocity.                                 |             |           |
+---------------------+-----------------------------------------------------------------------+-------------+-----------+
| eb.normal_tol       | [Optional] Used in conjunction with `eb.normal`. It determines the    | Real        | 0         |
|                     | tolerance (in degrees) for choosing cells with a specific normal.     |             |           |
+---------------------+-----------------------------------------------------------------------+-------------+-----------+

Note that only one of ``velocity`` or ``volflow`` or ``massflow`` should be specified.

Below is an example for specifying a normal inflow velocity magnitude for a region `eb-flow`.

.. code-block:: none

   bc.regions = eb-flow

   bc.eb-flow = eb

   bc.eb-flow.my_fluid.volfrac  = 1.0
   bc.eb-flow.my_fluid.velocity = 0.1

Below is an example where only specific cells are imposed a velocity in the x-direction.

.. code-block:: none

   bc.regions = eb-flow

   bc.eb-flow = eb

   bc.eb-flow.eb.normal_tol = 3.0
   bc.eb-flow.eb.normal =  0.9848  0.0000  0.1736  # 10 deg

   bc.eb-flow.my_fluid.volfrac  = 1.0
   bc.eb-flow.my_fluid.velocity = 0.1  0.0  0.0
