|
| Form (const std::vector< std::shared_ptr< const FunctionSpace< U > > > &V, const std::map< IntegralType, std::vector< std::tuple< int, std::function< void(T *, const T *, const T *, const scalar_value_type_t< T > *, const int *, const std::uint8_t *)>, std::vector< std::int32_t > > > > &integrals, const std::vector< std::shared_ptr< const Function< T, U > > > &coefficients, const std::vector< std::shared_ptr< const Constant< T > > > &constants, bool needs_facet_permutations, std::shared_ptr< const mesh::Mesh< U > > mesh=nullptr) |
| Create a finite element form.
|
|
| Form (const Form &form)=delete |
| Copy constructor.
|
|
| Form (Form &&form)=default |
| Move constructor.
|
|
virtual | ~Form ()=default |
| Destructor.
|
|
int | rank () const |
| Rank of the form (bilinear form = 2, linear form = 1, functional = 0, etc)
|
|
std::shared_ptr< const mesh::Mesh< U > > | mesh () const |
| Extract common mesh for the form.
|
|
const std::vector< std::shared_ptr< const FunctionSpace< U > > > & | function_spaces () const |
| Return function spaces for all arguments.
|
|
std::function< void(T *, const T *, const T *, const scalar_value_type_t< T > *, const int *, const std::uint8_t *)> | kernel (IntegralType type, int i) const |
| Get the kernel function for integral i on given domain type.
|
|
std::set< IntegralType > | integral_types () const |
| Get types of integrals in the form.
|
|
int | num_integrals (IntegralType type) const |
| Number of integrals on given domain type.
|
|
std::vector< int > | integral_ids (IntegralType type) const |
| Get the IDs for integrals (kernels) for given integral type. The IDs correspond to the domain IDs which the integrals are defined for in the form. ID=-1 is the default integral over the whole domain.
|
|
std::span< const std::int32_t > | domain (IntegralType type, int i) const |
| Get the list of cell indices for the ith integral (kernel) for the cell domain type.
|
|
const std::vector< std::shared_ptr< const Function< T, U > > > & | coefficients () const |
| Access coefficients.
|
|
bool | needs_facet_permutations () const |
| Get bool indicating whether permutation data needs to be passed into these integrals.
|
|
std::vector< int > | coefficient_offsets () const |
| Offset for each coefficient expansion array on a cell. Used to pack data for multiple coefficients in a flat array. The last entry is the size required to store all coefficients.
|
|
const std::vector< std::shared_ptr< const Constant< T > > > & | constants () const |
| Access constants.
|
|
template<
dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_type_t<T>>
class dolfinx::fem::Form< T, U >
A representation of finite element variational forms.
A note on the order of trial and test spaces: FEniCS numbers argument spaces starting with the leading dimension of the corresponding tensor (matrix). In other words, the test space is numbered 0 and the trial space is numbered 1. However, in order to have a notation that agrees with most existing finite element literature, in particular
\[ a = a(u, v) \]
the spaces are numbered from right to left
\[ a: V_1 \times V_0 \rightarrow \mathbb{R} \]
This is reflected in the ordering of the spaces that should be supplied to generated subclasses. In particular, when a bilinear form is initialized, it should be initialized as a(V_1, V_0) = ...
, where V_1
is the trial space and V_0
is the test space. However, when a form is initialized by a list of argument spaces (the variable function_spaces
in the constructors below), the list of spaces should start with space number 0 (the test space) and then space number 1 (the trial space).
template<
dolfinx::scalar T, std::floating_point U = dolfinx::scalar_value_type_t<T>>
std::span< const std::int32_t > domain |
( |
IntegralType |
type, |
|
|
int |
i |
|
) |
| const |
|
inline |
Get the list of cell indices for the ith integral (kernel) for the cell domain type.
For IntegralType::cell, returns a list of cell indices.
For IntegralType::exterior_facet, returns a list of (cell_index, local_facet_index) pairs. Data is flattened with row-major layout, shape=(num_facets, 2)
.
For IntegralType::interior_facet, returns list of tuples of the form (cell_index_0, local_facet_index_0, cell_index_1, local_facet_index_1)
. Data is flattened with row-major layout, shape=(num_facets, 4)
.
- Parameters
-
[in] | type | Integral domain type |
[in] | i | Integral ID, i.e. (sub)domain index |
- Returns
- List of active cell entities for the given integral (kernel)