SpECTRE Documentation Coverage Report
Current view: top level - Evolution/DiscontinuousGalerkin/Actions - ComputeTimeDerivativeHelpers.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 0.0 % 1 0
Test Date: 2026-10-22 17:29:42
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 <type_traits>
       7              : 
       8              : #include "Utilities/TMPL.hpp"
       9              : #include "Utilities/TypeTraits/CreateGetTypeAliasOrDefault.hpp"
      10              : #include "Utilities/TypeTraits/CreateHasTypeAlias.hpp"
      11              : 
      12              : namespace evolution::dg::Actions::detail {
      13              : CREATE_HAS_TYPE_ALIAS(boundary_conditions_base)
      14              : CREATE_HAS_TYPE_ALIAS_V(boundary_conditions_base)
      15              : 
      16              : CREATE_HAS_TYPE_ALIAS(inverse_spatial_metric_tag)
      17              : CREATE_HAS_TYPE_ALIAS_V(inverse_spatial_metric_tag)
      18              : 
      19              : template <bool HasInverseSpatialMetricTag = false>
      20              : struct inverse_spatial_metric_tag_impl {
      21              :   template <typename System>
      22              :   using f = tmpl::list<>;
      23              : };
      24              : 
      25              : template <>
      26              : struct inverse_spatial_metric_tag_impl<true> {
      27              :   template <typename System>
      28              :   using f = tmpl::list<typename System::inverse_spatial_metric_tag>;
      29              : };
      30              : 
      31              : template <typename System>
      32              : using inverse_spatial_metric_tag = typename inverse_spatial_metric_tag_impl<
      33              :     has_inverse_spatial_metric_tag_v<System>>::template f<System>;
      34              : 
      35              : CREATE_GET_TYPE_ALIAS_OR_DEFAULT(auxiliary_variables)
      36              : CREATE_GET_TYPE_ALIAS_OR_DEFAULT(dg_auxiliary_boundary_terms_volume_tags)
      37              : CREATE_GET_TYPE_ALIAS_OR_DEFAULT(dg_auxiliary_package_data_temporary_tags)
      38              : CREATE_GET_TYPE_ALIAS_OR_DEFAULT(dg_auxiliary_package_data_volume_tags)
      39              : CREATE_GET_TYPE_ALIAS_OR_DEFAULT(dg_auxiliary_package_field_tags)
      40              : 
      41              : // `gradient_variables` is prepended since `partial_derivatives` requires the
      42              : // differentiated tags to be the *leading* tags of the source `Variables`.
      43              : template <typename System,
      44              :           typename VariablesTag = typename System::variables_tag>
      45              : using evolved_and_auxiliary_vars_tags = tmpl::remove_duplicates<tmpl::append<
      46              :     typename System::gradient_variables, typename VariablesTag::tags_list,
      47              :     get_auxiliary_variables_or_default_t<System, tmpl::list<>>>>;
      48              : 
      49              : template <bool HasPrimitiveVars = false>
      50              : struct get_primitive_vars {
      51              :   template <typename BoundaryCorrection>
      52              :   using f = tmpl::list<>;
      53              : 
      54              :   template <typename BoundaryCondition>
      55              :   using boundary_condition_interior_tags = tmpl::list<>;
      56              : };
      57              : 
      58              : template <>
      59              : struct get_primitive_vars<true> {
      60              :   template <typename BoundaryCorrection>
      61              :   using f = typename BoundaryCorrection::dg_package_data_primitive_tags;
      62              : 
      63              :   template <typename BoundaryCondition>
      64              :   using boundary_condition_interior_tags =
      65              :       typename BoundaryCondition::dg_interior_primitive_variables_tags;
      66              : };
      67              : 
      68              : template <bool HasPrimitiveAndConservativeVars, typename BoundaryCorrection>
      69              : using boundary_correction_primitive_tags = typename get_primitive_vars<
      70              :     HasPrimitiveAndConservativeVars>::template f<BoundaryCorrection>;
      71              : 
      72              : template <bool HasPrimitiveAndConservativeVars, typename BoundaryCondition>
      73              : using boundary_condition_primitive_tags =
      74              :     typename get_primitive_vars<HasPrimitiveAndConservativeVars>::
      75              :         template boundary_condition_interior_tags<BoundaryCondition>;
      76              : 
      77              : template <typename BoundaryCorrection, typename = std::void_t<>>
      78              : struct interior_tags_for_boundary_correction {
      79              :   using type = tmpl::list<>;
      80              : };
      81              : 
      82              : template <typename BoundaryCorrection>
      83              : struct interior_tags_for_boundary_correction<
      84              :     BoundaryCorrection,
      85              :     std::void_t<typename BoundaryCorrection::
      86              :                     dg_project_from_interior_for_boundary_condition>> {
      87              :   using type = typename BoundaryCorrection::
      88              :       dg_project_from_interior_for_boundary_condition;
      89              : };
      90              : 
      91              : template <typename BoundaryCondition, typename = std::void_t<>>
      92              : struct derivative_tags_for_boundary_condition {
      93              :   using type = tmpl::list<>;
      94              : };
      95              : 
      96              : template <typename BoundaryCondition>
      97              : struct derivative_tags_for_boundary_condition<
      98              :     BoundaryCondition,
      99              :     std::void_t<typename BoundaryCondition::dg_interior_derivative_tags>> {
     100              :   using type = typename BoundaryCondition::dg_interior_derivative_tags;
     101              : };
     102              : 
     103              : template <typename System, bool = System::has_primitive_and_conservative_vars>
     104              : struct get_primitive_vars_tags_from_system_impl {
     105              :   using type = typename System::primitive_variables_tag::tags_list;
     106              : };
     107              : 
     108              : template <typename System>
     109              : struct get_primitive_vars_tags_from_system_impl<System, false> {
     110              :   using type = tmpl::list<>;
     111              : };
     112              : 
     113              : /// Returns a `tmpl::list` of the primitive tags. The list is empty if the
     114              : /// system does not have primitive tags.
     115              : template <typename System>
     116              : using get_primitive_vars_tags_from_system =
     117              :     typename get_primitive_vars_tags_from_system_impl<System>::type;
     118              : 
     119              : template <typename BoundaryCondition, typename = std::void_t<>>
     120              : struct get_dt_vars_from_boundary_condition_impl {
     121              :   using type = tmpl::list<>;
     122              : };
     123              : 
     124              : template <typename BoundaryCondition>
     125              : struct get_dt_vars_from_boundary_condition_impl<
     126              :     BoundaryCondition,
     127              :     std::void_t<typename BoundaryCondition::dg_interior_dt_vars_tags>> {
     128              :   using type = typename BoundaryCondition::dg_interior_dt_vars_tags;
     129              : };
     130              : 
     131              : /// Returns the `dg_interior_dt_vars_tags` if the boundary condition specifies
     132              : /// them, otherwise returns an empty list.
     133              : template <typename BoundaryCondition>
     134              : using get_dt_vars_from_boundary_condition =
     135              :     typename get_dt_vars_from_boundary_condition_impl<BoundaryCondition>::type;
     136              : 
     137              : template <typename BoundaryCondition, typename = std::void_t<>>
     138              : struct get_deriv_vars_from_boundary_condition_impl {
     139              :   using type = tmpl::list<>;
     140              : };
     141              : 
     142              : template <typename BoundaryCondition>
     143              : struct get_deriv_vars_from_boundary_condition_impl<
     144              :     BoundaryCondition,
     145              :     std::void_t<typename BoundaryCondition::dg_interior_deriv_vars_tags>> {
     146              :   using type = typename BoundaryCondition::dg_interior_deriv_vars_tags;
     147              : };
     148              : 
     149              : /// Returns the `dg_interior_deriv_vars_tags` if the boundary condition
     150              : /// specifies them, otherwise returns an empty list.
     151              : template <typename BoundaryCondition>
     152              : using get_deriv_vars_from_boundary_condition =
     153              :     typename get_deriv_vars_from_boundary_condition_impl<
     154              :         BoundaryCondition>::type;
     155              : }  // namespace evolution::dg::Actions::detail
        

Generated by: LCOV version 2.0-1