ryujin 2.1.1 revision 0348cbb53a3e4b1da2a4c037e81f88f2d21ce219
|
#include <source/offline_data.h>
Public Types | |
using | ScalarVector = Vectors::ScalarVector< Number > |
using | ScalarVectorFloat = Vectors::ScalarVector< float > |
using | BoundaryDescription = std::tuple< unsigned int, dealii::Tensor< 1, dim, Number >, Number, Number, dealii::types::boundary_id, dealii::Point< dim > > |
using | CouplingDescription = std::tuple< unsigned int, unsigned int, unsigned int > |
Public Member Functions | |
OfflineData (const MPIEnsemble &mpi_ensemble, const Discretization< dim > &discretization, const std::string &subsection="/OfflineData") | |
void | prepare (const unsigned int problem_dimension, const unsigned int n_precomputed_values, const unsigned int n_parabolic_state_vectors) |
auto & | dof_handler () const |
auto & | affine_constraints () const |
const auto & | scalar_partitioner () const |
const auto & | hyperbolic_vector_partitioner () const |
const auto & | precomputed_vector_partitioner () const |
auto & | n_parabolic_state_vectors () const |
auto & | n_export_indices () const |
auto & | n_locally_internal () const |
auto & | n_locally_owned () const |
auto & | n_locally_relevant () const |
auto & | boundary_map () const |
auto & | coupling_boundary_pairs () const |
auto & | level_boundary_map () const |
auto & | sparsity_pattern () const |
auto & | sparsity_pattern_simd () const |
auto & | mass_matrix () const |
auto & | mass_matrix_inverse () const |
auto & | lumped_mass_matrix () const |
auto & | lumped_mass_matrix_inverse () const |
auto & | level_lumped_mass_matrix () const |
auto & | cij_matrix () const |
auto & | incidence_matrix () const |
auto & | measure_of_omega () const |
auto & | discretization () const |
template<typename ITERATOR1 , typename ITERATOR2 > | |
auto | construct_boundary_map (const ITERATOR1 &begin, const ITERATOR2 &end, const Utilities::MPI::Partitioner &partitioner) const -> BoundaryMap |
template<typename ITERATOR1 , typename ITERATOR2 > | |
auto | collect_coupling_boundary_pairs (const ITERATOR1 &begin, const ITERATOR2 &end, const Utilities::MPI::Partitioner &partitioner) const -> CouplingBoundaryPairs |
A class to store all data that can be precomputed offline.
This class takes a reference to a Discretization object (that itself holds a Triangulation, FiniteElement, Mapping, and Quadrature object).
Most notably this class sets up a DoFHandler, the SparsityPattern, various IndexSet objects to hold locally owned and locally relevant indices, and precomputes all matrices (mass matrix, lumped mass matrix, $c_{ij}$ matrices, and $n_{ij}$ matrices).
After prepare()
is called, all getter functions return valid references.
Definition at line 52 of file offline_data.h.
using ryujin::OfflineData< dim, Number >::ScalarVector = Vectors::ScalarVector<Number> |
Definition at line 58 of file offline_data.h.
using ryujin::OfflineData< dim, Number >::ScalarVectorFloat = Vectors::ScalarVector<float> |
Scalar vector storing single-precision floats
Definition at line 63 of file offline_data.h.
using ryujin::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 70 of file offline_data.h.
using ryujin::OfflineData< dim, Number >::CouplingDescription = std::tuple<unsigned int , unsigned int , unsigned int > |
A tuple describing coupling boundary degrees of freedom on directly enforced boundaries for which we have to symmetrize the d_ij matrix.
Definition at line 82 of file offline_data.h.
ryujin::OfflineData< dim, Number >::OfflineData | ( | const MPIEnsemble & | mpi_ensemble, |
const Discretization< dim > & | discretization, | ||
const std::string & | subsection = "/OfflineData< dim, Number >" |
||
) |
Constructor
Definition at line 38 of file offline_data.template.h.
|
inline |
Prepare offline data. A call to prepare() internally calls setup() and assemble().
The problem_dimension and n_precomputed_values parameters is used to set up appropriately sized vector partitioners for the state and precomputed MultiComponentVector.
Definition at line 101 of file offline_data.h.
References ryujin::OfflineData< dim, Number >::n_parabolic_state_vectors().
|
inline |
The DofHandler for our (scalar) CG ansatz space in (deal.II typical) global numbering.
Definition at line 116 of file offline_data.h.
|
inline |
An AffineConstraints object storing constraints in (Deal.II typical) global numbering.
Definition at line 122 of file offline_data.h.
|
inline |
An MPI partitioner for the (scalar) Vector storing a scalar-valued quantity.
Definition at line 128 of file offline_data.h.
Referenced by ryujin::Vectors::reinit_state_vector().
|
inline |
An MPI partitioner for the MultiComponentVector storing a vector-valued quantity of size HyperbolicSystem::problem_dimension.
Definition at line 134 of file offline_data.h.
Referenced by ryujin::Vectors::reinit_state_vector().
|
inline |
An MPI partitioner for the MultiComponentVector storing a vector-valued quantity of size HyperbolicSystem::problem_dimension.
Definition at line 140 of file offline_data.h.
Referenced by ryujin::Vectors::reinit_state_vector().
|
inline |
The block size of the parabolic state vector.
Definition at line 145 of file offline_data.h.
Referenced by ryujin::OfflineData< dim, Number >::prepare(), and ryujin::Vectors::reinit_state_vector().
|
inline |
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.
Definition at line 158 of file offline_data.h.
|
inline |
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.
Definition at line 166 of file offline_data.h.
|
inline |
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.
Definition at line 173 of file offline_data.h.
Referenced by ryujin::Vectors::reinit_state_vector().
|
inline |
Number of locally relevant degrees of freedom: This number is the toal 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.
Definition at line 181 of file offline_data.h.
|
inline |
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).
Definition at line 194 of file offline_data.h.
Referenced by ryujin::NavierStokes::VelocityMatrix< dim, Number, Number2 >::vmult(), and ryujin::NavierStokes::EnergyMatrix< dim, Number, Number2 >::vmult().
|
inline |
A vector of tuples 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 vector of tuples consisting of (i, col_idx, j).
Definition at line 202 of file offline_data.h.
|
inline |
The boundary map on all levels of the grid in case multilevel support was enabled.
Definition at line 208 of file offline_data.h.
Referenced by ryujin::NavierStokes::EnergyMatrix< dim, Number, Number2 >::compute_diagonal(), ryujin::NavierStokes::VelocityMatrix< dim, Number, Number2 >::compute_diagonal(), ryujin::NavierStokes::VelocityMatrix< dim, Number, Number2 >::vmult(), and ryujin::NavierStokes::EnergyMatrix< dim, Number, Number2 >::vmult().
|
inline |
A sparsity pattern for (standard deal.II) matrices storing indices in (Deal.II typical) global numbering.
Definition at line 214 of file offline_data.h.
|
inline |
A sparsity pattern for matrices in vectorized format. Local numbering.
Definition at line 220 of file offline_data.h.
|
inline |
The mass matrix. (SIMD storage, local numbering)
Definition at line 225 of file offline_data.h.
|
inline |
The inverse mass matrix. (SIMD storage, local numbering)
This matrix is only available for a discontinuous finite Element ansatz.
Definition at line 233 of file offline_data.h.
|
inline |
The lumped mass matrix. (stored as vector, local numbering)
Definition at line 238 of file offline_data.h.
Referenced by ryujin::NavierStokes::VelocityMatrix< dim, Number, Number2 >::vmult(), and ryujin::NavierStokes::EnergyMatrix< dim, Number, Number2 >::vmult().
|
inline |
The inverse of the lumped mass matrix. (stored as vector, local numbering)
Definition at line 244 of file offline_data.h.
|
inline |
The lumped mass matrix on all levels of the grid in case multilevel support was enabled.
Definition at line 250 of file offline_data.h.
Referenced by ryujin::NavierStokes::EnergyMatrix< dim, Number, Number2 >::compute_diagonal(), ryujin::NavierStokes::VelocityMatrix< dim, Number, Number2 >::compute_diagonal(), ryujin::NavierStokes::VelocityMatrix< dim, Number, Number2 >::vmult(), and ryujin::NavierStokes::EnergyMatrix< dim, Number, Number2 >::vmult().
|
inline |
The \((c_{ij})\) matrix. (SIMD storage, local numbering)
Definition at line 255 of file offline_data.h.
|
inline |
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.
Definition at line 266 of file offline_data.h.
|
inline |
Size of computational domain.
Definition at line 271 of file offline_data.h.
|
inline |
Returns a reference of the underlying Discretization object.
Definition at line 276 of file offline_data.h.
auto ryujin::OfflineData< dim, Number >::construct_boundary_map | ( | const ITERATOR1 & | begin, |
const ITERATOR2 & | end, | ||
const Utilities::MPI::Partitioner & | partitioner | ||
) | const -> BoundaryMap |
Definition at line 1181 of file offline_data.template.h.
References ryujin::no_slip, ryujin::periodic, and ryujin::slip.
auto ryujin::OfflineData< dim, Number >::collect_coupling_boundary_pairs | ( | const ITERATOR1 & | begin, |
const ITERATOR2 & | end, | ||
const Utilities::MPI::Partitioner & | partitioner | ||
) | const -> CouplingBoundaryPairs |
Definition at line 1377 of file offline_data.template.h.
References ryujin::periodic.