The BioCro C++ Library
broyden_test.h
Go to the documentation of this file.
1#ifndef BROYDEN_TEST_H
2#define BROYDEN_TEST_H
3
4#include "../framework/module.h"
5#include "../framework/state_map.h"
6#include "../math/roots/multidim/broyden.h"
7
8#include <array>
9
10namespace standardBML
11{
12
13std::array<double, 2> test_function(const std::array<double, 2>& x)
14{
15 std::array<double, 2> y;
16 y[0] = x[0] / (x[0] * x[0] + 1) - x[1] + 0.5;
17 y[1] = 2 - x[0] - x[1];
18 return y;
19}
20
21class broyden_test : public direct_module
22{
23 public:
25 state_map const& input_quantities, state_map* output_quantities)
26 : direct_module{},
27
28 // Get pointers to input quantities
29 max_iterations{get_input(input_quantities, "max_iterations")},
30 abs_tol{get_input(input_quantities, "abs_tol")},
31 rel_tol{get_input(input_quantities, "rel_tol")},
32 guess_1{get_input(input_quantities, "guess_1")},
33 guess_2{get_input(input_quantities, "guess_2")},
34 x1{get_op(output_quantities, "x1")},
35 x2{get_op(output_quantities, "x2")},
36 y1{get_op(output_quantities, "y1")},
37 y2{get_op(output_quantities, "y2")},
38 iter{get_op(output_quantities, "iter")}
39
40 // Get pointers to output quantities
41
42 {
43 }
44 static string_vector get_inputs();
45 static string_vector get_outputs();
46 static std::string get_name() { return "broyden_test"; }
47
48 private:
49 // Pointers to input quantities
50 const double& max_iterations;
51 const double& abs_tol;
52 const double& rel_tol;
53 const double& guess_1;
54 const double& guess_2;
55
56 // Pointers to output quantities
57 double* x1;
58 double* x2;
59 double* y1;
60 double* y2;
61 double* iter;
62
63 // Main operation
64 void do_operation() const;
65};
66
68{
69 return {
70 "max_iterations",
71 "abs_tol",
72 "rel_tol",
73 "guess_1",
74 "guess_2"};
75}
76
78{
79 return {
80 "x1",
81 "x2",
82 "y1",
83 "y2",
84 "iter"};
85}
86
87void broyden_test::do_operation() const
88{
89 using namespace root_multidim;
90 broyden<2> solve(static_cast<size_t>(max_iterations), abs_tol, rel_tol);
91 std::array<double, 2> guess = {guess_1, guess_2};
92 result_t<2> res = solve(test_function, guess);
93
94 update(x1, res.zero[0]);
95 update(x2, res.zero[1]);
96
97 update(y1, res.residual[0]);
98 update(y2, res.residual[1]);
99
100 update(iter, res.iteration);
101}
102
103} // namespace standardBML
104#endif
static string_vector get_outputs()
Definition: broyden_test.h:77
broyden_test(state_map const &input_quantities, state_map *output_quantities)
Definition: broyden_test.h:24
static string_vector get_inputs()
Definition: broyden_test.h:67
static std::string get_name()
Definition: broyden_test.h:46
This is the standard BioCro module library; it includes the essential modules used in typical BioCro ...
Definition: aba_decay.h:8
std::array< double, 2 > test_function(const std::array< double, 2 > &x)
Definition: broyden_test.h:13