sphere_quad, a C++ code which estimates the integral of a scalar function F(X,Y,Z) over the surface of the unit sphere centered at the origin.
The code includes one function, SPHERE01_QUAD_MC, which estimates the integral using a Monte Carlo approach. It randomly samples points on the surface, and estimates the integral as the average of these values times the area of the surface.
The code includes three functions based on the idea of a latitudinal/longitudinal grid: SPHERE01_QUAD_LLC, SPHERE01_QUAD_LLV and SPHERE01_QUAD_LLM. The surface of the sphere is divided into rectangles whose sides are always lines of latitude or longitude. Each rectangle is then split diagonally into a pair of triangles (except for the degenerate rectangles that include the north or south pole as a vertex.)
The user controls the accuracy of the integral estimate by specifying a maximum side length H. The functions determine angular increments that guarantee the size restriction. Of course, this means that the restriction on latitude, enforced at the equator, will result in excessively small triangles away from the equator. That is a penalty of using this simple subdivision scheme.
The code includes three functions based on the idea of first subdividing the surface into 20 congruent spherical triangles, based on the projection of a regular icosahedron. The functions SPHERE01_QUAD_ICOS1C, SPHERE01_QUAD_ICOS1V and SPHERE01_QUAD_ICOS1M use this idea, along with subdivision.
The function SPHERE01_QUAD_ICOS2V is similar to SPHERE01_QUAD_ICOS1V but uses a more sophisticated algorithm to project points from the planar triangle to the unit sphere. However, the modifications seem to make little difference to the resulting integral estimate.
The computer code and data files described and made available on this web page are distributed under the MIT license
sphere_quad is available in a C version and a C++ version and a FORTRAN90 version and a MATLAB version.
RANDOM_DATA, a C++ code which generates sample points for various probability distributions, spatial dimensions, and geometries;
SPHERE_EXACTNESS, a C++ code which tests the polynomial exactness of a quadrature rule for the unit sphere;
SPHERE_GRID, a C++ code which provides a number of ways of generating grids of points, or of points and lines, or of points and lines and faces, over the unit sphere.
SPHERE_LEBEDEV_RULE, a C++ code which computes Lebedev quadrature rules for the unit sphere;
SPHERE_MONTE_CARLO, a C++ code which applies a Monte Carlo method to estimate the integral of a function over the surface of the unit sphere in 3D;
SPHERE_TRIANGLE_QUAD, a C++ code which estimates the integral of a function over a spherical triangle.
STROUD, a C++ code which approximates the integral of a function on the surface or in the interior of a variety of geometric shapes.