SpECTRE Documentation Coverage Report
Current view: top level - Elliptic/Utilities - GetAnalyticData.hpp Hit Total Coverage
Commit: 3c072f0ce967e2e56649d3fa12aa2a0e4fe2a42e Lines: 1 2 50.0 %
Date: 2024-04-23 20:50:18
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 "DataStructures/DataBox/DataBox.hpp"
       9             : #include "DataStructures/Variables.hpp"
      10             : #include "Parallel/Tags/Metavariables.hpp"
      11             : #include "Utilities/CallWithDynamicType.hpp"
      12             : #include "Utilities/TMPL.hpp"
      13             : 
      14             : namespace elliptic::util {
      15             : /// Get data for the tensors in `TagsList` from the `analytic_data`. The
      16             : /// `analytic_data` can be any subclass of `Base` that is listed in
      17             : /// `Metavariables::factory_creation`.
      18             : template <typename TagsList, typename Base, typename DbTagsList,
      19             :           typename... Args>
      20           1 : Variables<TagsList> get_analytic_data(const Base& analytic_data,
      21             :                                       const db::DataBox<DbTagsList>& box,
      22             :                                       const Args&... args) {
      23             :   using factory_classes =
      24             :       typename std::decay_t<decltype(db::get<Parallel::Tags::Metavariables>(
      25             :           box))>::factory_creation::factory_classes;
      26             :   return call_with_dynamic_type<Variables<TagsList>,
      27             :                                 tmpl::at<factory_classes, Base>>(
      28             :       &analytic_data, [&args...](const auto* const derived) {
      29             :         return variables_from_tagged_tuple(
      30             :             derived->variables(args..., TagsList{}));
      31             :       });
      32             : }
      33             : }  // namespace elliptic::util

Generated by: LCOV version 1.14