1 #include <iostream>
 2 #include <vector>
 3 #include <complex>
 4 #include <cmath>
 5 #include "typedefs.h"
 6 #include "check.h"
 7 #include "ode.h"
 8 #include "functions.h"
 9 
10 int main()
11 {
12   // Namespace declarations
13   using std::cout;
14   using std::vector;
15   using std::complex;
16 
17   // Calculate machine precision
18   Floattype eps_machine = 1.0f;
19   while (1.0f + eps_machine != 1.0f)
20     eps_machine /= 2.0f;
21 
22   cout << "\n\033[1;33m--- Part C: Solving along a complex path ---\033[0m\n";
23   complex<Floattype> a(0.0f, 0.0f);     // Lower limit
24   complex<Floattype> b(2.0f*M_PI, 2.0f*M_PI); // Upper limit
25   cout << "Integration path: b-a = " << b-a << '\n';
26   Inttype n_eqs = 2; // Number of equations in ODE system
27   vector<complex<Floattype> > y_start(n_eqs);
28   complex<Floattype> y0(0.0f, 0.0f);
29   complex<Floattype> y1(1.0f, 1.0f);
30   y_start[0] = y0;
31   y_start[1] = y1;
32   Floattype h_start = 0.01f;
33   ODE ode(func1,        // ODE system
34           y_start,      // Initial values
35           a,    // Lower limit
36           b,    // Upper limit
37           h_start,      // Start value of step size
38           10000,        // Max. number of steps
39           eps_machine*1e12f,  // Absolute precision
40           eps_machine*1e12f); // Relative precision
41   ode.write("funcC.dat"); // Write solutions to data file
42 
43   // Report to stdout
44   cout << "ODE system solved in "
45        << ode.steps() << " steps.\n\n";
46 
47   // Return successfully
48   return 0;
49 }
50