|
template<typename S , typename X , typename = std::enable_if_t<std::is_convertible_v<S, T> or std::is_convertible_v<S, std::span<const T>>>>
requires 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 |
|
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>
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<typename S , typename X , typename = std::enable_if_t<std::is_convertible_v<S, T> or std::is_convertible_v<S, std::span<const T>>>>
requires std::is_convertible_v<std::remove_cvref_t<X>, std::vector<std::int32_t>>
Create a representation of a Dirichlet boundary condition constrained by a scalar- or vector-valued constant.
- Precondition
dofs
must be sorted.
- 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 sorted. |
[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 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.
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.
If x
includes ghosted entries (entries available on the calling rank but owned by another rank), ghosted entries constrained by a Dirichlet condition will also be set.
- Parameters
-
[in,out] | x | Array to modify for Dirichlet boundary conditions. |
[in] | x0 | Optional array used in computing the value to set. If not provided it is treated as zero. |
[in] | alpha | Scaling to apply. |