Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <utility> 7 : 8 : #include "Evolution/TypeTraits.hpp" 9 : #include "PointwiseFunctions/AnalyticData/AnalyticData.hpp" 10 : #include "PointwiseFunctions/AnalyticSolutions/AnalyticSolution.hpp" 11 : #include "Utilities/Requires.hpp" 12 : #include "Utilities/TMPL.hpp" 13 : 14 0 : namespace evolution::Initialization { 15 : /// Extract initial data either from analytic data or from an analytic 16 : /// solution at a specified time. 17 : template <typename SolutionOrData, typename Coordinates, typename... Tags, 18 : Requires<is_analytic_solution_v<SolutionOrData>> = nullptr> 19 1 : decltype(auto) initial_data(const SolutionOrData& solution_or_data, 20 : Coordinates&& coordinates, const double time, 21 : const tmpl::list<Tags...> tags) { 22 : return solution_or_data.variables(std::forward<Coordinates>(coordinates), 23 : time, tags); 24 : } 25 : 26 : /// \cond 27 : template <typename SolutionOrData, typename Coordinates, typename... Tags, 28 : Requires<is_analytic_data_v<SolutionOrData> or 29 : is_numeric_initial_data_v<SolutionOrData>> = nullptr> 30 : decltype(auto) initial_data(const SolutionOrData& solution_or_data, 31 : Coordinates&& coordinates, const double /*time*/, 32 : const tmpl::list<Tags...> tags) { 33 : return solution_or_data.variables(std::forward<Coordinates>(coordinates), 34 : tags); 35 : } 36 : /// \endcond 37 : } // namespace evolution::Initialization