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 : 8 : #include "NumericalAlgorithms/Spectral/Basis.hpp" 9 : #include "NumericalAlgorithms/Spectral/Quadrature.hpp" 10 : 11 : /// \cond 12 : template <size_t Dim> 13 : class Mesh; 14 : template <size_t Dim> 15 : class Index; 16 : /// \endcond 17 : 18 : namespace evolution::dg::subcell::fd { 19 : /*! 20 : * \brief Computes the cell-centered finite-difference mesh from the DG mesh, 21 : * using \f$2N-1\f$ grid points per dimension, where \f$N\f$ is the degree of 22 : * the DG basis. 23 : */ 24 : template <size_t Dim> 25 1 : Mesh<Dim> mesh(const Mesh<Dim>& dg_mesh); 26 : 27 : /*! 28 : * \brief Computes the DG mesh from the cell-centered finite-difference mesh. 29 : */ 30 : template <size_t Dim> 31 1 : Mesh<Dim> dg_mesh(const Mesh<Dim>& subcell_mesh, Spectral::Basis basis, 32 : Spectral::Quadrature quadrature); 33 : 34 : /*! 35 : * \brief Computes the computational dimension from the subcell mesh, which 36 : * can be less than `Dim` when Cartoon bases are used. 37 : */ 38 : template <size_t Dim> 39 1 : size_t get_computational_dim(const Mesh<Dim>& subcell_mesh); 40 : 41 : /*! 42 : * \brief Computes the computational dimension from the subcell extents, which 43 : * can be less than `Dim` when Cartoon bases are used. 44 : */ 45 : template <size_t Dim> 46 1 : size_t get_computational_dim(const Index<Dim>& subcell_extents); 47 : 48 : /*! 49 : * \brief Verifies the passed subcell mesh is valid, i.e. properly using 50 : * Cartoon bases and isotropic in non-Cartoon extents. 51 : * 52 : * The \p neighbor argument should be set to `true` when checking a neighbor's 53 : * mesh (only the output of the assert is modified). 54 : */ 55 : template <size_t Dim> 56 1 : void verify_subcell_mesh(const Mesh<Dim>& subcell_mesh, bool neighbor = false); 57 : 58 : /*! 59 : * \brief Verifies the passed subcell extents are valid, i.e. fully isotropic 60 : * or deviating in a Cartoon-specific manner. 61 : * 62 : * The \p neighbor argument should be set to `true` when checking a neighbor's 63 : * mesh (only the output of the assert is modified). 64 : */ 65 : template <size_t Dim> 66 1 : void verify_subcell_extents(const Index<Dim>& subcell_extents, 67 : bool neighbor = false); 68 : } // namespace evolution::dg::subcell::fd