NGSolve
4.9
|
00001 #ifndef FILE_L2HOFESPACE 00002 #define FILE_L2HOFESPACE 00003 00004 /*********************************************************************/ 00005 /* File: l2hofespace.hpp */ 00006 /* Author: Start */ 00007 /* Date: 23.Feb. 2003 */ 00008 /*********************************************************************/ 00009 00010 namespace ngcomp 00011 { 00012 00017 class NGS_DLL_HEADER L2HighOrderFESpace : public FESpace 00018 { 00019 protected: 00020 // Number of Elements 00021 int nel; 00022 // Degrees of Freedom 00023 int ndof; 00024 // Levels 00025 Array<int> ndlevel; 00026 // if order is relative to mesh order 00027 bool var_order; 00028 // variable order is set to mesh_order + rel_order 00029 int rel_order; 00030 // order of elements 00031 Array<INT<3> > order_inner; 00032 // table of first element dofnumber 00033 Array<int> first_element_dof; 00034 bool all_dofs_together; 00035 public: 00036 00037 L2HighOrderFESpace (const MeshAccess & ama, const Flags & flags, bool parseflags=false); 00039 virtual ~L2HighOrderFESpace (); 00040 // Create if order=0 ElementFESpace Constructor, else L2HOFE 00041 static FESpace * Create (const MeshAccess & ma, const Flags & flags); 00042 // Creates also for order=0 a L2HighOrderFESpace 00043 static FESpace * CreateHO (const MeshAccess & ma, const Flags & flags) 00044 { 00045 return new L2HighOrderFESpace (ma, flags, true); 00046 } 00047 00048 virtual string GetClassName () const 00049 { 00050 return "L2HighOrderFESpace"; 00051 } 00052 00053 bool AllDofsTogether(){return all_dofs_together;}; 00055 virtual void Update(LocalHeap & lh); 00057 virtual void UpdateDofTables(); 00059 virtual void UpdateCouplingDofArray(); 00061 virtual int GetNDof () const; 00063 virtual int GetNDofLevel (int level) const; 00065 virtual const FiniteElement & GetFE (int elnr, LocalHeap & lh) const; 00067 virtual const FiniteElement & GetSFE (int elnr, LocalHeap & lh) const; 00070 virtual const FiniteElement & GetFacetFE (int fnr, LocalHeap & lh) const; 00071 00072 virtual void GetDofNrs (int elnr, Array<int> & dnums) const; 00074 virtual void GetSDofNrs (int selnr, Array<int> & dnums) const; 00076 virtual Table<int> * CreateSmoothingBlocks (const Flags & precflags) const; 00078 00079 virtual void GetVertexDofNrs (int vnr, Array<int> & dnums) const; 00080 virtual void GetEdgeDofNrs (int ednr, Array<int> & dnums) const; 00081 virtual void GetFaceDofNrs (int fanr, Array<int> & dnums) const; 00082 virtual void GetInnerDofNrs (int elnr, Array<int> & dnums) const; 00083 00084 00085 IntRange GetElementDofs (int nr) const 00086 { 00087 return IntRange (first_element_dof[nr], 00088 first_element_dof[nr+1]); 00089 } 00090 00091 /* 00092 int GetFirstInnerDof(int elnr) const 00093 { return (first_element_dof[elnr]); } 00094 00095 00096 virtual int GetNElemDofs(int elnr) const 00097 { return(first_element_dof[elnr+1] - first_element_dof[elnr]+1); } 00098 */ 00099 }; 00100 00101 00102 00103 00104 00105 00106 00107 00108 00109 00110 00111 00112 class NGS_DLL_HEADER L2SurfaceHighOrderFESpace : public FESpace 00113 { 00114 protected: 00115 00116 // Level 00117 int level; 00118 00119 // Number of Elements 00120 int nel; 00121 00122 Array<int> first_element_dof; 00123 int ndof; 00124 00125 00126 // if order is relative to mesh order 00127 bool var_order; 00128 // variable order is set to mesh_order + rel_order 00129 int rel_order; 00130 // order of elements 00131 Array<INT<3> > order_cell; 00132 00133 public: 00134 00135 L2SurfaceHighOrderFESpace (const MeshAccess & ama, const Flags & flags, bool parseflags=false); 00137 virtual ~L2SurfaceHighOrderFESpace (); 00138 00139 static FESpace * Create (const MeshAccess & ma, const Flags & flags); 00140 00141 virtual string GetClassName () const 00142 { 00143 return "L2SurfaceHighOrderFESpace"; 00144 } 00145 00147 virtual void Update(LocalHeap & lh); 00149 //virtual void UpdateDofTables(); 00151 virtual int GetNDof () const; 00153 virtual const FiniteElement & GetFE (int elnr, LocalHeap & lh) const; 00155 virtual const FiniteElement & GetSFE (int elnr, LocalHeap & lh) const; 00157 virtual void GetDofNrs (int elnr, Array<int> & dnums) const; 00159 virtual void GetSDofNrs (int selnr, Array<int> & dnums) const; 00160 00161 virtual Table<int> * CreateSmoothingBlocks ( int type = 0) const; 00162 00164 virtual void GetInnerDofNrs (int elnr, Array<int> & dnums) const; 00165 virtual void GetVertexDofNrs (int vnr, Array<int> & dnums) const; 00166 virtual void GetEdgeDofNrs (int ednr, Array<int> & dnums) const; 00167 virtual void GetFaceDofNrs (int fanr, Array<int> & dnums) const; 00168 00169 virtual bool VarOrder() const { return var_order; } 00170 virtual int GetRelOrder() const { return rel_order; } 00171 00172 }; 00173 00174 } 00175 00176 #endif 00177