DOLFINx 0.7.2
DOLFINx C++ interface
|
A representation of finite element variational forms. More...
#include <Form.h>
Public Types | |
using | scalar_type = T |
Scalar type. | |
Public Member Functions | |
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. | |
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).
|
inline |
Create a finite element form.
[in] | V | Function spaces for the form arguments |
[in] | integrals | Integrals in the form. The first key is the domain type. For each key there is a list of tuples (domain id, integration kernel, entities). |
[in] | coefficients | |
[in] | constants | Constants in the Form |
[in] | needs_facet_permutations | Set to true is any of the integration kernels require cell permutation data |
[in] | mesh | Mesh of the domain. This is required when there are no argument functions from which the mesh can be extracted, e.g. for functionals. |
|
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)
.
[in] | type | Integral domain type |
[in] | i | Integral ID, i.e. (sub)domain index |
|
inline |
Return function spaces for all arguments.
|
inline |
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.
[in] | type | Integral type |
|
inline |
Get types of integrals in the form.
|
inline |
Get the kernel function for integral i on given domain type.
[in] | type | Integral type |
[in] | i | Domain index |
|
inline |
Extract common mesh for the form.
|
inline |
Get bool indicating whether permutation data needs to be passed into these integrals.
|
inline |
Number of integrals on given domain type.
[in] | type | Integral type. |
|
inline |
Rank of the form (bilinear form = 2, linear form = 1, functional = 0, etc)