Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <cstddef>
7 : #include <iosfwd>
8 : #include <optional>
9 :
10 : #include "DataStructures/DataVector.hpp"
11 : #include "Evolution/DiscontinuousGalerkin/InterpolatedBoundaryData.hpp"
12 : #include "NumericalAlgorithms/Spectral/Mesh.hpp"
13 : #include "Time/TimeStepId.hpp"
14 :
15 : namespace evolution::dg {
16 : /*!
17 : * \brief The data communicated between neighber elements.
18 : *
19 : * The stored data consists of the following:
20 : *
21 : * 1. the volume mesh of the element.
22 : * 2. the volume mesh corresponding to the ghost cell data. This allows eliding
23 : * projection when all neighboring elements are doing DG.
24 : * 3. the mortar mesh of the data on the mortar
25 : * 4. the variables at the ghost zone cells for finite difference/volume
26 : * reconstruction
27 : * 5. the data on the mortar needed for computing the boundary corrections (e.g.
28 : * fluxes, characteristic speeds, conserved variables)
29 : * 6. the TimeStepId beyond which the boundary terms are no longer valid, when
30 : * using local time stepping.
31 : * 7. the troubled cell indicator status used for determining halos around
32 : * troubled cells.
33 : * 8. the integration order of the time-stepper
34 : * 9. the InterpolatedBoundaryData sent by a non-conforming Element that
35 : * interpolates its data to a subset of the points of the Element receiving
36 : * this BoundaryData
37 : */
38 : template <size_t Dim>
39 1 : struct BoundaryData {
40 : // NOLINTNEXTLINE(google-runtime-references)
41 0 : void pup(PUP::er& p);
42 :
43 0 : Mesh<Dim> volume_mesh{};
44 0 : std::optional<Mesh<Dim>> volume_mesh_ghost_cell_data{};
45 0 : std::optional<Mesh<Dim - 1>> boundary_correction_mesh{};
46 0 : std::optional<DataVector> ghost_cell_data{};
47 0 : std::optional<DataVector> boundary_correction_data{};
48 0 : ::TimeStepId validity_range{};
49 0 : int tci_status{};
50 0 : size_t integration_order{std::numeric_limits<size_t>::max()};
51 0 : std::optional<InterpolatedBoundaryData<Dim>> interpolated_boundary_data{};
52 : };
53 :
54 : template <size_t Dim>
55 0 : bool operator==(const BoundaryData<Dim>& lhs, const BoundaryData<Dim>& rhs);
56 : template <size_t Dim>
57 0 : bool operator!=(const BoundaryData<Dim>& lhs, const BoundaryData<Dim>& rhs);
58 : template <size_t Dim>
59 0 : std::ostream& operator<<(std::ostream& os, const BoundaryData<Dim>& value);
60 : } // namespace evolution::dg
|