Namespace for spinweighted spherical harmonic utilities. More...
Classes  
class  Collocation 
A wrapper class for the spherical harmonic library collocation data. More...  
struct  LibsharpCollocationPoint 
A container for reporting a single collocation point for libsharp compatible data structures. More...  
class  TransformJob 
A class which gathers all necessary shared structure among several spinweighted spherical harmonic transforms and dispatches to libsharp. Each TransformJob represents exactly one spinweighted transform libsharp execution call, and one inverse transform libsharp execution call. More...  
Typedefs  
template<int Spin, typename TagList >  
using  get_tags_with_spin = tmpl::remove_duplicates< tmpl::filter< TagList, detail::has_spin< tmpl::_1, std::integral_constant< int, Spin > >> > 
Extract from TagList the subset of those tags that have a static int member spin equal to the template parameter Spin . More...  
template<int Spin, typename TagList >  
using  get_prefix_tags_that_wrap_tags_with_spin = tmpl::filter< TagList, tmpl::bind< detail::wrapped_has_spin, tmpl::_1, std::integral_constant< int, Spin > >> 
Extract from TagList the subset of those tags that wrap a tag that has a static int member spin equal to the template parameter Spin . More...  
template<ComplexRepresentation Representation, typename TagList >  
using  make_swsh_transform_job_list = typename detail::make_swsh_transform_job_list_impl< 2, Representation, TagList, decltype(std::make_integer_sequence< int, 5 >{})>::type 
Assemble a tmpl::list of TransformJob given a list of tags TagList that need to be transformed. The Representation is the ComplexRepresentation to use for the transformations. More...  
template<ComplexRepresentation Representation, typename DerivativeTagList >  
using  make_swsh_transform_job_list_from_derivative_tags = typename detail::make_swsh_transform_job_list_impl< 2, Representation, tmpl::transform< DerivativeTagList, tmpl::bind< db::remove_tag_prefix, tmpl::_1 > >, decltype(std::make_integer_sequence< int, 5 >{})>::type 
Assemble a tmpl::list of TransformJob s given a list of Derivative<Tag, Derivative> that need to be computed. The TransformJob s constructed by this type alias correspond to the Tag s in the list. More...  
Enumerations  
enum  ComplexRepresentation { Interleaved, RealsThenImags } 
A set of labels for the possible representations of complex numbers for the ComplexDataView and the computations performed in the spinweighted spherical harmonic transform library. More...  
Functions  
constexpr size_t  number_of_swsh_coefficients (const size_t l_max) noexcept 
Convenience function for determining the number of spinweighted spherical harmonics coefficients that are stored for a given l_max  
constexpr double  sharp_swsh_sign_change (const int from_spin_weight, const int to_spin_weight, const bool real) noexcept 
Compute the relative sign change necessary to convert between the libsharp basis for spin weight from_spin_weight to the basis for spin weight to_spin_weight , for the real component coefficients if real is true, otherwise for the imaginary component coefficients. The sign change for a given coefficient is equivalent to the product of sharp_swsh_sign(from_spin, m, real) * sharp_swsh_sign(to_spin, m, real) . Due to the form of the signs, it does not end up depending on m (the m's in the power of \(1\)'s cancel). For full details of the libsharp sign conventions, see the documentation for TransformJob. More...  
constexpr double  sharp_swsh_sign (const int spin_weight, const int m, const bool real) noexcept 
Compute the sign change between the libsharp convention and the set of spinweighted spherical harmonics given by the relation to the Wigner rotation matrices. More...  
template<ComplexRepresentation Representation>  
const Collocation< Representation > &  precomputed_collocation (size_t l_max) noexcept 
precomputation function for those collocation grids that are requested More...  
constexpr size_t  number_of_swsh_collocation_points (const size_t l_max) noexcept 
Convenience function for determining the number of spinweighted spherical harmonic collocation values that are stored for a given l_max for a libsharpcompatible set of collocation points.  
Variables  
constexpr size_t  collocation_maximum_l_max = 200 
Namespace for spinweighted spherical harmonic utilities.

strong 
A set of labels for the possible representations of complex numbers for the ComplexDataView
and the computations performed in the spinweighted spherical harmonic transform library.
The representation describes one of two behaviors:
Interleaved
: The vectors of complex numbers will be represented by alternating doubles in memory. This causes both the real and imaginary part at a given gridpoint to be near one another, but successive real values farther. This is the native representation of complex data in the C++ standard, and is the representation needed for Blaze math operations. Therefore, using this representation type in libsharp computations will cause operations which access only the real or imaginary parts individually to trace over larger memory regions. However, this representation will give rise to fewer copying operations to perform the libsharp operations.RealsThenImags
: The vectors of complex numbers will primarily be represented by a pair of vectors of doubles, one for the real values and one for the imaginary values (the full computation cannot be performed exclusively in this representation, as it must return to a vector of std::complex<double>
for Blaze math operations). This causes the successive real values for different gridpoints to be closer in memory, but the real and imaginary parts for a given gridpoint to be farther in memory. This is not the native representation for complex data in C++, so the data must be transformed between operations which use Blaze and the transform operations which use RealsThenImags
. Therefore, using this representation in libsharp computations will cause operations which act on real or imaginary parts individually to have better memory locality (so likely improved cache performance, but such statements are highly hardwaredependent). However, this representation will give rise to more copying operations to perform the libsharp operations.

noexcept 
precomputation function for those collocation grids that are requested
keeps a compiletime structure which acts as a threadsafe lookup table for all l_max values that have been requested so far during execution, so that the libsharp generation need not be rerun. If it has been generated, it's returned by reference. Otherwise, the new grid is generated and put in the lookup table before it is returned by reference.