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