00001 00005 class MxFiniteElement : public HandleId 00006 00007 { 00008 VecSimplest(Handle(FiniteElement)) mfe; 00009 VecSimplest(int) distinct_mfe; 00010 int itgrule_manager; 00011 00012 00013 void distinctObjects(); 00014 void checkItgRuleManager (const char* routine_name); 00015 public: 00016 bool special_mapping; 00017 Handle(MxMapping) map; 00018 00019 MxFiniteElement (); 00020 MxFiniteElement (GridFE& grid, int ncomponents); 00021 MxFiniteElement (FieldsFE& all_unknowns); 00022 ~MxFiniteElement () {} 00023 00024 bool redim (GridFE& grid, int ncomponents); 00025 bool redim (FieldsFE& all_unknowns); 00026 00027 const FiniteElement& operator () (int i) const { return mfe(i).getRef(); } 00028 FiniteElement& operator () (int i) { return mfe(i).getRef(); } 00029 int size () const { return mfe.size(); } 00030 int getNoFiniteElementObjects() const { return mfe.size(); } 00031 00032 void refill (int elm_no, FEM* solver = NULL); 00033 void setLocalEvalPts (ElmItgRules& elmitg); 00034 void refill (int elm_no, ElmItgRules& elmitg) 00035 { refill(elm_no); setLocalEvalPts(elmitg); } 00036 void refill4side (int side); 00037 00038 int getNoSpaceDim () const; 00039 int getElmNo () const; 00040 int getNoSides () const; 00041 int getCurrentSide () const; 00042 00043 void evalDerivatives (int i); 00044 void setItgRuleManager (int component); 00045 int getItgRuleManager () { return itgrule_manager; } 00046 int initNumItg (); 00047 bool moreItgPoints (); 00048 void update4nextItgPt (); 00049 void update4nextItgPt (int itg_pt_no); 00050 int getNoItgPts () const; 00051 int getCurrentItgPt () const; 00052 void getGlobalEvalPt (Ptv(real)& glob_pt) const; 00053 void setLocalEvalPt (const Ptv(real)& loc_pt); 00054 00055 real N (int field_no, int basis_no) const; 00056 real dN (int field_no, int basis_no, int deriv_field) const; 00057 real detJ() const; 00058 real detJxW() const; 00059 real detSideJxW() const; 00060 bool boSide (int side, int indno) const; 00061 void getNormalVectorOnSide (Ptv(real)& vec) const; 00062 void errorMsg4detJlt0 (bool onoff); 00063 const Mat(real)& JacobiMatrix () const; 00064 const Mat(real)& invJacobiMatrix () const; 00065 const Mat(real)& geomtNodeCoor () const; 00066 void print (Os os, int degree_of_output = 1); 00067 }; 00068 00069