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 <optional> 8 : #include <tuple> 9 : #include <utility> 10 : 11 : #include "DataStructures/DataBox/Access.hpp" 12 : #include "DataStructures/DataVector.hpp" 13 : #include "Domain/Structure/DirectionalIdMap.hpp" 14 : #include "Evolution/DiscontinuousGalerkin/BoundaryData.hpp" 15 : #include "NumericalAlgorithms/Spectral/Mesh.hpp" 16 : #include "Time/TimeStepId.hpp" 17 : #include "Utilities/Gsl.hpp" 18 : 19 : namespace evolution::dg::subcell { 20 : /*! 21 : * \brief Invoked in directions where the neighbor is doing subcell, this 22 : * function computes the neighbor data on the mortar via reconstruction on 23 : * nearest neighbor subcells. 24 : * 25 : * 26 : * The data needed for reconstruction is copied over into 27 : * `subcell::Tags::GhostDataForReconstruction`. 28 : * Additionally, the max/min of the evolved variables from neighboring elements 29 : * that is used for the relaxed discrete maximum principle troubled-cell 30 : * indicator is combined with the data from the local element and stored in 31 : * `subcell::Tags::DataForRdmpTci`. We handle the RDMP 32 : * data now because it is sent in the same buffer as the data for 33 : * reconstruction. 34 : * 35 : * A list of all the directions that are doing subcell is created and then 36 : * passed to the mutator 37 : * `Metavariables::SubcellOptions::DgComputeSubcellNeighborPackagedData::apply`, 38 : * which must return a 39 : * 40 : * \code 41 : * DirectionalIdMap<volume_dim, DataVector> 42 : * \endcode 43 : * 44 : * which holds the reconstructed `dg_packaged_data` on the face (stored in the 45 : * `DataVector`) for the boundary correction. A 46 : * `std::vector<DirectionalId<volume_dim>>` 47 : * holding the list of mortars that need to be reconstructed to is passed in as 48 : * the last argument to 49 : * `Metavariables::SubcellOptions::DgComputeSubcellNeighborPackagedData::apply`. 50 : */ 51 : template <size_t VolumeDim, typename DgComputeSubcellNeighborPackagedData> 52 1 : void neighbor_reconstructed_face_solution( 53 : gsl::not_null<db::Access*> box, 54 : gsl::not_null<std::pair< 55 : TimeStepId, 56 : DirectionalIdMap<VolumeDim, evolution::dg::BoundaryData<VolumeDim>>>*> 57 : received_temporal_id_and_data); 58 : } // namespace evolution::dg::subcell