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
|