00001
00005 #ifndef __BVP_H__
00006 #define __BVP_H__
00007
00008 #include <map>
00009 #include <set>
00010 #include <string>
00011 #include <boost/shared_ptr.hpp>
00012 #include "linalg.hpp"
00013 #include "diff_op.hpp"
00014 #include "func.hpp"
00015
00016
00018 namespace bvp{
00019 using std::map;
00020 using std::set;
00021 using std::string;
00022 using linalg::point;
00023 using linalg::vector;
00024 using linalg::matrix;
00025 using boost::shared_ptr;
00026
00029 class domain{
00030 public:
00032 domain(size_t dimension);
00034 domain(size_t dimension, set<point> intr,
00035 set<point> bdry, map<point, vector> ns);
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 domain(string intr, string bdry, string ns);
00055
00057 void set_dimension(size_t dimension);
00058
00059
00061 void add_to_interior(const set<point> &intr);
00063 void add_to_interior(const point &intr);
00065 void add_to_boundary(const set<point> &bdry);
00067 void add_to_boundary(const point &bdry);
00074 void add_to_normals(const map<point, vector> &ns);
00081 void add_to_normals(const point &bdry, const vector &n);
00082
00083
00085 size_t get_dimension() const;
00087 const set<point>& get_interior() const;
00089 const set<point>& get_boundary() const;
00091 const map<point, vector>& get_normals() const;
00092
00094 bool contains(const point& p) const;
00095
00096 virtual ~domain();
00097 private:
00100 domain();
00101 size_t dim;
00102 set<point> interior;
00103 set<point> boundary;
00104 map<point, vector> normals;
00105 };
00106
00121 class BVP{
00122 public:
00136 BVP(shared_ptr<const domain> O,
00137 shared_ptr<const diff_op> L_in,
00138 shared_ptr<const bdry_diff_op> B_in,
00139 const map<point, double> &f_in,
00140 const map<point, double> &g_in);
00154 BVP(shared_ptr<const domain> O,
00155 shared_ptr<const diff_op> L_in,
00156 shared_ptr<const bdry_diff_op> B_in,
00157 const realfunc &f_in,
00158 const realfunc &g_in );
00159 virtual ~BVP() {};
00160
00162 shared_ptr<const domain> get_domain() const;
00164 shared_ptr<const diff_op> get_diff_op() const;
00166 shared_ptr<const bdry_diff_op> get_bdry_diff_op() const;
00168 const map<point, double>& get_f() const;
00170 const map<point, double>& get_g() const;
00171
00173 void set_f(const realfunc &f_in);
00175 void set_g(const realfunc &g_in);
00176
00184 void set_f(const map<point, double>& f_in);
00192 void set_g(const map<point, double>& g_in);
00193
00194 private:
00196 BVP(const BVP&){};
00197 shared_ptr<const domain> Omega;
00198 shared_ptr<const diff_op> L;
00199 shared_ptr<const bdry_diff_op> B;
00200 map<point, double> f;
00201 map<point, double> g;
00202 };
00203
00205 class linear_BVP2 : public BVP{
00206 public:
00208 linear_BVP2(shared_ptr<const domain> O,
00209 shared_ptr<const linear_diff_op2> L_in,
00210 shared_ptr<const bdry_diff_op> B_in,
00211 const map<point, double> &f_in,
00212 const map<point, double> &g_in)
00213 : BVP(O, L_in, B_in, f_in, g_in){};
00215 linear_BVP2(shared_ptr<const domain> O,
00216 shared_ptr<const linear_diff_op2> L_in,
00217 shared_ptr<const bdry_diff_op> B_in,
00218 const realfunc &f_in,
00219 const realfunc &g_in )
00220 : BVP(O, L_in, B_in, f_in, g_in){};
00222 shared_ptr<const linear_diff_op2> get_linear_diff_op2() const;
00223 };}
00224
00225 #endif //__BVP_H__