annotate main.cpp @ 24:ad9e3d28ce9b

Implement op<< for bvp::interpolator
author Jordi Gutiérrez Hermoso <jordigh@gmail.com>
date Fri, 21 Aug 2009 16:19:58 -0500
parents acefa48d4b4d
children 6c6003bcad16
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
1 #include <iostream>
21
4c5bac1f2612 Testing Euler's method
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 20
diff changeset
2 #include <iomanip>
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
3 #include <fstream>
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
4 #include <map>
6
188facdd5a60 Still buggy. Need a better way to precompute RBFs.
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 4
diff changeset
5 #include <set>
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
6 #include <sstream>
18
382e3b8e3f88 Compiles, and runs, but doesn't produce desired output. Must investigate this further.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 17
diff changeset
7
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
8 #include <boost/shared_ptr.hpp>
6
188facdd5a60 Still buggy. Need a better way to precompute RBFs.
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 4
diff changeset
9
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
10 #include "include/linalg.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
11 #include "include/rbf.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
12 #include "include/bvp.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
13 #include "include/error.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
14 #include "include/utils.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
15 #include "include/diff_op.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
16 #include "include/interpolator.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
17 #include "include/func.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
18
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
19 using namespace linalg;
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
20 using namespace bvp;
6
188facdd5a60 Still buggy. Need a better way to precompute RBFs.
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 4
diff changeset
21
21
4c5bac1f2612 Testing Euler's method
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 20
diff changeset
22 #define RBF_TYPE rbf::conical
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
23
21
4c5bac1f2612 Testing Euler's method
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 20
diff changeset
24 const double pi = 3.141592653589793238462643383279502;
4c5bac1f2612 Testing Euler's method
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 20
diff changeset
25
23
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
26 class wave_op : public linear_diff_op2{
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
27 public:
23
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
28 wave_op(double dt_in): dt2(dt_in*dt_in){};
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
29 double at(const realfunc& f, const point& p) const
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
30 {
24
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
31 return dt2*L(f,p) - f(p);
23
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
32 }
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
33 private:
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
34 Laplacian L;
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
35 double dt2;
6
188facdd5a60 Still buggy. Need a better way to precompute RBFs.
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 4
diff changeset
36 };
188facdd5a60 Still buggy. Need a better way to precompute RBFs.
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 4
diff changeset
37
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
38 class zero_func : public realfunc{
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
39 public:
23
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
40 double at(const point&) const{return 0;};
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
41 };
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
42
24
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
43 void save_iteration(const interpolator<RBF_TYPE>& u,
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
44 size_t n);
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
45
6
188facdd5a60 Still buggy. Need a better way to precompute RBFs.
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 4
diff changeset
46 int main()
188facdd5a60 Still buggy. Need a better way to precompute RBFs.
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 4
diff changeset
47 {
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
48 gsl_set_error_handler(&error_handling::errorHandler);
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
49
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
50 try{
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
51 using namespace std;
6
188facdd5a60 Still buggy. Need a better way to precompute RBFs.
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 4
diff changeset
52 using boost::shared_ptr;
18
382e3b8e3f88 Compiles, and runs, but doesn't produce desired output. Must investigate this further.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 17
diff changeset
53
23
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
54 map<point, double> u_init = utils::read_pd_map("data/wave_init.map");
6
188facdd5a60 Still buggy. Need a better way to precompute RBFs.
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 4
diff changeset
55
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
56 shared_ptr<domain> Omega(new domain("data/circ_intr.matrix",
23
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
57 "data/circ_bdry.matrix",
24
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
58 "data/circ_nrml.matrix"));
23
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
59 zero_func g;
11
d0076d9b2ef1 Conclude precomputation revision
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 6
diff changeset
60
23
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
61 //timestep
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
62 double dt=1e-2;
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
63
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
64 shared_ptr<wave_op> W(new wave_op(dt) );
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
65 shared_ptr<dirichlet_op> D(new dirichlet_op);
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
66 shared_ptr<linear_BVP2> the_bvp(new linear_BVP2(Omega, W, D,
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
67 u_init, g));
6
188facdd5a60 Still buggy. Need a better way to precompute RBFs.
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 4
diff changeset
68
23
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
69 rbf::conical::set_n(5);
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
70 interpolator<RBF_TYPE> u(the_bvp);
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
71 u.precompute_ev();
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
72 interpolator<RBF_TYPE> u0 = u, u1 = u;
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
73
23
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
74 //Main loop
24
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
75 size_t maxiter = 500;
23
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
76 for(size_t n = 1; n <= maxiter; n++)
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
77 {
24
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
78 save_iteration(u,n);
23
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
79 u0 = u1;
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
80 u1 = u;
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
81 cout << "Iteration: " << n << endl;
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 22
diff changeset
82 u.set_f( (u0 - 2*u1).at() );
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
83 }
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
84
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
85 }
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
86 catch(error exc){
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
87 utils::show_exception(exc);
15
5144dd3c5468 Almost completed adding all Doxygen docstrings.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 14
diff changeset
88 return 1;
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
89 }
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
90
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
91 }
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
92
24
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
93 void
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
94 save_iteration(const interpolator<RBF_TYPE>& u,
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
95 size_t n)
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
96 {
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
97 using namespace std;
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
98 stringstream ss;
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
99 string filename = "results/u";
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
100 ss << filename << setw(5) << setfill('0') << n << ".map";
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
101 ss >> filename;
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
102 ofstream ofs(filename.c_str());
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
103 ofs << u;
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
104 ofs.close();
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
105 }