20 explicit SOSRIIntegrator(std::shared_ptr<typename base_type::sde_problem_type> problem,
21 std::shared_ptr<typename base_type::wiener_process_type> wiener =
nullptr)
22 :
base_type(problem, wiener, create_sosri_tableau()) {}
24 std::string name()
const override {
25 return "SOSRI (Stability-Optimized SRI for General Itô SDEs)";
32 tableau.order =
static_cast<typename base_type::value_type
>(1.5);
35 tableau.A0 = {{0, 0, 0},
36 {
static_cast<typename base_type::value_type
>(0.4), 0, 0},
37 {
static_cast<typename base_type::value_type
>(0.1),
38 static_cast<typename base_type::value_type
>(0.5), 0}};
39 tableau.A1 = {{0, 0, 0},
40 {
static_cast<typename base_type::value_type
>(0.4), 0, 0},
41 {
static_cast<typename base_type::value_type
>(0.1),
42 static_cast<typename base_type::value_type
>(0.5), 0}};
43 tableau.c0 = {0,
static_cast<typename base_type::value_type
>(0.4),
44 static_cast<typename base_type::value_type
>(0.6)};
45 tableau.alpha = {
static_cast<typename base_type::value_type
>(1.0/6.0),
46 static_cast<typename base_type::value_type
>(2.0/3.0),
47 static_cast<typename base_type::value_type
>(1.0/6.0)};
50 tableau.B0 = {{0, 0, 0},
51 {
static_cast<typename base_type::value_type
>(0.4), 0, 0},
52 {
static_cast<typename base_type::value_type
>(0.1),
53 static_cast<typename base_type::value_type
>(0.5), 0}};
54 tableau.B1 = {{0, 0, 0},
55 {
static_cast<typename base_type::value_type
>(0.4), 0, 0},
56 {
static_cast<typename base_type::value_type
>(0.1),
57 static_cast<typename base_type::value_type
>(0.5), 0}};
58 tableau.c1 = {0,
static_cast<typename base_type::value_type
>(0.4),
59 static_cast<typename base_type::value_type
>(0.6)};
60 tableau.beta1 = {
static_cast<typename base_type::value_type
>(1.0/6.0),
61 static_cast<typename base_type::value_type
>(2.0/3.0),
62 static_cast<typename base_type::value_type
>(1.0/6.0)};
63 tableau.beta2 = {0,
static_cast<typename base_type::value_type
>(0.3),
64 static_cast<typename base_type::value_type
>(0.7)};
65 tableau.beta3 = {0,
static_cast<typename base_type::value_type
>(0.2),
66 static_cast<typename base_type::value_type
>(0.8)};
67 tableau.beta4 = {0,
static_cast<typename base_type::value_type
>(0.1),
68 static_cast<typename base_type::value_type
>(0.05)};