NGSolve
4.9
|
00001 #ifndef VECTOR_FACET_FESPACE_HPP 00002 #define VECTOR_FACET_FESPACE_HPP 00003 00004 /*********************************************************************/ 00005 /* File: vectorfacetfespace.hpp */ 00006 /* Author: A. Sinwel, Joachim Schoeberl */ 00007 /* Date: 2008 */ 00008 /*********************************************************************/ 00009 00010 00011 00012 namespace ngcomp 00013 { 00014 00015 class NGS_DLL_HEADER VectorFacetFESpace : public FESpace 00016 { 00017 protected: 00019 int level; 00021 int nfacets; 00023 int ncfacets; 00025 int nel; 00026 00027 Array<int> first_facet_dof; 00028 Array<int> first_inner_dof; // for highest_order_dc 00029 int ndof_lo; 00030 00031 int rel_order; 00032 00033 Array<INT<2> > order_facet; 00034 Array<bool> fine_facet; 00035 00036 int ndof; 00037 Array<int> ndlevel; 00038 bool var_order; 00039 bool print; 00040 00041 bool highest_order_dc; 00042 00043 public: 00045 VectorFacetFESpace ( const MeshAccess & ama, const Flags & flags, 00046 bool parseflags = false ); 00047 00048 virtual ~VectorFacetFESpace () 00049 { ; } 00050 00051 // static FESpace * Create ( const MeshAccess & ma, const Flags & flags ); 00052 00053 virtual string GetClassName () const 00054 { 00055 return "VectorFacetFESpace"; 00056 } 00057 00058 virtual void Update(LocalHeap& lh); 00059 virtual void UpdateCouplingDofArray(); 00060 virtual int GetNDof() const { return ndof; } 00061 00062 virtual int GetNDofLevel ( int i ) const { return ndlevel[i]; } 00063 00064 virtual int GetNDofLowOrder () const 00065 { return ndof_lo; } 00066 00067 virtual const FiniteElement & GetFE ( int elnr, LocalHeap & lh ) const; 00068 virtual const FiniteElement & GetSFE ( int selnr, LocalHeap & lh ) const; 00069 00070 virtual void GetFacetDofNrs ( int felnr, Array<int> & dnums ) const; 00071 00072 virtual int GetNFacetDofs ( int felnr ) const; 00073 00074 virtual void GetDofNrs ( int elnr, Array<int> & dnums ) const; 00075 00076 virtual void GetSDofNrs (int selnr, Array<int> & dnums) const; 00078 virtual Table<int> * CreateSmoothingBlocks (const Flags & precflags) const; 00080 virtual Array<int> * CreateDirectSolverClusters (const Flags & precflags) const; 00081 00082 // some utility functions for convenience 00084 virtual void GetVertexNumbers(int elnr, Array<int>& vnums) const; 00086 virtual INT<2> GetFacetOrder(int fnr) const; 00087 00088 virtual int GetFirstFacetDof(int fanr) const; 00089 00090 virtual bool UsesHighestOrderDiscontinuous() const {return highest_order_dc;}; 00091 00092 virtual void GetVertexDofNrs ( int elnum, Array<int> & dnums ) const; 00093 virtual void GetEdgeDofNrs ( int elnum, Array<int> & dnums ) const; 00094 virtual void GetFaceDofNrs (int felnr, Array<int> & dnums) const; 00095 virtual void GetInnerDofNrs (int felnr, Array<int> & dnums) const; 00096 }; 00097 00098 } 00099 00100 #endif 00101