58 template<
class Scalar,
class ArrayPo
int,
class ArrayWeight>
60 const ArrayPoint& cellVertices,
62 : degree_(degree), cubDimension_(2), cellTopology_(cellTopology), cellVertices_(cellVertices){
65 ">>> ERROR (CubaturePolygon): No direct cubature rule implemented for the desired polynomial degree.");
68 std::vector<Scalar> centroid(2,0);
71 for (
int i=0;i<numNodes;i++){
79 centroid[0] /= (6*area);
80 centroid[1] /= (6*area);
90 cubatureTri.
getCubature(cubatureTriPoints,cubatureTriWeights);
95 for (
int k=0;k<numCells;k++){
96 for (
int i=0;i<numCubPointsPerTri;i++){
97 for (
int j=0;j<cubDim;j++){
98 cubatureCellPoints(k,i,j) = cubatureTriPoints(i,j);
105 shards::CellTopology triangleTopology(shards::getCellTopologyData<shards::Triangle<3> >());
106 int totalCubPoints = numCubPointsPerTri*
cellTopology_.getEdgeCount();
114 for (
int i=0;i<numCells;i++){
115 for (
int j=0;j<cubDim;j++){
118 trianglePoints(i,2,j) = centroid[j];
131 for (
int i=0;i<numCells;i++){
132 for (
int j=0;j<numCubPointsPerTri;j++){
133 for (
int k=0;k<cubDim;k++){
142 template<
class Scalar,
class ArrayPo
int,
class ArrayWeight>
144 ArrayWeight& cubWeights)
const{
145 int numCubPoints = numPoints_;
146 int cellDim = cubDimension_;
148 TEUCHOS_TEST_FOR_EXCEPTION ( ( cubPoints.size() < numCubPoints*cellDim || cubWeights.size() < numCubPoints ),
150 ">>> ERROR (CubaturePolygon): Insufficient space allocated for cubature points or weights.");
152 for (
int pointId = 0; pointId < numCubPoints; pointId++){
153 for (
int dim = 0; dim < cellDim; dim++){
154 cubPoints(pointId,dim) = cubaturePoints_(pointId,dim);
156 cubWeights(pointId) = cubatureWeights_(pointId);
160 template<
class Scalar,
class ArrayPo
int,
class ArrayWeight>
162 ArrayWeight& cubWeights,
163 ArrayPoint& cellCoords)
const 165 TEUCHOS_TEST_FOR_EXCEPTION( (
true), std::logic_error,
166 ">>> ERROR (CubaturePolygon): Cubature defined in reference space calling method for physical space cubature.");
171 template<
class Scalar,
class ArrayPo
int,
class ArrayWeight>
176 template<
class Scalar,
class ArrayPo
int,
class ArrayWeight>
178 return cubDimension_;
181 template<
class Scalar,
class ArrayPo
int,
class ArrayWeight>
183 accuracy.assign(1,degree_);
int cubDimension_
Dimension of integration domain.
void getAccuracy(std::vector< int > &accuracy) const
Returns max. degree of polynomials that are integrated exactly on each triangle. The return vector ha...
virtual int getDimension() const
Returns dimension of integration domain.
Header file for utility class to provide multidimensional containers.
#define INTREPID_CUBATURE_TRI_DEFAULT_MAX
The maximum degree of the polynomial that can be integrated exactly by a direct triangle rule of the ...
int getDimension() const
Returns dimension of integration domain.
int getNumPoints() const
Returns the number of cubature points.
shards::CellTopology cellTopology_
The topology of the polygon.
int degree_
The degree of the polynomials that are integrated exactly on each triangle.
FieldContainer< Scalar > cubatureWeights_
Local copy of cubature weights.
FieldContainer< Scalar > cubaturePoints_
Local copy of cubature points.
Header file for the Intrepid::CubatureDirectTriDefault class.
virtual void getCubature(ArrayPoint &cubPoints, ArrayWeight &cubWeights) const
Returns cubature points and weights (return arrays must be pre-sized/pre-allocated).
void resize(const int dim0)
Resizes FieldContainer to a rank-1 container with the specified dimension, initialized by 0...
Defines direct integration rules on a triangle.
virtual int getNumPoints() const
Returns the number of cubature points.
CubaturePolygon(const shards::CellTopology &cellTopology, const ArrayPoint &cellVertices, int degree)
int numPoints_
The number of cubature points.
ArrayPoint cellVertices_
The vertices of the polygon.
void getCubature(ArrayPoint &cubPoints, ArrayWeight &cubWeights) const
Returns cubature points and weights (return arrays must be pre-sized/pre-allocated).