clenshaw_curtis_grid, a C++ code which sets up a Clenshaw Curtis quadrature rule in multiple dimensions.
Routines are available to look up or compute the weights and abscissas of the 1D rule.
It is easy to generate a Clenshaw Curtis grid of any order N. Of special interest are nested grids, particularly those for which the nesting involves repeated divisions of the interval length by 2. In such a case, the data computed from the previous step can be reused, and the new data allows for an inexpensive estimate of the rate of error decrease. In the 1D case, we can keep track of such a nested sequence of rules by the "level", which, except for the zeroth level, has a simple relationship to the order N:
LEVEL | N | H |
---|---|---|
0 | 1 | 2 |
1 | 3=2+1 | 1 |
2 | 5=4+1 | 1/2 |
3 | 9=8+1 | 1/4 |
4 | 17=16+1 | 1/8 |
5 | 33=32+1 | 1/16 |
The code includes a routine to set the abscissas of a multiple dimension product rule.
The code includes routines which pack into a single array all the abscissas associated with several Clenshaw Curtis grids of abscissas, with the grids selected in one of two ways.
Two selection rules are available.
For the first "MINMAX" selection rule, we define the quantity Q to be the sum of the 1D orders:
Q = sum ( 1 <= I <= DIM_NUM ) ORDER(I)and then select all grids for which
Q_MIN <= Q <= Q_MAX.
For the second "CONSTRAINED" selection rule, we define the quantity Q to be the weighted sum of the 1D orders:
Q = sum ( 1 <= I <= DIM_NUM ) ALPHA(I) * ORDER(I)and we require that the orders be bounded:
ORDER_MIN(I) <= ORDER(I) <= ORDER_MAX(I).and then select all grids for which
Q <= Q_MAX.
The computer code and data files described and made available on this web page are distributed under the MIT license
clenshaw_curtis_grid is available in a C++ version and a FORTRAN90 version and a MATLAB version.
CLENSHAW_CURTIS_RULE a C++ code which defines a Clenshaw Curtis quadrature rule.
FEKETE a C++ code which defines a Fekete rule for quadrature or interpolation over a triangle.
NINT_EXACTNESS a C++ code which demonstrates how to measure the polynomial exactness of a multidimensional quadrature rule.
NINTLIB a C++ code containing a variety of routines for numerical estimation of integrals in multiple dimensions.
PRODUCT_RULE a C++ code which can create a multidimensional quadrature rule as a product of one dimensional rules.
QUADRULE a C++ code which contains quadrature rules.
STROUD a C++ code which contains rules for a variety of unusual areas, surfaces and volumes in 2D, 3D and N-dimensions.
TEST_INT_2D a C++ code which defines test integrands for 2D quadrature rules.
TEST_NINT a C++ code which contains functions that may be used as test integrands for quadrature rules in multiple dimensions.