00001 #ifndef QUADREFERENCECELL_H
00002 #define QUADREFERENCECELL_H
00003
00004 #include "SundanceDefs.h"
00005
00006 #include "ReferenceCellBase.h"
00007 #include "ReferenceCell.h"
00008 #include "QuadFacetSet.h"
00009
00010
00011 namespace Sundance
00012 {
00013
00014 using namespace TSF;
00015 using std::string;
00016
00017 using std::ostream;
00018
00019
00020
00021
00022
00023 class QuadReferenceCell : public ReferenceCellBase
00024 {
00025 public:
00026
00027 QuadReferenceCell();
00028
00029 virtual ~QuadReferenceCell(){;}
00030
00031
00032 virtual const string& typeName() const {return typeName_;}
00033
00034 virtual CellTopologyCode topologyCode() const {return QuadCell;}
00035
00036
00037 virtual int dim() const {return 2;}
00038
00039 virtual int numNodes() const {return 4;}
00040
00041 virtual int numVertices() const {return 4;}
00042
00043 virtual int numFacets(int d) const ;
00044
00045
00046
00047 virtual const TSFArray<TSFArray<int> >& facetNodePtrs(int facetDim) const ;
00048
00049 virtual const ReferenceCell& facetReferenceCell(int facetDim,
00050 int facetNumber) const ;
00051
00052 virtual const TSFArray<TSFArray<int> >& facetFacetPtrs(int cellDim,
00053 int facetNumber) const ;
00054
00055 virtual FacetSetBase* newFacetSet() const {return new QuadFacetSet();}
00056
00057
00058
00059 virtual void jacobian(const Cell& cell,
00060 const TSFArray<Point>& refpts,
00061 TSFArray<CellJacobian>& J) const ;
00062
00063
00064 virtual void detJacobian(const Cell& cell,
00065 const TSFArray<Point>& refpts,
00066 TSFArray<double>& detJ) const ;
00067
00068
00069
00070 virtual void constantJacobian(const Cell& cell,
00071 CellJacobian& J) const ;
00072
00073
00074
00075 virtual void constantDetJacobian(const Cell& cell,
00076 double& detJ) const ;
00077
00078
00079 virtual void pushFwd(const Cell& cell,
00080 const TSFArray<Point>& ref,
00081 TSFArray<Point>& phys) const ;
00082
00083
00084
00085 virtual void pullBack(const Cell& cell,
00086 const TSFArray<Point>& phys,
00087 TSFArray<Point>& ref) const ;
00088
00089
00090 virtual double diameter(const Cell& cell) const ;
00091
00092 friend class AffineLineReferenceCell;
00093 private:
00094
00095 void initFacets();
00096
00097 static string typeName_;
00098 static ReferenceCell pointFacetReferenceCell_;
00099 static ReferenceCell lineFacetReferenceCell_;
00100 static TSFArray<TSFArray<TSFArray<int> > > facetNodePtrs_;
00101 static TSFArray<TSFArray<TSFArray<int> > > facetFacetPtrs_;
00102 };
00103
00104 }
00105 #endif
00106
00107
00108
00109