SpECTRE Documentation Coverage Report
Current view: top level - NumericalAlgorithms/DiscontinuousGalerkin - Formulation.hpp Hit Total Coverage
Commit: 1f2210958b4f38fdc0400907ee7c6d5af5111418 Lines: 0 3 0.0 %
Date: 2025-12-05 05:03:31
Legend: Lines: hit not hit

          Line data    Source code
       1           0 : // Distributed under the MIT License.
       2             : // See LICENSE.txt for details.
       3             : 
       4             : #pragma once
       5             : 
       6             : #include <iosfwd>
       7             : 
       8             : /// \cond
       9             : namespace Options {
      10             : class Option;
      11             : template <typename T>
      12             : struct create_from_yaml;
      13             : }  // namespace Options
      14             : /// \endcond
      15             : 
      16             : namespace dg {
      17             : /*!
      18             :  * \ingroup DiscontinuousGalerkinGroup
      19             :  * \brief The DG formulation to use
      20             :  *
      21             :  * - The `StrongInertial` formulation is also known as the integrate then
      22             :  *   transform formulation. The "Inertial" part of the name refers to the fact
      23             :  *   that the integration is done over the physical/inertial coordinates, while
      24             :  *   the "strong" part refers to the fact that the boundary correction terms are
      25             :  *   zero if the solution is continuous at the interfaces.
      26             :  *   See \cite Teukolsky2015ega for an overview.
      27             :  * - The `WeakInertial` formulation is also known as the integrate then
      28             :  *   transform formulation. The "Inertial" part of the name refers to the fact
      29             :  *   that the integration is done over the physical/inertial coordinates, while
      30             :  *   the "weak" part refers to the fact that the boundary correction terms are
      31             :  *   non-zero even if the solution is continuous at the interfaces.
      32             :  *   See \cite Teukolsky2015ega for an overview.
      33             :  * - The `StrongLogical` formulation is also known as the transform then
      34             :  *   integrate formulation. The "logical" part of the name refers to the fact
      35             :  *   that the integration is done over the logical coordinates, while the
      36             :  *   "strong" part refers to the fact that the boundary correction terms are
      37             :  *   zero if the solution is continuous at the interfaces. This formulation
      38             :  *   arises from the `StrongInertial` formulation by moving the Jacobians that
      39             :  *   appear when computing the divergence of fluxes into the divergence so the
      40             :  *   divergence is computed in logical coordinates:
      41             :  *   \begin{equation}
      42             :  *     \partial_i F^i = \frac{1}{J} \partial_\hat{\imath} J F^\hat{\imath}
      43             :  *   \end{equation}
      44             :  *   where $J$ is the Jacobian determinant and $\hat{\imath}$ are the logical
      45             :  *   coordinates. This is possible because of the "metric identities"
      46             :  *   \begin{equation}
      47             :  *    \partial_\hat{\imath} \left(J \frac{\partial \xi^\hat{\imath}}
      48             :  *    {\partial x^i}\right) = 0.
      49             :  *   \end{equation}
      50             :  *   See also `dg::metric_identity_det_jac_times_inv_jac` for details and for
      51             :  *   functions that compute the Jacobians so they satisfy the metric identities
      52             :  *   numerically (which may or may not be useful or necessary).
      53             :  */
      54           0 : enum class Formulation { StrongInertial, WeakInertial, StrongLogical };
      55             : 
      56           0 : std::ostream& operator<<(std::ostream& os, Formulation t);
      57             : }  // namespace dg
      58             : 
      59             : /// \cond
      60             : template <>
      61             : struct Options::create_from_yaml<dg::Formulation> {
      62             :   template <typename Metavariables>
      63             :   static dg::Formulation create(const Options::Option& options) {
      64             :     return create<void>(options);
      65             :   }
      66             : };
      67             : 
      68             : template <>
      69             : dg::Formulation Options::create_from_yaml<dg::Formulation>::create<void>(
      70             :     const Options::Option& options);
      71             : /// \endcond

Generated by: LCOV version 1.14