Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include "NumericalAlgorithms/SphericalHarmonics/TensorYlm.hpp" 7 : 8 : #include <array> 9 : #include <complex> 10 : #include <cstdint> 11 : 12 : #include "Utilities/Array.hpp" 13 : 14 0 : namespace ylm::TensorYlm::helpers { 15 : 16 : /// Defines the three Cartesian and three spherical basis vectors. 17 0 : enum class BasisVector : uint8_t { x, y, z, l, m, mbar }; 18 : 19 : /// Returns a Cartesian BasisVector for every index. 20 : template <size_t Rank> 21 1 : std::array<BasisVector, Rank> to_cart_basis_vector( 22 : const cpp20::array<size_t, Rank>& indices); 23 : 24 : /// Returns the m value associated with a Cartesian basis vector. 25 1 : int bv_to_m(BasisVector basis_vector, int i); 26 : 27 : /// Returns the prefactor k associated with a Cartesian basis vector. 28 1 : std::complex<double> bv_to_k(BasisVector basis_vector, int i); 29 : 30 : /// Returns a spherical BasisVector for every index. 31 : template <size_t Rank> 32 1 : std::array<BasisVector, Rank> to_sphere_basis_vector( 33 : const cpp20::array<size_t, Rank>& indices); 34 : 35 : /// Returns minus the spinweight of a tetrad basis vector 36 1 : int bv_to_s(BasisVector basis_vector); 37 : 38 : /// Computes the symmetry factor S that appears in various equations. 39 : template <typename Symm> 40 1 : double get_symm_factor(size_t src_multiplicity, size_t lbar); 41 : 42 : } // namespace ylm::TensorYlm::helpers