55 TEUCHOS_TEST_FOR_EXCEPTION((degree < 0),std::out_of_range,
56 ">>> ERROR (Quadrature): No rule implemented for desired polynomial degree.");
60 int numPoints = (degree+1)/2+1;
68 int l = 0, o = (degree-0.5)/1.5;
69 for (
int i=0; i<8; i++) {
70 l = (int)pow(2.0,(
double)i+1.0)-1;
78 int o_ghk[8] = {1,3,9,19,35,37,41,43};
79 int o = (degree-0.5)/1.5;
80 for (
int i=0; i<8; i++) {
88 std::vector<Real> points(numPoints),
weights(numPoints);
91 ROLBurkardtRules::chebyshev1_compute<Real>(numPoints,&points[0],&weights[0]);
break;
93 ROLBurkardtRules::chebyshev2_compute<Real>(numPoints,&points[0],&weights[0]);
break;
95 ROLBurkardtRules::clenshaw_curtis_compute<Real>(numPoints,&points[0],&weights[0]);
break;
97 ROLBurkardtRules::fejer2_compute<Real>(numPoints,&points[0],&weights[0]);
break;
99 ROLBurkardtRules::legendre_compute<Real>(numPoints,&points[0],&weights[0]);
break;
101 ROLBurkardtRules::patterson_lookup<Real>(numPoints,&points[0],&weights[0]);
break;
103 ROLBurkardtRules::trapezoidal_compute<Real>(numPoints,&points[0],&weights[0]);
break;
105 ROLBurkardtRules::hermite_compute<Real>(numPoints,&points[0],&weights[0]);
break;
107 ROLBurkardtRules::hermite_genz_keister_lookup<Real>(numPoints,&points[0],&weights[0]);
break;
109 ROLBurkardtRules::laguerre_compute<Real>(numPoints,&points[0],&weights[0]);
break;
111 TEUCHOS_TEST_FOR_EXCEPTION(
true,std::out_of_range,
112 ">>> ERROR (Quadrature): No such 1D quadrature rule.");
break;
117 for (
int i=0; i<numPoints; i++) {
120 for (
int i=0; i<numPoints; i++) {
126 for (
int i=0; i<numPoints; i++) {
127 weights[i] *= sqrt(M_PI);
132 std::vector<Real> point(1,0.0);
133 for (
int i=0; i<numPoints; i++) {
134 point[0] = points[i];
139 template <
class Real>
142 TEUCHOS_TEST_FOR_EXCEPTION((numPoints < 0),std::out_of_range,
143 ">>> ERROR (Quadrature): No rule implemented for desired number of points.");
146 std::vector<Real> points(numPoints),
weights(numPoints);
149 ROLBurkardtRules::chebyshev1_compute<Real>(numPoints,&points[0],&weights[0]);
153 ROLBurkardtRules::chebyshev2_compute<Real>(numPoints,&points[0],&weights[0]);
157 ROLBurkardtRules::clenshaw_curtis_compute<Real>(numPoints,&points[0],&weights[0]);
161 ROLBurkardtRules::fejer2_compute<Real>(numPoints,&points[0],&weights[0]);
165 ROLBurkardtRules::legendre_compute<Real>(numPoints,&points[0],&weights[0]);
168 bool correctNumPoints =
false;
169 for (
int i=0; i<8; i++) {
170 int l = (int)pow(2.0,(
double)i+1.0)-1;
172 correctNumPoints =
true;
176 TEUCHOS_TEST_FOR_EXCEPTION((correctNumPoints==
false),std::out_of_range,
177 ">>> ERROR (Quadrature): Number of points must be numPoints = 1, 3, 7, 15, 31, 63, 127, 255.");
178 Real degree = 1.5*(double)numPoints+0.5;
180 ROLBurkardtRules::patterson_lookup<Real>(numPoints,&points[0],&weights[0]);
184 ROLBurkardtRules::trapezoidal_compute<Real>(numPoints,&points[0],&weights[0]);
188 ROLBurkardtRules::hermite_compute<Real>(numPoints,&points[0],&weights[0]);
191 bool correctNumPoints =
false;
192 int o_ghk[8] = {1,3,9,19,35,37,41,43};
193 for (
int i=0; i<8; i++) {
194 if (o_ghk[i]==numPoints) {
195 correctNumPoints =
true;
199 TEUCHOS_TEST_FOR_EXCEPTION((correctNumPoints==
false),std::out_of_range,
200 ">>> ERROR (Quadrature): Number of points must be numPoints = 1, 3, 9, 35, 37, 41, 43.");
201 Real degree = 1.5*(double)numPoints+0.5;
203 ROLBurkardtRules::hermite_genz_keister_lookup<Real>(numPoints,&points[0],&weights[0]);
207 ROLBurkardtRules::laguerre_compute<Real>(numPoints,&points[0],&weights[0]);
212 for (
int i=0; i<numPoints; i++) {
215 for (
int i=0; i<numPoints; i++) {
221 for (
int i=0; i<numPoints; i++) {
222 weights[i] *= sqrt(M_PI);
227 std::vector<Real> point(1,0.0);
228 for (
int i=0; i<numPoints; i++) {
229 point[0] = points[i];
234 template <
class Real>
237 int size = (int)weights.size();
238 TEUCHOS_TEST_FOR_EXCEPTION(((
int)points.size()!=size),std::out_of_range,
239 ">>> ERROR (Quadrature): Input dimension mismatch.");
240 std::vector<Real> point(1,0.0);
241 for (
int i=0; i<size; i++) {
242 point[0] = points[i];
const double weights[4][5]
EROLBurkardt
Enumeration of integration rules provided by John Burkardt.
void addPointAndWeight(std::vector< Real > point, Real weight, int loc)
Quadrature(int dimension=1)
std::vector< int > accuracy_