PRISMS-PF Manual
Loading...
Searching...
No Matches
Symmetries Namespace Reference

Functions

template<unsigned int N, typename T>
DEAL_II_ALWAYS_INLINE T cos_arctan (const T &x) noexcept
 Compute cos(N * arctan(x)).
 
template<unsigned int N, typename T>
DEAL_II_ALWAYS_INLINE T sin_arctan (const T &x) noexcept
 Compute sin(N * arctan(x)).
 
template<unsigned int N, typename T>
DEAL_II_ALWAYS_INLINE T cos_theta (const T &nx, const T &ny) noexcept
 Compute cos(N * theta) where theta = arctan(ny/nx).
 
template<unsigned int N, typename T>
DEAL_II_ALWAYS_INLINE T sin_theta (const T &nx, const T &ny) noexcept
 Compute sin(N * theta) where theta = arctan(ny/nx).
 
template<unsigned int N, typename T>
DEAL_II_ALWAYS_INLINE T cos_psi (const T &nx, const T &ny, const T &nz) noexcept
 Compute cos(N * psi) where theta = arctan(sqrt(nx^2+ny^2)/ny).
 
template<unsigned int N, typename T>
DEAL_II_ALWAYS_INLINE T sin_psi (const T &nx, const T &ny, const T &nz) noexcept
 Compute sin(N * psi) where theta = arctan(sqrt(nx^2+ny^2)/ny).
 

Function Documentation

◆ cos_arctan()

template<unsigned int N, typename T>
DEAL_II_ALWAYS_INLINE T Symmetries::cos_arctan ( const T & x)
inlinenodiscardnoexcept

Compute cos(N * arctan(x)).

This function provides an efficient way to calculate symmetries like $cos(N arctan(\theta))$, where N is a known number at compile time.

Importantly, it doesn't always make sense to unroll the function with a Chebyshev polynomial due to the crossover point in multiplication operations and using the math library. We've found this to occur at N = 3, although your mileage will vary based on your architecture. TODO: Benchmark this better

◆ cos_psi()

template<unsigned int N, typename T>
DEAL_II_ALWAYS_INLINE T Symmetries::cos_psi ( const T & nx,
const T & ny,
const T & nz )
inlinenodiscardnoexcept

Compute cos(N * psi) where theta = arctan(sqrt(nx^2+ny^2)/ny).

This function provides an efficient way to calculate symmetries like $cos(N arctan(\sqrt{n_x^2+n_y^2}/n_z))$, where N is a known number at compile time.

Importantly, it doesn't always make sense to unroll the function with a Chebyshev polynomial due to the crossover point in multiplication operations and using the math library. We've found this to occur at N = 5, although your mileage will vary based on your architecture. TODO: Benchmark this better

◆ cos_theta()

template<unsigned int N, typename T>
DEAL_II_ALWAYS_INLINE T Symmetries::cos_theta ( const T & nx,
const T & ny )
inlinenodiscardnoexcept

Compute cos(N * theta) where theta = arctan(ny/nx).

This function provides an efficient way to calculate symmetries like $cos(N arctan(n_y/n_x))$, where N is a known number at compile time.

Importantly, it doesn't always make sense to unroll the function with a Chebyshev polynomial due to the crossover point in multiplication operations and using the math library. We've found this to occur at N = 5, although your mileage will vary based on your architecture. TODO: Benchmark this better

◆ sin_arctan()

template<unsigned int N, typename T>
DEAL_II_ALWAYS_INLINE T Symmetries::sin_arctan ( const T & x)
inlinenodiscardnoexcept

Compute sin(N * arctan(x)).

This function provides an efficient way to calculate symmetries like $sin(N arctan(\theta))$, where N is a known number at compile time.

Importantly, it doesn't always make sense to unroll the function with a Chebyshev polynomial due to the crossover point in multiplication operations and using the math library. We've found this to occur at N = 3, although your mileage will vary based on your architecture. TODO: Benchmark this better

◆ sin_psi()

template<unsigned int N, typename T>
DEAL_II_ALWAYS_INLINE T Symmetries::sin_psi ( const T & nx,
const T & ny,
const T & nz )
inlinenodiscardnoexcept

Compute sin(N * psi) where theta = arctan(sqrt(nx^2+ny^2)/ny).

This function provides an efficient way to calculate symmetries like $sin(N arctan(\sqrt{n_x^2+n_y^2}/n_z))$, where N is a known number at compile time.

Importantly, it doesn't always make sense to unroll the function with a Chebyshev polynomial due to the crossover point in multiplication operations and using the math library. We've found this to occur at N = 5, although your mileage will vary based on your architecture. TODO: Benchmark this better

◆ sin_theta()

template<unsigned int N, typename T>
DEAL_II_ALWAYS_INLINE T Symmetries::sin_theta ( const T & nx,
const T & ny )
inlinenodiscardnoexcept

Compute sin(N * theta) where theta = arctan(ny/nx).

This function provides an efficient way to calculate symmetries like $sin(N arctan(n_y/n_x))$, where N is a known number at compile time.

Importantly, it doesn't always make sense to unroll the function with a Chebyshev polynomial due to the crossover point in multiplication operations and using the math library. We've found this to occur at N = 5, although your mileage will vary based on your architecture. TODO: Benchmark this better