DiffEq - Modern C++ ODE Integration Library 1.0.0
High-performance C++ library for solving ODEs with async signal processing
Loading...
Searching...
No Matches
sra2.hpp
1#pragma once
2
3#include <integrators/sde/sra.hpp>
4#include <sde/sde_base.hpp>
5#include <core/state_creator.hpp>
6#include <cmath>
7
8namespace diffeq {
9
16template<system_state StateType>
17class SRA2Integrator : public SRAIntegrator<StateType> {
18public:
20
21 explicit SRA2Integrator(std::shared_ptr<typename base_type::sde_problem_type> problem,
22 std::shared_ptr<typename base_type::wiener_process_type> wiener = nullptr)
23 : base_type(problem, wiener, create_sra2_tableau()) {}
24
25 std::string name() const override {
26 return "SRA2 (Strong Order 1.5 for Additive Noise)";
27 }
28
29private:
30 static typename base_type::tableau_type create_sra2_tableau() {
31 typename base_type::tableau_type tableau;
32 tableau.stages = 3;
33 tableau.order = static_cast<typename base_type::value_type>(1.5);
34
35 // SRA2 drift coefficients (3-stage method)
36 tableau.A0 = {{0, 0, 0}, {static_cast<typename base_type::value_type>(0.5), 0, 0},
37 {0, static_cast<typename base_type::value_type>(0.75), 0}};
38 tableau.c0 = {0, static_cast<typename base_type::value_type>(0.5),
39 static_cast<typename base_type::value_type>(0.75)};
40 tableau.alpha = {static_cast<typename base_type::value_type>(2.0/9.0),
41 static_cast<typename base_type::value_type>(1.0/3.0),
42 static_cast<typename base_type::value_type>(4.0/9.0)};
43
44 // SRA2 diffusion coefficients
45 tableau.B0 = {{0, 0, 0}, {static_cast<typename base_type::value_type>(0.5), 0, 0},
46 {0, static_cast<typename base_type::value_type>(0.75), 0}};
47 tableau.c1 = {0, static_cast<typename base_type::value_type>(0.5),
48 static_cast<typename base_type::value_type>(0.75)};
49 tableau.beta1 = {static_cast<typename base_type::value_type>(2.0/9.0),
50 static_cast<typename base_type::value_type>(1.0/3.0),
51 static_cast<typename base_type::value_type>(4.0/9.0)};
52 tableau.beta2 = {0, static_cast<typename base_type::value_type>(0.5),
53 static_cast<typename base_type::value_type>(0.5)};
54
55 return tableau;
56 }
57};
58
59} // namespace diffeq
SRA2 integrator variant.
Definition sra2.hpp:17
SRA (Stochastic Runge-Kutta for additive noise SDEs) integrator.
Definition sra.hpp:44