Skip to content

Commit

Permalink
build based on 3635a37
Browse files Browse the repository at this point in the history
  • Loading branch information
Documenter.jl committed Nov 29, 2024
1 parent 8ef56de commit e781d46
Show file tree
Hide file tree
Showing 9 changed files with 12 additions and 12 deletions.
2 changes: 1 addition & 1 deletion dev/.documenter-siteinfo.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"documenter":{"julia_version":"1.9.4","generation_timestamp":"2024-11-28T16:37:32","documenter_version":"1.8.0"}}
{"documenter":{"julia_version":"1.9.4","generation_timestamp":"2024-11-29T15:05:21","documenter_version":"1.8.0"}}
8 changes: 4 additions & 4 deletions dev/api/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dev/how_it_works/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@

ball(tρ, tθ, tφ) # for args in range [0, 1], maps to a corresponding Meshes.Point

ball(0, tθ, tφ) == center</code></pre><p>In effect, we can now use the geometry itself as a function that maps from three normalized (<span>$0 \le t \le 1$</span>) arguments to every point on the geometry. For the sake of generalization, let this parametric function be called <span>$g$</span>.</p><p class="math-container">\[\text{g}: (t_1,~t_2,~t_3) ~\mapsto~ \text{Point}\big[ x, ~y, ~z \big] \]</p><h2 id="Differential-Forms"><a class="docs-heading-anchor" href="#Differential-Forms">Differential Forms</a><a id="Differential-Forms-1"></a><a class="docs-heading-anchor-permalink" href="#Differential-Forms" title="Permalink"></a></h2><p>Using differential forms, the general solution for integrating a geometry with three parametric dimensions (<span>$t_1$</span>, <span>$t_2$</span>, and <span>$t_3$</span>) is</p><p class="math-container">\[\iiint f(r̄) ~ \text{d}V = \iiint f(\bar{r}) ~ \bar{\text{d}t_1} \wedge \bar{\text{d}t_2} \wedge \bar{\text{d}t_3}\]</p><p>This resultant differential (volume) element is formed at each point in the integration domain by taking <a href="https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant">the Jacobian</a> of the parametric function.</p><p class="math-container">\[\mathbf{J}_f = \begin{bmatrix} \bar{\text{d}t_1} &amp; \bar{\text{d}t_2} &amp; \bar{\text{d}t_3} \end{bmatrix}\]</p><p>where</p><p class="math-container">\[\bar{\text{d}t_n} = \frac{\partial}{\partial t_n} ~ \text{g}(t_1,~t_2,~t_3)\]</p><p>Each of these partial derivatives is a vector representing the direction that changing each parametric function argument will move the resultant point. The differential element (<span>$E$</span>) size is then calculated using geometric algebra as the magnitude of the exterior product (<span>$\wedge$</span>) of these three vectors.</p><p class="math-container">\[E(t_1,~t_2,~t_3) = \left\| \bar{\text{d}t_1} \wedge \bar{\text{d}t_2} \wedge \bar{\text{d}t_3} \right\|\]</p><p>Finally, we use the parametric function itself, <span>$g$</span>, as a map to all points <span>$\bar{r}$</span> in the integration domain. Since <code>Meshes.Geometry</code> parametric functions all operate on normalized domains, we can now solve any volume integral as simply</p><p class="math-container">\[\int_0^1 \int_0^1 \int_0^1 f\Big(\text{g}\big(t_1,~t_2,~t_3\big)\Big) ~ E(t_1,~t_2,~t_3) ~ \text{d}t_1 ~ \text{d}t_2 ~ \text{d}t_3\]</p><p>This form of integral can be trivially generalized to support <span>$n$</span>-dimensional geometries in a form that enables the use of a wide range of numerical integration libraries.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../usage/">« Example Usage</a><a class="docs-footer-nextpage" href="../specializations/">Specializations »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.8.0 on <span class="colophon-date" title="Thursday 28 November 2024 16:37">Thursday 28 November 2024</span>. Using Julia version 1.9.4.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
ball(0, tθ, tφ) == center</code></pre><p>In effect, we can now use the geometry itself as a function that maps from three normalized (<span>$0 \le t \le 1$</span>) arguments to every point on the geometry. For the sake of generalization, let this parametric function be called <span>$g$</span>.</p><p class="math-container">\[\text{g}: (t_1,~t_2,~t_3) ~\mapsto~ \text{Point}\big[ x, ~y, ~z \big] \]</p><h2 id="Differential-Forms"><a class="docs-heading-anchor" href="#Differential-Forms">Differential Forms</a><a id="Differential-Forms-1"></a><a class="docs-heading-anchor-permalink" href="#Differential-Forms" title="Permalink"></a></h2><p>Using differential forms, the general solution for integrating a geometry with three parametric dimensions (<span>$t_1$</span>, <span>$t_2$</span>, and <span>$t_3$</span>) is</p><p class="math-container">\[\iiint f(r̄) ~ \text{d}V = \iiint f(\bar{r}) ~ \bar{\text{d}t_1} \wedge \bar{\text{d}t_2} \wedge \bar{\text{d}t_3}\]</p><p>This resultant differential (volume) element is formed at each point in the integration domain by taking <a href="https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant">the Jacobian</a> of the parametric function.</p><p class="math-container">\[\mathbf{J}_f = \begin{bmatrix} \bar{\text{d}t_1} &amp; \bar{\text{d}t_2} &amp; \bar{\text{d}t_3} \end{bmatrix}\]</p><p>where</p><p class="math-container">\[\bar{\text{d}t_n} = \frac{\partial}{\partial t_n} ~ \text{g}(t_1,~t_2,~t_3)\]</p><p>Each of these partial derivatives is a vector representing the direction that changing each parametric function argument will move the resultant point. The differential element (<span>$E$</span>) size is then calculated using geometric algebra as the magnitude of the exterior product (<span>$\wedge$</span>) of these three vectors.</p><p class="math-container">\[E(t_1,~t_2,~t_3) = \left\| \bar{\text{d}t_1} \wedge \bar{\text{d}t_2} \wedge \bar{\text{d}t_3} \right\|\]</p><p>Finally, we use the parametric function itself, <span>$g$</span>, as a map to all points <span>$\bar{r}$</span> in the integration domain. Since <code>Meshes.Geometry</code> parametric functions all operate on normalized domains, we can now solve any volume integral as simply</p><p class="math-container">\[\int_0^1 \int_0^1 \int_0^1 f\Big(\text{g}\big(t_1,~t_2,~t_3\big)\Big) ~ E(t_1,~t_2,~t_3) ~ \text{d}t_1 ~ \text{d}t_2 ~ \text{d}t_3\]</p><p>This form of integral can be trivially generalized to support <span>$n$</span>-dimensional geometries in a form that enables the use of a wide range of numerical integration libraries.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../usage/">« Example Usage</a><a class="docs-footer-nextpage" href="../specializations/">Specializations »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.8.0 on <span class="colophon-date" title="Friday 29 November 2024 15:05">Friday 29 November 2024</span>. Using Julia version 1.9.4.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
4 changes: 2 additions & 2 deletions dev/index.html

