- A
`BoundaryCondition`

provides a residual (and optionally a Jacobian) on a boundary (or internal side) of a domain. - The structure is very similar to Kernels
`computeQpResidual`

/`Jacobian()`

- Parameters
- Coupling

- The only difference is that some BCs are NOT integrated over the boundary... and instead specify values on boundaries (Dirichlet).
- BCs which are integrated over the boundary inherit from
`IntegratedBC`

. - Non-integrated BCs inherit from
`NodalBC`

.

Integrated BCs:

`_u, _grad_u`

: Value and gradient of variable this BC is operating on.`_phi, _grad_phi`

: Value ($$$\phi$$$) and gradient ($$$\nabla \phi$$$) of the trial functions`_test, _grad_test`

: Value $$$(\psi)$$$ and gradient ($$$\nabla \psi$$$) of the test functions`_q_point`

: XYZ coordinates`_i, _j`

: test and trial shape function indices`_qp`

: Current quadrature point index.`_normals`

: Normal vector`_boundary_id`

: The boundary ID`_current_elem`

: A pointer to the element`_current_side`

: The side number of`_current_elem`

Non-Integrated BCs:

`_u`

`_qp`

`_boundary_id`

`_current_node`

: A pointer to the current node that is being operated on.

- The coupling of values and gradients into BCs is done the same way as in Kernels and materials:
`coupledValue()`

`coupledValueOld()`

`coupledValueOlder()`

`coupledGradient()`

`coupledGradientOld()`

`coupledGradientOlder()`

`coupledDot()`

- Set a condition on the
`value`

of a variable on a boundary. - Usually... these are NOT integrated over the boundary. $$$$u = g_1 \quad \text{on} \quad \partial\Omega_1$$$$ Becomes: $$$$u - g_1 = 0 \quad \text{on} \quad \partial\Omega_1$$$$
- In the following example: $$$$u = \alpha v \quad \text{on} \quad \partial\Omega_2$$$$ And therefore: $$$$u - \alpha v = 0 \quad \text{on} \quad \partial\Omega_2$$$$

- Integrated BCs (including Neumann BCs) are actually integrated over the external face of an element.
- Their residuals look similar to kernels. Thus $$$$\left\{ \begin{array}{rl} (\nabla u, \nabla \psi_i) - (f, \psi_i) - \langle \nabla u\cdot \hat{\boldsymbol n}, \psi_i\rangle &= 0 \quad \forall i \\ \nabla u \cdot \hat{\boldsymbol n} &= g_1\quad \text{on} \quad\partial\Omega \end{array} \right.$$$$

becomes:

$$$$(\nabla u, \nabla \psi_i) - (f, \psi_i) - \langle g_1, \psi_i\rangle = 0 \quad \forall i$$$$

- Also note that if $$$\nabla u \cdot \hat{\boldsymbol n} = 0$$$, then the boundary integral is zero (sometimes known as the "natural boundary condition").

Look at Example 4

- Periodic boundary conditions are useful for modeling quasi-infinite domains and systems with conserved quantities.
- MOOSE has full support for Periodic BCs
- 1D, 2D, and 3D.
- With mesh adaptivity.
- Can be restricted to specific variables.
- Supports arbitrary translation vectors for defining periodicity.

[BCs] [./Periodic] [./all] variable = u #Works for any regular orthogonal #mesh with defined boundaries auto_direction = 'x y' [../] [../] []

[BCs] [./Periodic] [./x] primary = 1 secondary = 4 transform_func = 'tr_x tr_y' inv_transform_func = 'itr_x itr_y' [../] [../] []

- Normal usage: with an axis-aligned mesh, use
`auto_direction`

to supply the coordinate directions to wrap. - Advanced usage: specify a translation or transformation function.

[BCs] [./Periodic] [./x] variable = u primary = 'left' secondary = 'right' translation = '10 0 0' [../] [../] []

Look at Example 4 Periodic Example