Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <cstddef>
7 : #include <optional>
8 : #include <utility>
9 :
10 : /// \cond
11 : class DataVector;
12 : template <size_t Dim>
13 : class Mesh;
14 : /// \endcond
15 :
16 : namespace domain {
17 : /*!
18 : * \brief The range of `radii` over the element if the element is a
19 : * spherical-harmonic shell concentric with the center the radii are measured
20 : * from, `std::nullopt` otherwise.
21 : *
22 : * The element is considered a concentric shell if `mesh` is a
23 : * spherical-harmonic shell with Gauss-Lobatto quadrature in the radial
24 : * dimension and the grid points with the same radial index all have the same
25 : * radius, up to a small tolerance for roundoff. A point is in the element
26 : * exactly if its radius is in the returned range, which is padded by the
27 : * tolerance. This holds for any (e.g. time-dependent) map that keeps the
28 : * shell spherical and concentric, such as rotations and expansions about the
29 : * center.
30 : *
31 : * \param mesh the mesh of the element
32 : * \param radii the distances of the grid points of `mesh` from the center
33 : */
34 1 : std::optional<std::pair<double, double>> concentric_shell_radial_extent(
35 : const Mesh<3>& mesh, const DataVector& radii);
36 : } // namespace domain
|