Mercurial > hg > kwantix
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 |
rev | line source |
---|---|
0 | 1 #include <iostream> |
21
4c5bac1f2612
Testing Euler's method
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
20
diff
changeset
|
2 #include <iomanip> |
0 | 3 #include <fstream> |
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 | 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 | 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 | 10 #include "include/linalg.hpp" |
11 #include "include/rbf.hpp" | |
12 #include "include/bvp.hpp" | |
13 #include "include/error.hpp" | |
14 #include "include/utils.hpp" | |
15 #include "include/diff_op.hpp" | |
16 #include "include/interpolator.hpp" | |
17 #include "include/func.hpp" | |
18 | |
19 using namespace linalg; | |
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 | 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 | 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 | 38 class zero_func : public realfunc{ |
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 | 41 }; |
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 | 48 gsl_set_error_handler(&error_handling::errorHandler); |
49 | |
50 try{ | |
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 | 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 | 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 | 83 } |
84 | |
85 } | |
86 catch(error exc){ | |
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 | 89 } |
90 | |
91 } | |
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 } |