00001 00005 class SystemCollector : public HandleId 00006 00007 { 00008 private: 00009 bool modify_mat_due2essBC; 00010 bool modify_vec_due2essBC; 00011 bool symm_mod_due2essBC; 00012 bool unit_mat_diagonal_due2essBC; 00013 bool keep_dof_due2essBC; 00014 00015 Handle(MxElmMatVec) elm_mats; 00016 MatSimplest(Handle(MxElmMatVecCalc)) mxelmcalcs; 00017 MatSimplest(Handle(MxIntegrandCalc)) mxintcalcs; 00018 MatSimplest(bool) attached_integ; 00019 VecSimplest(Handle(DegFreeFE)) idofs; 00020 VecSimplest(Handle(DegFreeFE)) jdofs; 00021 MxFEM* fem; 00022 int nrows, ncols; 00023 00024 00025 void modify(int i, int k, NUMT v); 00026 00027 public: 00028 SystemCollector() {} 00029 ~SystemCollector(); 00030 00031 void redim(int i, int j); 00032 00033 void attach(MxElmMatVecCalc& elm, int i , int j); 00034 00035 void attach(MxElmMatVecCalc& elm); 00036 00037 void attach(MxIntegrandCalc& in, int i , int j); 00038 00039 void attach(DegFreeFE& dof, int i, bool col); 00040 00041 void attach(MxFEM* fem_); 00042 00043 void attach(MxElmMatVec& elm_mats_); 00044 00045 MxElmMatVecCalc& getMxElmMatVecCalc(int i, int j) 00046 { return mxelmcalcs(i,j).getRef(); } 00047 00048 MxIntegrandCalc& getMxIntegrandCalc(int i, int j) 00049 { return mxintcalcs(i,j).getRef(); } 00050 00051 DegFreeFE& getDegFreeFE (int i, bool rows=true); 00052 00053 void calcElmMatVec(int e , MxFiniteElement& mfe, 00054 MxElmMatVec& elmcoll,MxFEM* fem_); 00055 00056 void enforceEssBC(); 00057 00058 int getNrows () { return nrows; } 00059 int getNcols () { return ncols; } 00060 00061 void print (Os os, int level=1); 00062 bool ok(); 00063 }; 00064 00065