00001 00005 class MatVecContribFD 00006 00007 { 00008 public: 00009 int node_no; 00010 int curr_node_dof; 00011 int ndofs; 00012 00013 Handle(DegFreeFD) dof; 00014 00015 Handle(VecSimpleH(VecSimple(NUMT))) alg_coeffs; 00016 Handle(VecSimpleH(VecSimple(int))) alg_pattern; 00017 00018 00019 private: 00020 void modify (int i, NUMT v); 00021 00022 public: 00023 MatVecContribFD (); 00024 void attach (DegFreeFD& dof); 00025 void detach () { dof.detach(); } 00026 00027 MatVecContribFD (DegFreeFD& dof); 00028 ~MatVecContribFD (); 00029 00030 00031 bool refill (int node_idx, int curr_dof, Stencil& stencil); 00032 bool refill (int glob_eqn); 00033 00034 void fill (const MatVecContribFD& contrib); 00035 00036 00037 void scaleContrib (StencilUnion& stencil); 00038 00039 void insertAlgebraicDofs (int idx_base); 00040 void insertAlgebraicEqn (); 00041 00042 DegFreeFD& getDegFreeFD () { return dof(); } 00043 00044 Mat(NUMT) A; 00045 Vec(NUMT) b; 00046 VecSimple(int) loc2glob_row; 00047 VecSimple(int) loc2glob_col; 00048 Vec(NUMT) b_mod; 00049 00050 void enforceEssBC (); 00051 00052 bool ok () const; 00053 void print (Os os, int help = 1) const; 00054 00055 00056 00057 COPY_CONSTRUCTOR(MatVecContribFD); 00058 ASSIGNMENT_OPERATOR(MatVecContribFD); 00059 }; 00060 00061