Class template Dune::GDT::OperatorInterface¶
Inherits from RGV.
-
template<class AssemblyGridView, size_t s_r = 1, size_t s_rC = 1, size_t r_r = s_r, size_t r_rC = s_rC, class F = double, class Matrix = XT::LA::IstlRowMajorSparseMatrix<F>, class SGV = AssemblyGridView, class RGV = AssemblyGridView>
class Dune::GDT::OperatorInterface : private RGV¶ Interface for operators (and two-forms).
Considering (discrete) spaces V_h and W_h, and a field F, this interface models
operators A: V_h -> W_h and
two-forms B: W_h x V_h -> F.
The source of the operator V_h is the (discrete) space
V_h := \ { v_h: tau_h ^s -> F^{s_r times s_rC} \ }
(modelled by SpaceInterface) of functions mapping from a partition tau_h ^s (modelled by SourceGridView) of a physical domain to a (possibly vector- or matrix-valued) vector space F^{s_r times s_rC} (modelled by Field, source_dim and source_dim_cols). The range of the operator W_h (identified with its dual, since we are in the discrete setting) is the (discrete) space
W_h := \ { w_h: tau_h ^r -> F^{r_r times r_rC} \ }
(modelled by SpaceInterface) of functions mapping from a partition tau_h ^r (modelled by RangeGridView) of a physical domain to a (possibly vector- or matrix-valued) vector space F^{r_r times r_rC} (modelled by Field, range_dim and range_dim_cols).
The functions v_h in V_h (and w_h in W_h), to which the operator can be applied to, are represented by their DoF vectors, which are then interpreted as discrete functions in the respective source_space or range_space.
The appropriate vector type (derived from XT::LA::VectorInterface) is automatically deduced from the given matrix type (derived from XT::LA::MatrixInterface, modelled by Matrix), as well as the underlying field.
Note
In general, one would like to have differente fields for the source vector, the range vector, the matrix and the result of apply2(). However, this is postponed in favor of fewer template arguments, until we require it.