00001 #ifndef OBJECT_H 00002 #define OBJECT_H 00003 00008 #include <string> 00009 #include <stdexcept> 00010 #include <vector> 00011 #include <boost/numeric/ublas/matrix.hpp> 00012 #include <boost/numeric/ublas/vector.hpp> 00013 #include "dynamic/element.h" 00014 namespace dynamic 00015 { 00020 class Object : public Element 00021 { 00025 static double Q(Object* p_object); 00029 double (*m_pQ)(Object*); 00030 protected: 00034 boost::numeric::ublas::matrix<double> m_A; 00038 boost::numeric::ublas::matrix<double> m_B; 00042 boost::numeric::ublas::matrix<double> m_C; 00046 boost::numeric::ublas::matrix<double> m_D; 00050 boost::numeric::ublas::vector<double> m_u; 00054 boost::numeric::ublas::vector<double> m_x; 00058 boost::numeric::ublas::vector<double> m_absolut_x; 00062 boost::numeric::ublas::vector<double> m_dx; 00066 boost::numeric::ublas::vector<double> m_absolut_dx; 00071 static double bezier_value(double p, double a0, double a1, double a2, double a3); 00075 virtual void set_boundary_conditions(){}; 00079 virtual void set_elements() {}; 00083 virtual double set_absolut_x(int position,double value) {return 0;}; 00087 virtual double set_absolut_dx(int position,double value) {return 0;}; 00088 public: 00090 Object(); 00092 ~Object(); 00093 friend class System; 00094 friend class Serial; 00095 friend class Parallel; 00099 static Property<double> time; 00103 static Property<double> time_delta; 00107 void load(double(*pQ)(Object*)); 00111 double load(); 00115 virtual void calculation_const() throw(std::runtime_error,std::invalid_argument) 00116 { 00117 std::cout << "Object calculation_const" << std::endl; 00118 }; 00122 virtual void calculation() throw(std::runtime_error,std::invalid_argument){}; 00127 virtual unsigned matrix_rows(); 00132 virtual unsigned elements(); 00133 }; 00134 } 00135 #endif //OBJECT_H