00001 00005 class AlgebraicContribs: public HandleId 00006 00007 { 00008 private: 00009 00010 VecSimple(AlgebraicEquation) equations; 00011 VecSimple(AlgebraicCoupling) couplings; 00012 00013 int cnt_equations; 00014 int cnt_couplings; 00015 00016 int row_base; 00017 int col_base; 00018 00019 00020 DegFreeFD* dof; 00021 00022 00023 bool is_assembled; 00024 int nnz; 00025 00026 Handle(VecSimpleH(VecSimple(NUMT))) alg_coeffs; 00027 Handle(VecSimpleH(VecSimple(int))) alg_pattern; 00028 00029 Handle(Vec(NUMT)) b_mod; 00030 00031 void connect (const DegFreeFD& dof_); 00032 00033 public : 00034 00035 AlgebraicContribs (const DegFreeFD& dof_); 00036 AlgebraicContribs (const AlgebraicContribs& alg_contribs); 00037 AlgebraicContribs (int no_algdofs, 00038 const DegFreeFD& dof_); 00039 AlgebraicContribs (int no_equations, 00040 int no_couplings, 00041 const DegFreeFD& dof_); 00042 AlgebraicContribs (VecSimple(AlgebraicEquation) equations_, 00043 VecSimple(AlgebraicCoupling) couplings_, 00044 const DegFreeFD& dof_); 00045 00046 virtual ~AlgebraicContribs () {} 00047 00048 AlgebraicContribs& operator= (const AlgebraicContribs& alg_contribs); 00049 00050 00051 bool redim (int no_algdofs); 00052 bool redim (int no_equations, int no_couplings); 00053 bool redim (VecSimple(AlgebraicEquation) equations_, 00054 VecSimple(AlgebraicCoupling) couplings_); 00055 00056 void update (); 00057 void reset (); 00058 00059 void grow (int neqns, int ndofs); 00060 void grow (int n); 00061 00062 int getNoEquations () const; 00063 int getNoCouplings () const; 00064 void size (int& neqns, int& ndofs) const; 00065 00066 int loc2globEqn (int loc_eqn) const; 00067 int glob2locEqn (int glob_eqn) const; 00068 00069 int loc2globDof (int loc_dof) const; 00070 int glob2locDof (int glob_dof) const; 00071 00072 00073 00074 AlgebraicEquation& equation (int loc_eqn); 00075 const AlgebraicEquation& equation (int loc_eqn) const; 00076 00077 AlgebraicCoupling& coupling (int loc_dof); 00078 const AlgebraicCoupling& coupling (int loc_dof) const; 00079 00080 void fill (VecSimple(AlgebraicEquation) equations_, 00081 VecSimple(AlgebraicCoupling) couplings_); 00082 00083 void insertEquation (int loc_eqn, NUMT coeff, int glob_dof); 00084 void insertEquation (int loc_eqn, const VecSimple(NUMT)& coeffs, 00085 const VecSimple(int)& glob_dofs); 00086 00087 00088 void insertCoupling (int loc_dof, NUMT coeff, int glob_eqn); 00089 void insertCoupling (int loc_dof, const VecSimple(NUMT)& coeffs, 00090 const VecSimple(int)& glob_eqns); 00091 00092 00093 00094 00095 void insertEquation (NUMT coeff, int glob_dof); 00096 void insertEquation (const VecSimple(NUMT)& coeffs, 00097 const VecSimple(int)& glob_dofs); 00098 00099 00100 void insertCoupling (NUMT coeff, int glob_eqn); 00101 void insertCoupling (const VecSimple(NUMT)& coeffs, 00102 const VecSimple(int)& glob_eqns); 00103 00104 00105 00106 int assemble (); 00107 bool isAssembled (); 00108 const VecSimpleH(VecSimple(NUMT))* getCoeffs () const; 00109 const VecSimpleH(VecSimple(int))* getPattern () const; 00110 00111 00112 void insertRHS (const Vec(NUMT)& b_mod_, bool allocate = false); 00113 00114 virtual void print (Os os) const; 00115 virtual void scan (Is is); 00116 00117 CLASS_INFO 00118 00119 friend class FDM; 00120 }; 00121 00122