SpECTRE
v2024.08.03
|
Data on the mortar used to compute the boundary correction for the DG scheme. More...
#include <MortarData.hpp>
Public Member Functions | |
void | pup (PUP::er &p) |
Public Attributes | |
std::optional< DataVector > | mortar_data {std::nullopt} |
std::optional< Scalar< DataVector > > | face_normal_magnitude {std::nullopt} |
std::optional< Scalar< DataVector > > | face_det_jacobian {std::nullopt} |
std::optional< Scalar< DataVector > > | volume_det_inv_jacobian {std::nullopt} |
std::optional< Mesh< Dim - 1 > > | mortar_mesh {std::nullopt} |
std::optional< Mesh< Dim - 1 > > | face_mesh {std::nullopt} |
std::optional< Mesh< Dim > > | volume_mesh {std::nullopt} |
Data on the mortar used to compute the boundary correction for the DG scheme.
The class holds the data that has been projected to one side of the mortar. It is meant to be used in a container (either MortarDataHolder or TimeSteppers::BoundaryHistory) that holds MortarData on each side of the mortar. The data is later used to compute the same unique boundary correction on the mortar for both elements. That is, the final boundary correction computation is done twice: once on each element touching the mortar. However, the computation is done in such a way that the results agree.
For local time stepping, the magnitude of the face normal is stored.
The magnitude of the face normal is given by:
\begin{align*} \sqrt{ \frac{\partial\xi}{\partial x^i} \gamma^{ij} \frac{\partial\xi}{\partial x^j}} \end{align*}
for a face in the \(\xi\)-direction, with inverse spatial metric \(\gamma^{ij}\).
In addition, for local time stepping with Gauss points, the determinants of the volume inverse Jacobian and the face Jacobian are stored.
In addition to the (type-erased) fields on the mortar, the appropriate meshes are stored. When setting the mortar data and mortar mesh, the face mesh should also be set as it is used when hybridizing DG with finite difference or finite volume schemes (DG-subcell).
If the element and its neighbor have unaligned logical coordinate systems then the data and meshes are stored in the local logical coordinate's orientation ( \(\xi\) varies fastest). This means the action sending the data is responsible for reorienting the data on the mortar so it matches the neighbor's orientation.
Dim | the volume dimension |