annotate src/main-Laplace.cpp @ 40:eaa99e09607d

Remove indentation due to namespace scope
author Jordi Gutiérrez Hermoso <jordigh@gmail.com>
date Fri, 12 Mar 2010 09:21:07 -0600
parents 7f31f9e2d196
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
1 //Solves
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
2 //
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
3 // nabla^2 u = f on Omega
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
4 // u = g on dOmega
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
5 //
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
6 //Input data is read from interior.matrix and boundary.matrix
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
7 //files. Each row in interior.matrix corresponds to an interior
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
8 //point of Omega, and similarly for boundary.matrix. Although it's not
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
9 //used, also need a normal vector at each point of the boundary as
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
10 //given by normals.matrix
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
11
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
12 #include <iostream>
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
13 #include <fstream>
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
14 #include <list>
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
15 #include <cmath>
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
16
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
17 #include <boost/shared_ptr.hpp>
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
18
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
19 #include "include/linalg.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
20 #include "include/error.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
21 #include "include/rbf.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
22 #include "include/diff_op.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
23 #include "include/bvp.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
24 #include "include/interpolator.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
25 #include "include/utils.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
26 #include "include/func.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
27
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
28 #define RBF_TYPE inverse_multiquadric //Replace by template later.
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
29
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
30 using namespace std;
34
7f31f9e2d196 Rename kwantxi to kwantix
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 30
diff changeset
31 using namespace kwantix;
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
32
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
33 //Some arbitrary interior function for Poisson equation (change to
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
34 //"return 0*p(1);", for example, for Laplace equation).
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
35 class intr_func : public realfunc{
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
36 public:
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
37 double at(const point& p) const{return 0*(p(1)+p(2));};
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
38 };
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
39
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
40 //Boundary function for Poisson equation
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
41 class bdry_func : public realfunc{
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
42 public:
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
43 //sin(theta)^3
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
44 double at(const point& p) const{return
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
45 std::pow(std::sin(std::atan2(p(1),p(2))),3);};
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
46 };
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
47
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
48 void output_result(const interpolator<RBF_TYPE>& u);
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
49
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
50 int main(){
34
7f31f9e2d196 Rename kwantxi to kwantix
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 30
diff changeset
51 using kwantix::vector;
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
52
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
53 try{
34
7f31f9e2d196 Rename kwantxi to kwantix
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 30
diff changeset
54 gsl_set_error_handler(&kwantix::errorHandler);
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
55
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
56 //Define the domain from given data
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
57 shared_ptr<domain> Omega(new domain("data/interior.matrix",
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
58 "data/boundary.matrix",
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 34
diff changeset
59 "data/normals.matrix"));
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
60
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
61 //Define the interior and boundary operators
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
62 shared_ptr<Laplacian> L(new Laplacian);
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
63 shared_ptr<dirichlet_op> B(new dirichlet_op);
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
64
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
65 //rhs of BVP
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
66 intr_func f;
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
67 bdry_func g;
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
68
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
69 //Define the Poisson boundary value problem.
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
70 shared_ptr<linear_BVP2> Poisson_BVP (new linear_BVP2(Omega, L, B, f, g));
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
71
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
72 //Define interpolator and solve the BVP.
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
73 interpolator<RBF_TYPE> u(Poisson_BVP);
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
74
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
75 //Write result to file
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
76 output_result(u);
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
77
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
78 }
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
79 catch(error& exc){
34
7f31f9e2d196 Rename kwantxi to kwantix
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 30
diff changeset
80 kwantix::show_exception(exc);
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
81 }
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
82
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
83 return 0;
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 void output_result(const interpolator<RBF_TYPE>& u)
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
87 {
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
88 //Output result as a 41x41 meshgrid (to be plotted, say, with
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
89 //Octave; show_sol script included to work with this data).
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
90 matrix sol(41,41);
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
91
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
92 double r, th;
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
93 const double pi = atan(1)*4;
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
94 point p(2);
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
95 th = 0;
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
96 for(size_t i = 1; i <= 41; i++){
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
97 r = 0;
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
98 for(size_t j = 1; j <= 41; j++){
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
99 p(1) = r*cos(th);
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
100 p(2) = r*sin(th);
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
101 sol(i,j) = u(p); //Evaluate interpolator at point p
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
102 r += 1.0/40;
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
103 }
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
104
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
105 th += 2.0*pi/40;
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
106 }
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
107
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
108
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
109 ofstream ofs("data/sol.matrix");
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
110 ofs << sol;
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
111 }