template<int dim, typename Number = double>
class ryujin::Interface::OfflineData< dim, Number >
The interface of an OfflineData object: all data that can be precomputed offline, most notably the DoFHandler, the sparsity patterns, the partitioners, and all matrices (mass matrix, lumped mass matrix, $c_{ij}$ matrices, and $n_{ij}$ matrices).
The interface holds all state in protected fields with a non-virtual accessor each. Objects of class type are held in std::unique_ptr. A derived class fills the fields in prepare(). After prepare() is called, all getter functions return valid references.
Definition at line 50 of file offline_data.h.
template<int dim, typename Number = double>
| using ryujin::Interface::OfflineData< dim, Number >::BoundaryDescription = std::tuple<unsigned int , dealii::Tensor<1, dim, Number> , Number , Number , dealii::types::boundary_id , dealii::Point<dim> > |
A tuple describing (local) dof index, boundary normal, normal mass, boundary mass, boundary id, and position of the boundary degree of freedom.
Definition at line 63 of file offline_data.h.
template<int dim, typename Number = double>
An MPI partitioner for the (scalar) Vector storing a scalar-valued quantity. An MPI partitioner for the MultiComponentVector storing a vector-valued quantity of size HyperbolicSystem::problem_dimension. An MPI partitioner for the MultiComponentVector storing a vector-valued quantity of size HyperbolicSystem::problem_dimension. The subinterval \([0,\texttt{n_export_indices()})\) contains all (SIMD-vectorized) indices of the interval \([0,\texttt{n_locally_internal()})\) that are exported to neighboring MPI ranks.
- Note
- The interval \([\texttt{n_locally_internal()},
\texttt{n_locally_relevant()})\) (consisting of non-SIMD-vectorized indices) contains additional degrees of freedom that might have to be exported to neighboring MPI ranks. Number of locally owned internal degrees of freedom: In (MPI rank) local numbering all indices in the half open interval [0, n_locally_internal_) are owned by this processor, have standard connectivity, and are not situated at a boundary. Number of locally owned degrees of freedom: In (MPI rank) local numbering all indices in the half open interval [0, n_locally_owned_) are owned by this processor. Number of locally relevant degrees of freedom: This number is the total number of degrees of freedom we store locally on this MPI rank. I.e., we can access the half open interval [0, n_locally_relevant_) on this machine. The boundary map. Local numbering.
For every degree of freedom that has nonzero support at the boundary we record the global degree of freedom index along with a weighted boundary normal, the associated boundary id, and position.
This map is later used in OfflineData to handle boundary degrees of freedom after every time step (for example to implement reflective boundary conditions). A compacted, strictly increasing list of all locally owned degrees of freedom that appear in the boundary_map(). The function returns a reference to a Mirrored object that can be accessed on both memory spaces with view() and size(). For every entry of the boundary_map() the position of its degree of freedom in boundary_indices(). Local numbering.
- Note
- The boundary map can contain more than one entry for the same degree of freedom (for example a corner that is simultaneously located on a slip and a dirichlet boundary). All such entries share the same position. An array of CouplingDescription structures describing coupling degrees of freedom i and j where both degrees of freedom are collocated at the boundary (and hence the d_ij matrix has to be symmetrized). The function returns a reference to a Mirrored object holding (i, col_idx, j) triples that can be accessed on both memory spaces with view() and size(). The boundary map on all levels of the grid in case multilevel support was enabled. A sparsity pattern for (standard deal.II) matrices storing indices in (deal.II typical) global numbering. A sparsity pattern for matrices in vectorized format. Local numbering. The mass matrix. (SIMD storage, local numbering) The inverse mass matrix. (SIMD storage, local numbering)
This matrix is only available for a discontinuous finite Element ansatz. The lumped mass matrix. (stored as vector, local numbering) The inverse of the lumped mass matrix. (stored as vector, local numbering) The lumped mass matrix on all levels of the grid in case multilevel support was enabled. The stiffness matrix \((beta_{ij})\): \(\beta_{ij} = \nabla\varphi_{j}\cdot\nabla\varphi_{i}\) (SIMD storage, local numbering) The \((c_{ij})\) matrix. (SIMD storage, local numbering) The incidence matrix \((beta_{ij})\): 1 for coupling face degrees of freedom that share the same support point coordinate, 0 otherwise.
(SIMD storage, local numbering)
This matrix is only available for a discontinuous finite Element ansatz. Size of computational domain. Returns a reference of the underlying Discretization object. Constructor.
Definition at line 377 of file offline_data.h.
template<int dim, typename Number = double>
Prepare offline data. A call to prepare() sets up storage, dof handlers, sparsity patterns, and assembles all matrices.
The problem_dimension and n_precomputed_values parameters is used to set up appropriately sized vector partitioners for the state and precomputed MultiComponentVector.
Implemented in ryujin::OfflineData< dim, Number >.
template<int dim, typename Number = double>
template<int dim, typename Number = double>
An AffineConstraints object storing constraints for the continuous ("cG") variant of the selected finite element space in (deal.II typical) global numbering.
- Note
- The affine constraints object is populated with (a) hanging node constraints, and (b) periodicity constraints, that directly affect the chosen ansatz space.
-
If the selected finite element space is continuous then this method simply returns the same object as affine_constraints(). An AffineConstraints object storing constraints for the discontinuous ("dG") variant of the selected finite element space in (deal.II typical) global numbering.
-
The affine constraints object is populated with (a) hanging node constraints, and (b) periodicity constraints, that directly affect the chosen ansatz space.
-
If the selected finite element space is discontinuous then this method simply returns the same object as affine_constraints(). An AffineConstraints object storing constraints in (deal.II typical) global numbering.
-
The affine constraints object is populated with (a) hanging node constraints, and (b) periodicity constraints, that directly affect the chosen ansatz space.
Definition at line 185 of file offline_data.h.
References ryujin::Interface::OfflineData< dim, Number >::affine_constraints_cg_, ryujin::Interface::OfflineData< dim, Number >::affine_constraints_dg_, and ryujin::Interface::OfflineData< dim, Number >::discretization_.