12 #include "DataStructures/DataVector.hpp"
14 #include "Evolution/Systems/Burgers/Fluxes.hpp"
15 #include "Evolution/TypeTraits.hpp"
26 template <
typename Tag>
31 template <
typename Solution>
32 void check_burgers_solution(
const Solution& solution,
35 static_assert(evolution::is_analytic_solution_v<Solution>,
36 "Solution was not derived from AnalyticSolution");
38 const tnsr::I<DataVector, 1> positions_tnsr{{{positions}}};
39 for (
const double time : times) {
40 const auto value = solution.u(positions_tnsr, time);
41 const auto time_deriv = solution.du_dt(positions_tnsr, time);
42 CHECK(get<Burgers::Tags::U>(solution.variables(
43 positions_tnsr, time, tmpl::list<Burgers::Tags::U>{})) == value);
48 for (
size_t point = 0; point < positions.size(); ++point) {
49 const tnsr::I<double, 1> xp{{{positions[point]}}};
50 const double up =
get(value)[point];
51 const double dtup =
get(time_deriv)[point];
52 CHECK(
get(solution.u(xp, time)) == approx(up));
53 CHECK(
get(solution.du_dt(xp, time)) == approx(dtup));
61 approx.epsilon(1e-10)(dtup));
65 tnsr::I<DataVector, 1> flux{{{
DataVector(1)}}};
66 Burgers::Fluxes::apply(
67 &flux, solution.u(tnsr::I<DataVector, 1>{{{{x[0]}}}},
time));
71 1e-4)[0] == approx(-dtup));