NGSolve  4.9
comp/vectorfacetfespace.hpp
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