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 <vector>
8 :
9 : namespace ylm {
10 : class Spherepack;
11 :
12 : /// Retrieves a cached Spherepack object with m_max equal to l_max
13 1 : const Spherepack& get_spherepack_cache(size_t l_max);
14 :
15 : /*!
16 : * \brief SPHEREPACK spectral offsets grouped by angular degree \f$\ell\f$.
17 : *
18 : * \details `offsets` is a flat array of SPHEREPACK spectral offsets sorted
19 : * by angular degree. The offsets for degree \f$\ell\f$ occupy the half-open
20 : * range `[l_start[l], l_start[l+1])` within `offsets`.
21 : */
22 1 : struct SphericalHarmonicModesByDegree {
23 : /// Flat list of SPHEREPACK spectral offsets, grouped by angular degree
24 1 : std::vector<size_t> offsets;
25 : /// Prefix-sum array of length \f$\ell_\mathrm{max}+2\f$; the offsets for
26 : /// degree \f$\ell\f$ are `offsets[l_start[l]..l_start[l+1])`
27 1 : std::vector<size_t> l_start;
28 : };
29 :
30 : /// Retrieves cached SPHEREPACK spectral offsets grouped by angular degree for
31 : /// the given \p l_max.
32 1 : const SphericalHarmonicModesByDegree& get_modes_by_degree_cache(size_t l_max);
33 : } // namespace ylm
|