1#ifndef TATOOINE_ODE_SOLVER_H
2#define TATOOINE_ODE_SOLVER_H
12template <
typename F,
typename Real,
size_t N>
14 : std::integral_constant<
15 bool, std::is_invocable_v<F, vec<Real, N> const&, Real,
16 vec<Real, N> const&> ||
17 std::is_invocable_v<F, vec<Real, N> const&, Real>> {};
18template <
typename F,
typename Real,
size_t N>
20 : std::integral_constant<
22 !std::is_base_of_v<polymorphic::vectorfield<Real, N>, std::decay_t<F>> &&
23 std::is_invocable_v<F, vec<Real, N> const&, Real> &&
24 (std::is_same_v<vec<Real, N>,
25 std::invoke_result_t<F, vec<Real, N>, Real>> ||
26 std::is_same_v<std::optional<vec<Real, N>>,
27 std::invoke_result_t<F, vec<Real, N>, Real>>)> {};
29template <
typename F,
typename Real,
size_t N>
33template <
typename F,
typename Real,
size_t N>
36template <
typename F,
typename Real,
size_t N>
38 std::regular_invocable<F, vec<Real, N>
const&, Real, vec<Real, N>
const&> ||
39 std::regular_invocable<F, vec<Real, N>
const&, Real>;
40template <
typename F,
typename Real,
size_t N>
42 !std::is_base_of_v<polymorphic::vectorfield<Real, N>, std::decay_t<F>> &&
43 std::regular_invocable<F, vec<Real, N>
const&, Real> &&
44 (std::is_same_v<vec<Real, N>,
45 std::invoke_result_t<F, vec<Real, N>, Real>> ||
46 std::is_same_v<std::optional<vec<Real, N>>,
47 std::invoke_result_t<F, vec<Real, N>, Real>>);
49template <
typename Derived,
typename Real,
size_t N>
62 template <
typename V, std::floating_point VReal,
arithmetic Y0Real,
66 T0Real t0, TauReal tau,
67 StepperCallback&& callback)
const {
68 as_derived().solve(v, y0, t0, tau, std::forward<StepperCallback>(callback));
75 TauReal tau, StepperCallback&& callback)
const {
76 as_derived().solve(std::forward<Evaluator>(evaluator), y0, t0, tau,
77 std::forward<StepperCallback>(callback));
84 TauReal tau, StepperCallback&& callback)
const {
85 as_derived().solve(std::forward<Evaluator>(evaluator), y0s, t0, tau,
86 std::forward<StepperCallback>(callback));
Definition: concepts.h:33
Definition: controller_runge_kutta_with_domain_check.h:19
static constexpr auto is_stepper_evaluator
Definition: solver.h:34
static constexpr auto is_stepper_callback_invocable
Definition: solver.h:30
constexpr auto as_derived() -> derived_type &
returns casted as_derived data
Definition: crtp.h:11
vec< Real, N > vec_t
Definition: solver.h:56
constexpr auto as_derived() -> derived_type &
returns casted as_derived data
Definition: crtp.h:11
constexpr auto solve(vectorfield< V, VReal, N > const &v, vec< Y0Real, N > &y0, T0Real t0, TauReal tau, StepperCallback &&callback) const
Definition: solver.h:65
constexpr auto solve(Evaluator &&evaluator, mat< Y0Real, N, K > &y0s, T0Real t0, TauReal tau, StepperCallback &&callback) const
Definition: solver.h:83
constexpr auto solve(Evaluator &&evaluator, vec< Y0Real, N > &y0, T0Real t0, TauReal tau, StepperCallback &&callback) const
Definition: solver.h:74