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