Large diffs are not rendered by default.

Binary file modified dev/objects.inv
Binary file not shown.
2 changes: 1 addition & 1 deletion dev/search_index.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dev/specializations/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@
= 2A \int_0^1 \int_0^{1-v} f\left( \bar{r}(u,v) \right) \, \text{d}u \, \text{d}v\]</p><p>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.</p><p>In order to enable integration methods that operate over rectangular bounds, two coordinate system transformations are applied: the first maps from Barycentric coordinates <span>$(u, v)$</span> to polar coordinates <span>$(r, \phi)$</span>, and the second is a non-linear map from polar coordinates to a new curvilinear basis <span>$(R, \phi)$</span>.</p><p>For the first transformation, let <span>$u = r~\cos\phi$</span> and <span>$v = r~\sin\phi$</span> where <span>$\text{d}u~\text{d}v = r~\text{d}r~\text{d}\phi$</span>. The Barycentric triangle&#39;s hypotenuse boundary line is described by the function <span>$v(u) = 1 - u$</span>. Substituting in the previous definitions leads to a new boundary line function in polar coordinate space <span>$r(\phi) = 1 / (\sin\phi + \cos\phi)$</span>.</p><p class="math-container">\[\int_0^1 \int_0^{1-v} f\left( \bar{r}(u,v) \right) \, \text{d}u \, \text{d}v =
\int_0^{\pi/2} \int_0^{1/(\sin\phi+\cos\phi)} f\left( \bar{r}(r,\phi) \right) \, r \, \text{d}r \, \text{d}\phi\]</p><p>These integral boundaries remain non-rectangular, so an additional transformation will be applied to a curvilinear <span>$(R, \phi)$</span> space that normalizes all of the hypotenuse boundary line points to <span>$R=1$</span>. To achieve this, a function <span>$R(r,\phi)$</span> is required such that <span>$R(r_0, \phi) = 1$</span> where <span>$r_0 = 1 / (\sin\phi + \cos\phi)$</span></p><p>To achieve this, let <span>$R(r, \phi) = r~(\sin\phi + \cos\phi)$</span>. Now, substituting some terms leads to</p><p class="math-container">\[\int_0^{\pi/2} \int_0^{1/(\sin\phi+\cos\phi)} f\left( \bar{r}(r,\phi) \right) \, r \, \text{d}r \, \text{d}\phi
= \int_0^{\pi/2} \int_0^{r_0} f\left( \bar{r}(r,\phi) \right) \, \left(\frac{R}{\sin\phi + \cos\phi}\right) \, \text{d}r \, \text{d}\phi\]</p><p>Since <span>$\text{d}R/\text{d}r = \sin\phi + \cos\phi$</span>, a change of integral domain leads to</p><p class="math-container">\[\int_0^{\pi/2} \int_0^{r_0} f\left( \bar{r}(r,\phi) \right) \, \left(\frac{R}{\sin\phi + \cos\phi}\right) \, \text{d}r \, \text{d}\phi
= \int_0^{\pi/2} \int_0^1 f\left( \bar{r}(R,\phi) \right) \, \left(\frac{R}{\left(\sin\phi + \cos\phi\right)^2}\right) \, \text{d}R \, \text{d}\phi\]</p><p>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.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../how_it_works/">« How it Works</a><a class="docs-footer-nextpage" href="../api/">Public API »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.8.0 on <span class="colophon-date" title="Thursday 28 November 2024 16:37">Thursday 28 November 2024</span>. Using Julia version 1.9.4.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
= \int_0^{\pi/2} \int_0^1 f\left( \bar{r}(R,\phi) \right) \, \left(\frac{R}{\left(\sin\phi + \cos\phi\right)^2}\right) \, \text{d}R \, \text{d}\phi\]</p><p>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.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../how_it_works/">« How it Works</a><a class="docs-footer-nextpage" href="../api/">Public API »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.8.0 on <span class="colophon-date" title="Friday 29 November 2024 15:05">Friday 29 November 2024</span>. Using Julia version 1.9.4.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
2 changes: 1 addition & 1 deletion dev/supportmatrix/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dev/usage/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@

integral(f, unit_circle_bz, GaussKronrod())
# 0.017122 seconds (18.93 k allocations: 78.402 MiB)
# ans = 5.551055333711397 m^2</code></pre></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../supportmatrix/">« Support Matrix</a><a class="docs-footer-nextpage" href="../how_it_works/">How it Works »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.8.0 on <span class="colophon-date" title="Thursday 28 November 2024 16:37">Thursday 28 November 2024</span>. Using Julia version 1.9.4.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
# ans = 5.551055333711397 m^2</code></pre></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../supportmatrix/">« Support Matrix</a><a class="docs-footer-nextpage" href="../how_it_works/">How it Works »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.8.0 on <span class="colophon-date" title="Friday 29 November 2024 15:05">Friday 29 November 2024</span>. Using Julia version 1.9.4.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>

0 comments on commit e781d46

Please sign in to comment.