14 #include <utl/RK4ODEIntegrator.h>
15 #include <utl/RK5ODEIntegrator.h>
16 #include <utl/SVector.h>
18 #include <tst/Verify.h>
19 #include <cppunit/extensions/HelperMacros.h>
25 #define ASSERT_CLOSE(x, y) CPPUNIT_ASSERT(Verify<CloseTo>(x, y))
26 #define ASSERT_CLOSE_EPS(x, y, eps) CPPUNIT_ASSERT(Verify<CloseTo>(x, y, eps))
27 #define ASSERT_EQUAL(x, y) CPPUNIT_ASSERT(Verify<Equal>(x, y))
35 template<
typename Vector>
49 operator unsigned int()
const {
return 2; }
63 CPPUNIT_TEST(TestRK4);
64 CPPUNIT_TEST(TestRK4SVector);
65 CPPUNIT_TEST(TestRK5);
66 CPPUNIT_TEST(TestRK5SVector);
67 CPPUNIT_TEST(TestAdaptiveRK5);
68 CPPUNIT_TEST_SUITE_END();
77 const double x1 = 100;
78 const double dx = 0.1;
79 const Vector y0 = { 1, 0 };
89 const double omega =
sqrt(k/m);
91 const double eps = 1e-4;
95 for ( ; it.
GetX() < x1; it += dx) {
108 const double x1 = 100;
109 const double dx = 0.1;
110 const double t[2] = { 1, 0 };
121 const double omega =
sqrt(k/m);
123 const double eps = 1e-4;
127 for ( ; it.
GetX() < x1; it += dx) {
142 const double x1 = 100;
143 const double dx = 0.1;
144 const Vector y0 = { 1, 0 };
154 const double omega =
sqrt(k/m);
156 const double eps = 1e-6;
160 for ( ; it.
GetX() < x1; it += dx) {
173 const double x1 = 100;
174 const double dx = 0.1;
175 const double t[2] = { 1, 0 };
186 const double omega =
sqrt(k/m);
188 const double eps = 1e-6;
192 for ( ; it.
GetX() < x1; it += dx) {
207 const double x1 = 100;
208 const double dx = 0.1;
209 const Vector y0 = { 1, 0 };
217 const double accuracy = 1e-5;
222 const double omega =
sqrt(k/m);
224 const double eps = 1e-3;
230 for ( ; it.
GetX() < x1; it += dx) {
231 const double x = it.
GetX();
238 cout <<
"\nRK5 +=: " << count << endl;
246 for ( ; it2.
GetX() < x1; ++it2) {
247 const double x = it2.
GetX();
254 cout <<
"RK5 ++: " << count << endl;
bool operator()(const double, const Vector &y, Vector &dYdX) const
calculate derivatives
#define ASSERT_CLOSE_EPS(x, y, eps)
RK5Iterator< DerivativeFunctor, VectorType > Begin(const double x, const VectorType &y)
RK4Iterator< DerivativeFunctor, VectorType > Begin(const double x, const VectorType &y)
HarmonicOscillator(const double m, const double k)
CPPUNIT_TEST_SUITE_REGISTRATION(testAiresShowerFile)
Static (small and dense) vector class.
#define ASSERT_CLOSE(x, y)
AdaptiveRK5Iterator< DerivativeFunctor, VectorType > AdaptiveBegin(const double x, const double dx, const VectorType &y, const double accuracy=1e-5)