00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _U2D_PROBLEM_H
00026 #define _U2D_PROBLEM_H
00027
00028 #include "boost/numeric/mtl/mtl.hpp"
00029
00030 using namespace mtl;
00031
00038 class u2d_Problem {
00039 public:
00040
00041
00042
00043 virtual void addTerm(int i, int j, double val) = 0;
00044 virtual void setTerm(int i, int j, double val) = 0;
00045 virtual int getSize() = 0;
00046 virtual void addRHSTerm(int i, double val) = 0;
00047 virtual void setRHSTerm(int i, double val) = 0;
00048 };
00049
00056 template <typename Matrix>
00057 class u2d_LinearProblem : public u2d_Problem {
00058 public:
00059 u2d_LinearProblem(int _size);
00060 u2d_LinearProblem(const u2d_LinearProblem& orig);
00061 virtual ~u2d_LinearProblem();
00062 void addTerm(int i, int j, double val);
00063 void setTerm(int i, int j, double val);
00064 void addRHSTerm(int i, double val);
00065 void setRHSTerm(int i, double val);
00066 int getSize();
00067
00068
00069 Matrix A;
00070 dense_vector b;
00071
00072
00073 matrix::inserter<Matrix> setter;
00074 matrix::inserter<Matrix, update_plus<double> > adder;
00075 private:
00076
00077 int size;
00078
00079 };
00080
00081 template <typename Matrix>
00082 void u2d_LinearProblem<Matrix>::setTerm(int i, int j, double val) {
00083
00084
00085 setter[i][j] << val;
00086
00087 }
00088
00089 template <typename Matrix>
00090 void u2d_LinearProblem<Matrix>::addTerm(int i, int j, double val) {
00091
00092
00093 adder[i][j] << val;
00094
00095 }
00096
00097 template <typename Matrix>
00098 void u2d_LinearProblem<Matrix>::setRHSTerm(int i, double val) {
00099
00100
00101 b[i] = val;
00102 }
00103
00104 template <typename Matrix>
00105 void u2d_LinearProblem<Matrix>::addRHSTerm(int i, double val) {
00106
00107
00108 b[i] += val;
00109 }
00110
00111 template <typename Matrix>
00112 u2d_LinearProblem<Matrix>::u2d_LinearProblem(int _size) :
00113 size(_size),
00114 A(_size, _size),
00115 b(_size),
00116 setter(A),
00117 adder(A) {
00118
00119 }
00120
00121 template <typename Matrix>
00122 u2d_LinearProblem<Matrix>::u2d_LinearProblem(const u2d_LinearProblem& orig) {
00123 }
00124
00125 template <typename Matrix>
00126 u2d_LinearProblem<Matrix>::~u2d_LinearProblem() {
00127 }
00128
00129 template <typename Matrix>
00130 int u2d_LinearProblem<Matrix>::getSize() {
00131 return size;
00132 }
00133
00134 #endif
00135