|
template<typename S, typename X>
requires (std::is_convertible_v<S, T> || std::is_convertible_v<S, std::span<const T>>) && std::is_convertible_v<std::remove_cvref_t<X>, std::vector<std::int32_t>> |
| | DirichletBC (const S &g, X &&dofs, std::shared_ptr< const FunctionSpace< U > > V) |
| | Create a representation of a Dirichlet boundary condition constrained by a scalar- or vector-valued constant.
|
template<typename X>
requires std::is_convertible_v<std::remove_cvref_t<X>, std::vector<std::int32_t>> |
| | DirichletBC (std::shared_ptr< const Constant< T > > g, X &&dofs, std::shared_ptr< const FunctionSpace< U > > V) |
| | Create a representation of a Dirichlet boundary condition constrained by a fem::Constant.
|
template<typename X>
requires std::is_convertible_v<std::remove_cvref_t<X>, std::vector<std::int32_t>> |
| | DirichletBC (std::shared_ptr< const Function< T, U > > g, X &&dofs) |
| | Create a representation of a Dirichlet boundary condition where the space being constrained is the same as the function that defines the constraint Function, i.e. share the same fem::FunctionSpace.
|
| template<typename X> |
| | DirichletBC (std::shared_ptr< const Function< T, U > > g, X &&V_g_dofs, std::shared_ptr< const FunctionSpace< U > > V) |
| | Create a representation of a Dirichlet boundary condition where the space being constrained and the function that defines the constraint values do not share the same fem::FunctionSpace.
|
| | DirichletBC (const DirichletBC &bc)=default |
| | DirichletBC (DirichletBC &&bc)=default |
|
| ~DirichletBC ()=default |
| | Destructor.
|
| DirichletBC & | operator= (const DirichletBC &bc)=default |
|
DirichletBC & | operator= (DirichletBC &&bc)=default |
| | Move assignment operator.
|
| std::shared_ptr< const FunctionSpace< U > > | function_space () const |
| std::variant< std::shared_ptr< const Function< T, U > >, std::shared_ptr< const Constant< T > > > | value () const |
| std::pair< std::span< const std::int32_t >, std::int32_t > | dof_indices () const |
| | Dof indices constrained by this condition, and the position of the first ghost index.
|
| void | set (std::span< T > x, std::optional< std::span< const T > > x0, T alpha=1) const |
| | Set entries in an array that are constrained by Dirichlet boundary conditions.
|
| void | mark_dofs (std::span< std::int8_t > markers) const |
| | Set markers[i] = true if dof i has a boundary condition applied.
|
template<
dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
class dolfinx::fem::DirichletBC< T, U >
Object for setting (strong) Dirichlet boundary conditions
\[u = g \ \text{on} \ G,\]
where \(u\) is the solution to be computed, \(g\) is a function and \(G\) is a sub domain of the mesh.
A DirichletBC is specified by the function \(g\), the function space (trial space) and degrees of freedom to which the boundary condition applies.
template<
dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
template<typename S, typename X>
requires (std::is_convertible_v<S, T> || std::is_convertible_v<S, std::span<const T>>) && std::is_convertible_v<std::remove_cvref_t<X>, std::vector<std::int32_t>>
| DirichletBC |
( |
const S & | g, |
|
|
X && | dofs, |
|
|
std::shared_ptr< const FunctionSpace< U > > | V ) |
|
inline |
Create a representation of a Dirichlet boundary condition constrained by a scalar- or vector-valued constant.
- Precondition
- dofs must be strictly increasing, i.e. sorted and free of duplicates. Checked in Debug builds only.
- Parameters
-
| [in] | g | The boundary condition value (T or convertible to std::span<const T>) |
| [in] | dofs | Degree-of-freedom block indices to be constrained. The indices must be strictly increasing. |
| [in] | V | The function space to be constrained |
- Note
- Can be used only with point-evaluation elements.
-
The indices in dofs are for blocks, e.g. a block index corresponds to 3 degrees-of-freedom if the dofmap associated with g has block size 3.
-
The size of g must be equal to the block size if V. Use the Function version if this is not the case, e.g. for some mixed spaces.
template<
dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
| std::pair< std::span< const std::int32_t >, std::int32_t > dof_indices |
( |
| ) |
const |
|
inline |
Dof indices constrained by this condition, and the position of the first ghost index.
Indices are process-local and unrolled (block size expanded), into the dofmap of function_space(). For a condition on a sub-space they are indices in the parent space, so they apply directly to arrays over that space.
The array is strictly increasing, following from the dofs constructor precondition that the owned/ghost split relies on. That precondition is checked in Debug builds only.
- Returns
- Dof indices, and the position pos of the first non-owned (ghost) index. Entries dofs[:pos] are owned and entries dofs[pos:] are ghosts.
- Note
- The returned span is valid for the lifetime of this object.
template<
dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_t<T>>
| void set |
( |
std::span< T > | x, |
|
|
std::optional< std::span< const T > > | x0, |
|
|
T | alpha = 1 ) const |
|
inline |
Set entries in an array that are constrained by Dirichlet boundary conditions.
Entries in x that are constrained by a Dirichlet boundary conditions are set to alpha * (x_bc - x0), where x_bc is the (interpolated) boundary condition value.
For elements with point-wise evaluated degrees-of-freedom, e.g. Lagrange elements, x_bc is the value of the boundary condition at the degree-of-freedom. For elements with moment degrees-of-freedom, x_bc is the value of the boundary condition interpolated into the finite element space.
x may hold only owned entries or also include ghosts (entries available on the calling rank but owned by another rank); a constrained degree-of-freedom beyond the end of x is silently skipped, so an owned-only x sets only owned entries.
- Parameters
-
| [in,out] | x | Array to modify for Dirichlet boundary conditions. May include ghost entries. |
| [in] | x0 | Optional array used in computing the value to set. If not provided it is treated as zero. |
| [in] | alpha | Scaling to apply. |
- Note
- If x0 is provided, it must be at least as long as x (checked only in Debug builds).