00001 #ifndef EQUATION_SIMPLEEQUATIONINTERFACE_H
00002 #define EQUATION_SIMPLEEQUATIONINTERFACE_H
00003
00004
00005 #include <fem/FemKernel.hpp>
00006
00007
00008 namespace imaging
00009 {
00105 template<class fem_types_t>
00106 class SimpleEquationInterface
00107 {
00108 public:
00110 typedef fem_types_t fem_types;
00111
00113 typedef ublas::fixed_matrix<float_t, fem_types::data_dimension, fem_types::data_dimension> matrix_coefficient_t;
00114
00116 enum boundary_data_types {
00117 NO_BOUNDARY_DATA ,
00118 IMPLICIT_NEUMANN_DATA ,
00119 NEUMANN_DATA ,
00120 DIRICHLET_DATA ,
00121 MIXED_DATA
00122 };
00123
00125 static const bool a_active = true;
00126
00128 static const bool b_active = true;
00129
00131 static const bool c_active = true;
00132
00134 static const bool f_active = true;
00135
00137 static const bool g_active = true;
00138
00140 static const size_t boundary_data_type;
00141
00146 void stiffness_matrix(std::size_t integrator_node,
00147 const FemKernel<fem_types> & kernel,
00148 matrix_coefficient_t & A,
00149 ublas::fixed_vector<float_t, fem_types::data_dimension> & a,
00150 ublas::fixed_vector<float_t, fem_types::data_dimension> & b,
00151 float_t & c) const;
00152
00153
00158 void force_vector(std::size_t integrator_node,
00159 const FemKernel<fem_types> & kernel,
00160 float_t & f,
00161 ublas::fixed_vector<float_t, fem_types::data_dimension> & g) const;
00162
00167 void stiffness_matrix_at_boundary(std::size_t integrator_node,
00168 const FemKernel<fem_types> & kernel,
00169 float_t & h) const {}
00170
00171
00176 void force_vector_at_boundary(std::size_t integrator_node,
00177 const FemKernel<fem_types> & kernel,
00178 float_t & v) const {}
00179
00186 bool sanity_check_stiffness_matrix(const FemKernel<fem_types> & kernel, std::string & error_message) const { return true; }
00187
00194 bool sanity_check_force_vector(const FemKernel<fem_types> & kernel, std::string & error_message) const { return true; }
00195 };
00196
00197 }
00198
00199 #endif