44#include < iomanip>
55#include < chrono>
66
7- // Include all integrators
8- #include < solvers/rk4_solver.hpp>
9- #include < solvers/rk23_solver.hpp>
10- #include < solvers/rk45_solver.hpp>
11- #include < solvers/dop853_solver.hpp>
12- #include < solvers/radau_solver.hpp>
13- #include < solvers/bdf_solver.hpp>
14- #include < solvers/lsoda_solver.hpp>
7+ // Include modern diffeq library
8+ #include < diffeq.hpp>
159
1610// Test systems
1711
@@ -88,37 +82,37 @@ void demonstrate_exponential_decay() {
8882 // Test all integrators
8983 {
9084 std::vector<double > y = {1.0 };
91- RK4Integrator<std::vector<double >> integrator (exponential_decay);
85+ diffeq::integrators::ode:: RK4Integrator<std::vector<double >> integrator (exponential_decay);
9286 time_integrator (integrator, y, t_start, dt, t_end, " RK4" );
9387 }
9488
9589 {
9690 std::vector<double > y = {1.0 };
97- RK23Integrator<std::vector<double >> integrator (exponential_decay, 1e-6 , 1e-9 );
91+ diffeq::integrators::ode:: RK23Integrator<std::vector<double >> integrator (exponential_decay, 1e-6 , 1e-9 );
9892 time_integrator (integrator, y, t_start, dt, t_end, " RK23" );
9993 }
10094
10195 {
10296 std::vector<double > y = {1.0 };
103- RK45Integrator<std::vector<double >> integrator (exponential_decay, 1e-8 , 1e-12 );
97+ diffeq::integrators::ode:: RK45Integrator<std::vector<double >> integrator (exponential_decay, 1e-8 , 1e-12 );
10498 time_integrator (integrator, y, t_start, dt, t_end, " RK45" );
10599 }
106100
107101 {
108102 std::vector<double > y = {1.0 };
109- // DOP853Integrator<std::vector<double>> integrator(exponential_decay, 1e-3, 1e-6);
110- // time_integrator(integrator, y, t_start, dt, t_end, "DOP853");
103+ diffeq::integrators::ode:: DOP853Integrator<std::vector<double >> integrator (exponential_decay, 1e-3 , 1e-6 );
104+ time_integrator (integrator, y, t_start, dt, t_end, " DOP853" );
111105 }
112106
113107 {
114108 std::vector<double > y = {1.0 };
115- BDFIntegrator<std::vector<double >> integrator (exponential_decay, 1e-6 , 1e-9 );
109+ diffeq::integrators::ode:: BDFIntegrator<std::vector<double >> integrator (exponential_decay, 1e-6 , 1e-9 );
116110 time_integrator (integrator, y, t_start, dt, t_end, " BDF" );
117111 }
118112
119113 {
120114 std::vector<double > y = {1.0 };
121- LSODAIntegrator <std::vector<double >> integrator (exponential_decay, 1e-6 , 1e-9 );
115+ diffeq::integrators::ode::LSODA <std::vector<double >> integrator (exponential_decay, 1e-6 , 1e-9 );
122116 time_integrator (integrator, y, t_start, dt, t_end, " LSODA" );
123117 }
124118}
@@ -133,7 +127,7 @@ void demonstrate_van_der_pol() {
133127
134128 {
135129 std::vector<double > y = {1.0 , 0.0 };
136- RK4Integrator<std::vector<double >> integrator (
130+ diffeq::integrators::ode:: RK4Integrator<std::vector<double >> integrator (
137131 [&vdp](double t, const std::vector<double >& y, std::vector<double >& dydt) {
138132 vdp (t, y, dydt);
139133 });
@@ -142,25 +136,26 @@ void demonstrate_van_der_pol() {
142136
143137 {
144138 std::vector<double > y = {1.0 , 0.0 };
145- RK45Integrator<std::vector<double >> integrator (
139+ diffeq::integrators::ode:: RK45Integrator<std::vector<double >> integrator (
146140 [&vdp](double t, const std::vector<double >& y, std::vector<double >& dydt) {
147141 vdp (t, y, dydt);
148142 }, 1e-6 , 1e-9 );
149143 time_integrator (integrator, y, t_start, dt, t_end, " RK45" );
150144 }
151145
152- {
153- std::vector<double > y = {1.0 , 0.0 };
154- RadauIntegrator<std::vector<double >> integrator (
155- [&vdp](double t, const std::vector<double >& y, std::vector<double >& dydt) {
156- vdp (t, y, dydt);
157- }, 1e-6 , 1e-9 );
158- time_integrator (integrator, y, t_start, dt, t_end, " Radau" );
159- }
146+ // Note: RadauIntegrator not implemented in current hierarchy
147+ // {
148+ // std::vector<double> y = {1.0, 0.0};
149+ // RadauIntegrator<std::vector<double>> integrator(
150+ // [&vdp](double t, const std::vector<double>& y, std::vector<double>& dydt) {
151+ // vdp(t, y, dydt);
152+ // }, 1e-6, 1e-9);
153+ // time_integrator(integrator, y, t_start, dt, t_end, "Radau");
154+ // }
160155
161156 {
162157 std::vector<double > y = {1.0 , 0.0 };
163- BDFIntegrator<std::vector<double >> integrator (
158+ diffeq::integrators::ode:: BDFIntegrator<std::vector<double >> integrator (
164159 [&vdp](double t, const std::vector<double >& y, std::vector<double >& dydt) {
165160 vdp (t, y, dydt);
166161 }, 1e-6 , 1e-9 );
@@ -169,13 +164,13 @@ void demonstrate_van_der_pol() {
169164
170165 {
171166 std::vector<double > y = {1.0 , 0.0 };
172- LSODAIntegrator <std::vector<double >> integrator (
167+ diffeq::integrators::ode::LSODA <std::vector<double >> integrator (
173168 [&vdp](double t, const std::vector<double >& y, std::vector<double >& dydt) {
174169 vdp (t, y, dydt);
175170 }, 1e-6 , 1e-9 );
176171 double timing = time_integrator (integrator, y, t_start, dt, t_end, " LSODA" );
177172 std::cout << " Final method: " <<
178- (integrator.get_current_method () == LSODAIntegrator <std::vector<double >>::MethodType::ADAMS ?
173+ (integrator.get_current_method () == diffeq::integrators::ode::LSODA <std::vector<double >>::MethodType::ADAMS ?
179174 " Adams (non-stiff)" : " BDF (stiff)" ) << std::endl;
180175 }
181176}
@@ -190,25 +185,25 @@ void demonstrate_lorenz_system() {
190185
191186 {
192187 std::vector<double > y = {1.0 , 1.0 , 1.0 };
193- RK4Integrator<std::vector<double >> integrator (lorenz_system);
188+ diffeq::integrators::ode:: RK4Integrator<std::vector<double >> integrator (lorenz_system);
194189 time_integrator (integrator, y, t_start, dt, t_end, " RK4" );
195190 }
196191
197192 {
198193 std::vector<double > y = {1.0 , 1.0 , 1.0 };
199- RK45Integrator<std::vector<double >> integrator (lorenz_system, 1e-8 , 1e-12 );
194+ diffeq::integrators::ode:: RK45Integrator<std::vector<double >> integrator (lorenz_system, 1e-8 , 1e-12 );
200195 time_integrator (integrator, y, t_start, dt, t_end, " RK45" );
201196 }
202197
203198 {
204199 std::vector<double > y = {1.0 , 1.0 , 1.0 };
205- // DOP853Integrator<std::vector<double>> integrator(lorenz_system, 1e-3, 1e-6);
206- // time_integrator(integrator, y, t_start, dt, t_end, "DOP853");
200+ diffeq::integrators::ode:: DOP853Integrator<std::vector<double >> integrator (lorenz_system, 1e-3 , 1e-6 );
201+ time_integrator (integrator, y, t_start, dt, t_end, " DOP853" );
207202 }
208203
209204 {
210205 std::vector<double > y = {1.0 , 1.0 , 1.0 };
211- LSODAIntegrator <std::vector<double >> integrator (lorenz_system, 1e-8 , 1e-12 );
206+ diffeq::integrators::ode::LSODA <std::vector<double >> integrator (lorenz_system, 1e-8 , 1e-12 );
212207 time_integrator (integrator, y, t_start, dt, t_end, " LSODA" );
213208 }
214209}
@@ -226,28 +221,29 @@ void demonstrate_stiff_robertson() {
226221 std::cout << " Using shortened time range (t=1.0) for demonstration purposes." << std::endl;
227222
228223 // Only test implicit methods for this stiff system
229- try {
230- std::vector<double > y = {1.0 , 0.0 , 0.0 };
231- RadauIntegrator<std::vector<double >> integrator (robertson_kinetics, 1e-6 , 1e-9 );
232- time_integrator (integrator, y, t_start, dt, t_end, " Radau" );
233- } catch (const std::exception& e) {
234- std::cout << std::setw (15 ) << " Radau" << " : Failed - " << e.what () << std::endl;
235- }
224+ // Note: RadauIntegrator not implemented in current hierarchy
225+ // try {
226+ // std::vector<double> y = {1.0, 0.0, 0.0};
227+ // RadauIntegrator<std::vector<double>> integrator(robertson_kinetics, 1e-6, 1e-9);
228+ // time_integrator(integrator, y, t_start, dt, t_end, "Radau");
229+ // } catch (const std::exception& e) {
230+ // std::cout << std::setw(15) << "Radau" << ": Failed - " << e.what() << std::endl;
231+ // }
236232
237233 try {
238234 std::vector<double > y = {1.0 , 0.0 , 0.0 };
239- BDFIntegrator<std::vector<double >> integrator (robertson_kinetics, 1e-6 , 1e-9 );
235+ diffeq::integrators::ode:: BDFIntegrator<std::vector<double >> integrator (robertson_kinetics, 1e-6 , 1e-9 );
240236 time_integrator (integrator, y, t_start, dt, t_end, " BDF" );
241237 } catch (const std::exception& e) {
242238 std::cout << std::setw (15 ) << " BDF" << " : Failed - " << e.what () << std::endl;
243239 }
244240
245241 try {
246242 std::vector<double > y = {1.0 , 0.0 , 0.0 };
247- LSODAIntegrator <std::vector<double >> integrator (robertson_kinetics, 1e-6 , 1e-9 );
243+ diffeq::integrators::ode::LSODA <std::vector<double >> integrator (robertson_kinetics, 1e-6 , 1e-9 );
248244 double timing = time_integrator (integrator, y, t_start, dt, t_end, " LSODA" );
249245 std::cout << " Final method: " <<
250- (integrator.get_current_method () == LSODAIntegrator <std::vector<double >>::MethodType::ADAMS ?
246+ (integrator.get_current_method () == diffeq::integrators::ode::LSODA <std::vector<double >>::MethodType::ADAMS ?
251247 " Adams (non-stiff)" : " BDF (stiff)" ) << std::endl;
252248 } catch (const std::exception& e) {
253249 std::cout << std::setw (15 ) << " LSODA" << " : Failed - " << e.what () << std::endl;
@@ -269,7 +265,7 @@ void demonstrate_adaptive_features() {
269265
270266 for (auto [rtol, atol] : tolerances) {
271267 std::vector<double > y = {1.0 };
272- RK45Integrator<std::vector<double >> integrator (exponential_decay, rtol, atol);
268+ diffeq::integrators::ode:: RK45Integrator<std::vector<double >> integrator (exponential_decay, rtol, atol);
273269
274270 std::cout << " Tolerances: rtol = " << rtol << " , atol = " << atol << std::endl;
275271 time_integrator (integrator, y, t_start, dt, t_end, " RK45" );
@@ -296,7 +292,7 @@ int main() {
296292 std::cout << " ✓ RK23: Adaptive 3rd order with embedded error estimation" << std::endl;
297293 std::cout << " ✓ RK45: Adaptive 5th order Dormand-Prince (scipy default)" << std::endl;
298294 std::cout << " ✓ DOP853: High-accuracy 8th order for demanding problems" << std::endl;
299- std::cout << " ✓ Radau: Implicit 5th order for stiff systems" << std::endl;
295+ std::cout << " • Radau: Implicit 5th order for stiff systems (not yet implemented) " << std::endl;
300296 std::cout << " ✓ BDF: Variable-order implicit multistep for stiff systems" << std::endl;
301297 std::cout << " ✓ LSODA: Automatic method switching (Adams ↔ BDF)" << std::endl;
302298
0 commit comments