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