diff --git a/previews/PR124/.documenter-siteinfo.json b/previews/PR124/.documenter-siteinfo.json
index d4050c2e..7ca93f00 100644
--- a/previews/PR124/.documenter-siteinfo.json
+++ b/previews/PR124/.documenter-siteinfo.json
@@ -1 +1 @@
-{"documenter":{"julia_version":"1.9.4","generation_timestamp":"2024-10-27T16:02:53","documenter_version":"1.7.0"}}
\ No newline at end of file
+{"documenter":{"julia_version":"1.9.4","generation_timestamp":"2024-10-27T16:11:34","documenter_version":"1.7.0"}}
\ No newline at end of file
diff --git a/previews/PR124/api/index.html b/previews/PR124/api/index.html
index 1bc8a537..78217a8a 100644
--- a/previews/PR124/api/index.html
+++ b/previews/PR124/api/index.html
@@ -1,3 +1,3 @@
-
Numerically integrate a given function f(::Point) over the domain defined by a geometry using a particular numerical integration rule with floating point precision of type FP.
Arguments
f: an integrand function with a method f(::Meshes.Point)
geometry: some Meshes.Geometry that defines the integration domain
rule: optionally, the IntegrationRule used for integration (by default GaussKronrod() in 1D and HAdaptiveCubature() else)
FP: optionally, the floating point precision desired (Float64 by default)
Note that reducing FP below Float64 will incur some loss of precision. By contrast, increasing FP to e.g. BigFloat will typically increase precision (at the expense of longer runtimes).
Like integral but integrates along the domain defined a curve. By default this uses Horner's method to improve performance when parameterizing the curve at the expense of a small loss of precision. Additional accuracy can be obtained by specifying the use of DeCasteljau's algorithm instead with alg=Meshes.DeCasteljau() but can come at a steep cost in memory allocations, especially for curves with a large number of control points.
Like integral but integrates over the surface of a triangle using nested Gauss-Kronrod quadrature rules along each barycentric dimension of the triangle.
Like integral but integrates over the surface of a triangle by transforming the triangle into a polar-barycentric coordinate system and using a Gauss-Legendre quadrature rule along each barycentric dimension of the triangle.
Like integral but integrates over the surface of a triangle by transforming the triangle into a polar-barycentric coordinate system and using an h-adaptive cubature rule.
Numerically integrate a given function f(::Point) along a line-like geometry using a particular numerical integration rule with floating point precision of type FP.
Numerically integrate a given function f(::Point) along a surface geometry using a particular numerical integration rule with floating point precision of type FP.
Numerically integrate a given function f(::Point) throughout a volumetric geometry using a particular numerical integration rule with floating point precision of type FP.
The h-adaptive Gauss-Kronrod quadrature rule implemented by QuadGK.jl. All standard QuadGK.quadgk keyword arguments are supported. This rule works natively for one dimensional geometries; some two- and three-dimensional geometries are additionally supported using nested integral solvers with the specified kwarg settings.
An n'th-order Gauss-Legendre quadrature rule. Nodes and weights are efficiently calculated using FastGaussQuadrature.jl.
So long as the integrand function can be well-approximated by a polynomial of order 2n-1, this method should yield results with 16-digit accuracy in O(n) time. If the function is know to have some periodic content, then n should (at a minimum) be greater than the expected number of periods over the geometry, e.g. length(geometry)/λ.
Numerically integrate a given function f(::Point) over the domain defined by a geometry using a particular numerical integration rule with floating point precision of type FP.
Arguments
f: an integrand function with a method f(::Meshes.Point)
geometry: some Meshes.Geometry that defines the integration domain
rule: optionally, the IntegrationRule used for integration (by default GaussKronrod() in 1D and HAdaptiveCubature() else)
FP: optionally, the floating point precision desired (Float64 by default)
Note that reducing FP below Float64 will incur some loss of precision. By contrast, increasing FP to e.g. BigFloat will typically increase precision (at the expense of longer runtimes).
Like integral but integrates along the domain defined a curve. By default this uses Horner's method to improve performance when parameterizing the curve at the expense of a small loss of precision. Additional accuracy can be obtained by specifying the use of DeCasteljau's algorithm instead with alg=Meshes.DeCasteljau() but can come at a steep cost in memory allocations, especially for curves with a large number of control points.
Like integral but integrates over the surface of a triangle using nested Gauss-Kronrod quadrature rules along each barycentric dimension of the triangle.
Like integral but integrates over the surface of a triangle by transforming the triangle into a polar-barycentric coordinate system and using a Gauss-Legendre quadrature rule along each barycentric dimension of the triangle.
Like integral but integrates over the surface of a triangle by transforming the triangle into a polar-barycentric coordinate system and using an h-adaptive cubature rule.
Numerically integrate a given function f(::Point) along a line-like geometry using a particular numerical integration rule with floating point precision of type FP.
Numerically integrate a given function f(::Point) along a surface geometry using a particular numerical integration rule with floating point precision of type FP.
Numerically integrate a given function f(::Point) throughout a volumetric geometry using a particular numerical integration rule with floating point precision of type FP.
The h-adaptive Gauss-Kronrod quadrature rule implemented by QuadGK.jl. All standard QuadGK.quadgk keyword arguments are supported. This rule works natively for one dimensional geometries; some two- and three-dimensional geometries are additionally supported using nested integral solvers with the specified kwarg settings.
An n'th-order Gauss-Legendre quadrature rule. Nodes and weights are efficiently calculated using FastGaussQuadrature.jl.
So long as the integrand function can be well-approximated by a polynomial of order 2n-1, this method should yield results with 16-digit accuracy in O(n) time. If the function is know to have some periodic content, then n should (at a minimum) be greater than the expected number of periods over the geometry, e.g. length(geometry)/λ.
MeshIntegrals.jl is a Julia library that leverages differential forms to implement fast and easy numerical integration of field equations over geometric domains.
Settings
This document was generated with Documenter.jl version 1.7.0 on Sunday 27 October 2024. Using Julia version 1.9.4.
MeshIntegrals.jl is a Julia library that leverages differential forms to implement fast and easy numerical integration of field equations over geometric domains.
Settings
This document was generated with Documenter.jl version 1.7.0 on Sunday 27 October 2024. Using Julia version 1.9.4.
While this library aims to support all possible integration rules and Meshes.jl geometry types, some combinations are ill-suited and some others are simply not yet implemented. The following Support Matrix aims to capture the current development state of all geometry/rule combinations. Entries with a green check mark are fully supported and have passing unit tests that provide some confidence they produce accurate results.
In general, Gauss-Kronrod integration rules are recommended (and the default) for geometries with one parametric dimension, e.g.: Segment, BezierCurve, and Rope. Gauss-Kronrod rules can also be applied to some geometries with more dimensions by nesting multiple integration solves, but this is inefficient. These Gauss-Kronrod rules are supported (but not recommended) for surface-like geometries, but not for volume-like geometries. For geometries with more than one parametric dimension, e.g. surfaces and volumes, H-Adaptive Cubature integration rules are recommended (and the default).
While this library aims to support all possible integration rules and Meshes.jl geometry types, some combinations are ill-suited and some others are simply not yet implemented. The following Support Matrix aims to capture the current development state of all geometry/rule combinations. Entries with a green check mark are fully supported and have passing unit tests that provide some confidence they produce accurate results.
In general, Gauss-Kronrod integration rules are recommended (and the default) for geometries with one parametric dimension, e.g.: Segment, BezierCurve, and Rope. Gauss-Kronrod rules can also be applied to some geometries with more dimensions by nesting multiple integration solves, but this is inefficient. These Gauss-Kronrod rules are supported (but not recommended) for surface-like geometries, but not for volume-like geometries. For geometries with more than one parametric dimension, e.g. surfaces and volumes, H-Adaptive Cubature integration rules are recommended (and the default).
Since the integral domain is a right-triangle in the Barycentric domain, a nested application of Gauss-Kronrod quadrature rules is capable of computing the result, albeit inefficiently. However, many numerical integration methods that require rectangular bounds can not be directly applied.
In order to enable integration methods that operate over rectangular bounds, two coordinate system transformations are applied: the first maps from Barycentric coordinates $(u, v)$ to polar coordinates $(r, \phi)$, and the second is a non-linear map from polar coordinates to a new curvilinear basis $(R, \phi)$.
For the first transformation, let $u = r~\cos\phi$ and $v = r~\sin\phi$ where $\text{d}u~\text{d}v = r~\text{d}r~\text{d}\phi$. The Barycentric triangle's hypotenuse boundary line is described by the function $v(u) = 1 - u$. Substituting in the previous definitions leads to a new boundary line function in polar coordinate space $r(\phi) = 1 / (\sin\phi + \cos\phi)$.
These integral boundaries remain non-rectangular, so an additional transformation will be applied to a curvilinear $(R, \phi)$ space that normalizes all of the hypotenuse boundary line points to $R=1$. To achieve this, a function $R(r,\phi)$ is required such that $R(r_0, \phi) = 1$ where $r_0 = 1 / (\sin\phi + \cos\phi)$
To achieve this, let $R(r, \phi) = r~(\sin\phi + \cos\phi)$. Now, substituting some terms leads to
The second term in this new integrand function serves as a correction factor that corrects for the impact of the non-linear domain transformation. Since all of the integration bounds are now constants, specialized integration methods can be defined for triangles that performs these domain transformations and then solve the new rectangular integration problem using a wider range of solver options.
Settings
This document was generated with Documenter.jl version 1.7.0 on Sunday 27 October 2024. Using Julia version 1.9.4.