ryujin 2.1.1 revision ee5cbcbf2346c1299c942d0e1f13b46449973c18
Loading...
Searching...
No Matches
Classes
SIMD

Classes

struct  ryujin::get_value_type< T >
 

Type traits and packed index handling

template<typename T >
constexpr unsigned int ryujin::get_stride_size = 1
 
template<unsigned int length, typename Functor >
DEAL_II_ALWAYS_INLINE auto ryujin::generate_iterators (Functor f) -> std::array< auto, length >
 
template<typename T >
DEAL_II_ALWAYS_INLINE void ryujin::increment_iterators (T &iterators)
 

Transcendental and other mathematical operations

template<typename Number >
DEAL_II_HOST_DEVICE_ALWAYS_INLINE Number ryujin::positive_part (const Number number)
 
template<typename Number >
DEAL_II_HOST_DEVICE_ALWAYS_INLINE Number ryujin::negative_part (const Number number)
 
template<dealii::SIMDComparison predicate, typename Number >
DEAL_II_HOST_DEVICE_ALWAYS_INLINE Number ryujin::compare_and_apply_mask (const Number &left, const Number &right, const Number &true_value, const Number &false_value)
 
template<dealii::SIMDComparison predicate, typename T , std::size_t width>
DEAL_II_ALWAYS_INLINE dealii::VectorizedArray< T, width > ryujin::compare_and_apply_mask (const dealii::VectorizedArray< T, width > &left, const dealii::VectorizedArray< T, width > &right, const dealii::VectorizedArray< T, width > &true_value, const dealii::VectorizedArray< T, width > &false_value)
 
template<int N, typename T >
DEAL_II_HOST_DEVICE_ALWAYS_INLINE T ryujin::fixed_power (const T x)
 
template<typename T >
DEAL_II_HOST_DEVICE T ryujin::pow (const T x, const T b)
 
template<typename T , std::size_t width>
dealii::VectorizedArray< T, width > ryujin::pow (const dealii::VectorizedArray< T, width > x, const T b)
 
template<typename T , std::size_t width>
dealii::VectorizedArray< T, width > ryujin::pow (const dealii::VectorizedArray< T, width > x, const dealii::VectorizedArray< T, width > b)
 
template<typename T >
DEAL_II_HOST_DEVICE T ryujin::fast_pow (const T x, const T b, const Bias bias=Bias::none)
 
template<typename T , std::size_t width>
dealii::VectorizedArray< T, width > ryujin::fast_pow (const dealii::VectorizedArray< T, width > x, const T b, const Bias bias=Bias::none)
 
template<typename T , std::size_t width>
dealii::VectorizedArray< T, width > ryujin::fast_pow (const dealii::VectorizedArray< T, width > x, const dealii::VectorizedArray< T, width > b, const Bias bias=Bias::none)
 

SIMD based access to vectors and arrays of vectors

template<typename T , typename V >
DEAL_II_ALWAYS_INLINE T ryujin::read_entry (const V &vector, unsigned int i)
 
template<typename T , typename T2 >
DEAL_II_ALWAYS_INLINE T ryujin::read_entry (const std::vector< T2 > &vector, unsigned int i)
 
template<typename T , typename V >
DEAL_II_ALWAYS_INLINE T ryujin::read_entry (const V &vector, const unsigned int *js)
 
template<typename T , typename T2 >
DEAL_II_ALWAYS_INLINE T ryujin::read_entry (const std::vector< T2 > &vector, const unsigned int *js)
 
template<typename T , typename V >
DEAL_II_ALWAYS_INLINE void ryujin::write_entry (V &vector, const T &values, unsigned int i)
 
template<typename T , typename T2 >
DEAL_II_ALWAYS_INLINE void ryujin::write_entry (std::vector< T2 > &vector, const T &values, unsigned int i)
 
template<int rank, int dim, std::size_t width, typename Number >
DEAL_II_ALWAYS_INLINE dealii::Tensor< rank, dim, Number > ryujin::serialize_tensor (const dealii::Tensor< rank, dim, dealii::VectorizedArray< Number, width > > &vectorized, const unsigned int k)
 
template<int rank, int dim, typename Number >
DEAL_II_ALWAYS_INLINE dealii::Tensor< rank, dim, Number > ryujin::serialize_tensor (const dealii::Tensor< rank, dim, Number > &serial, const unsigned int k)
 
template<int rank, int dim, std::size_t width, typename Number >
DEAL_II_ALWAYS_INLINE void ryujin::assign_serial_tensor (dealii::Tensor< rank, dim, dealii::VectorizedArray< Number, width > > &result, const dealii::Tensor< rank, dim, Number > &serial, const unsigned int k)
 
template<int rank, int dim, typename Number >
DEAL_II_ALWAYS_INLINE void ryujin::assign_serial_tensor (dealii::Tensor< rank, dim, Number > &result, const dealii::Tensor< rank, dim, Number > &serial, const unsigned int k)
 

Detailed Description

SIMD related functions and classes.

Function Documentation

◆ generate_iterators()

template<unsigned int length, typename Functor >
DEAL_II_ALWAYS_INLINE auto ryujin::generate_iterators ( Functor  f) -> std::array<auto, length>
inline

Given a callable object f(k), this function creates a std::array with elements initialized as follows:

{ f(0) , f(1) , ... , f(length - 1) }

We use this function to create an array of sparsity iterators that cannot be default initialized.

Definition at line 118 of file simd.h.

◆ increment_iterators()

template<typename T >
DEAL_II_ALWAYS_INLINE void ryujin::increment_iterators ( T &  iterators)
inline

Increment all iterators in an std::array simultaneously.

Definition at line 131 of file simd.h.

◆ positive_part()

template<typename Number >
DEAL_II_HOST_DEVICE_ALWAYS_INLINE Number ryujin::positive_part ( const Number  number)

Return the positive part of a number.

Definition at line 149 of file simd.h.

Referenced by ryujin::Euler::WaveSpeedEstimatorView< dim, Number, MemorySpace >::compute_gap(), ryujin::ShallowWater::WaveSpeedEstimatorView< dim, Number >::compute_h_star(), ryujin::ShallowWater::WaveSpeedEstimatorView< dim, Number >::compute_lambda(), ryujin::Euler::WaveSpeedEstimatorView< dim, Number, MemorySpace >::compute_lambda(), ryujin::EulerAEOS::WaveSpeedEstimatorView< dim, Number >::compute_lambda(), ryujin::ShallowWater::HyperbolicSystemView< dim, Number >::inverse_water_depth_mollified(), ryujin::ShallowWater::WaveSpeedEstimatorView< dim, Number >::lambda1_minus(), ryujin::Euler::WaveSpeedEstimatorView< dim, Number, MemorySpace >::lambda1_minus(), ryujin::EulerAEOS::WaveSpeedEstimatorView< dim, Number >::lambda1_minus(), ryujin::Euler::WaveSpeedEstimatorView< dim, Number, MemorySpace >::lambda3_plus(), ryujin::EulerAEOS::WaveSpeedEstimatorView< dim, Number >::lambda3_plus(), ryujin::ShallowWater::WaveSpeedEstimatorView< dim, Number >::lambda3_plus(), ryujin::Euler::LimiterView< dim, Number, MemorySpace >::limit(), ryujin::EulerAEOS::LimiterView< dim, Number >::limit(), ryujin::EulerBarotropic::LimiterView< dim, Number >::limit(), ryujin::ScalarConservation::LimiterView< dim, Number >::limit(), ryujin::ShallowWater::LimiterView< dim, Number >::limit(), ryujin::EulerAEOS::WaveSpeedEstimatorView< dim, Number >::p_star_failsafe(), ryujin::EulerAEOS::WaveSpeedEstimatorView< dim, Number >::p_star_interpolated(), ryujin::EulerAEOS::WaveSpeedEstimatorView< dim, Number >::p_star_RS_full(), ryujin::EulerAEOS::WaveSpeedEstimatorView< dim, Number >::p_star_SS_full(), ryujin::Euler::WaveSpeedEstimatorView< dim, Number, MemorySpace >::p_star_two_rarefaction(), ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::surrogate_harten_entropy(), ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::surrogate_pressure(), and ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::surrogate_speed_of_sound().

◆ negative_part()

template<typename Number >
DEAL_II_HOST_DEVICE_ALWAYS_INLINE Number ryujin::negative_part ( const Number  number)

◆ compare_and_apply_mask() [1/2]

template<dealii::SIMDComparison predicate, typename Number >
DEAL_II_HOST_DEVICE_ALWAYS_INLINE Number ryujin::compare_and_apply_mask ( const Number &  left,
const Number &  right,
const Number &  true_value,
const Number &  false_value 
)

A wrapper around dealii::compare_and_apply_mask() for scalar number types that is annotated with DEAL_II_HOST_DEVICE so that it can be used in device code.

Definition at line 176 of file simd.h.

Referenced by ryujin::Euler::WaveSpeedEstimatorView< dim, Number, MemorySpace >::compute(), ryujin::Euler::WaveSpeedEstimatorView< dim, Number, MemorySpace >::df(), ryujin::Euler::WaveSpeedEstimatorView< dim, Number, MemorySpace >::f(), and ryujin::Euler::LimiterView< dim, Number, MemorySpace >::limit().

◆ compare_and_apply_mask() [2/2]

template<dealii::SIMDComparison predicate, typename T , std::size_t width>
DEAL_II_ALWAYS_INLINE dealii::VectorizedArray< T, width > ryujin::compare_and_apply_mask ( const dealii::VectorizedArray< T, width > &  left,
const dealii::VectorizedArray< T, width > &  right,
const dealii::VectorizedArray< T, width > &  true_value,
const dealii::VectorizedArray< T, width > &  false_value 
)
inline

Variant of above function for VectorizedArray that simply forwards to the dealii::compare_and_apply_mask() implementation. (Host only.)

Definition at line 210 of file simd.h.

◆ fixed_power()

template<int N, typename T >
DEAL_II_HOST_DEVICE_ALWAYS_INLINE T ryujin::fixed_power ( const T  x)

A wrapper around dealii::Utilities::fixed_power. We use a wrapper instead of calling the function directly so that we can easily change the implementation at one central place.

Definition at line 228 of file simd.h.

◆ pow() [1/3]

template<typename T >
DEAL_II_HOST_DEVICE T ryujin::pow ( const T  x,
const T  b 
)

Custom serial pow function.

Referenced by ryujin::ShallowWaterInitialStates::SlopingFriction< Description, dim, Number >::compute(), ryujin::EulerInitialStates::IsentropicVortex< Description, dim, Number >::compute(), ryujin::ShallowWaterInitialStates::FlowOverBump< Description, dim, Number >::compute(), ryujin::Euler::WaveSpeedEstimatorView< dim, Number, MemorySpace >::df(), ryujin::Euler::WaveSpeedEstimatorView< dim, Number, MemorySpace >::f(), ryujin::ShallowWater::HyperbolicSystem::fill_precomputed_values(), ryujin::Euler::HyperbolicSystemView< dim, Number, MemorySpace >::harten_entropy(), ryujin::Euler::HyperbolicSystemView< dim, Number, MemorySpace >::harten_entropy_derivative(), ryujin::Euler::LimiterView< dim, Number, MemorySpace >::limit(), ryujin::EulerAEOS::LimiterView< dim, Number >::limit(), ryujin::Euler::HyperbolicSystemView< dim, Number, MemorySpace >::mathematical_entropy(), ryujin::Euler::HyperbolicSystemView< dim, Number, MemorySpace >::mathematical_entropy_derivative(), ryujin::EulerAEOS::WaveSpeedEstimatorView< dim, Number >::p_star_interpolated(), ryujin::EulerAEOS::WaveSpeedEstimatorView< dim, Number >::p_star_RS_full(), ryujin::EulerAEOS::WaveSpeedEstimatorView< dim, Number >::p_star_SS_full(), ryujin::Euler::WaveSpeedEstimatorView< dim, Number, MemorySpace >::p_star_two_rarefaction(), ryujin::pow(), ryujin::pow(), ryujin::Euler::HyperbolicSystemView< dim, Number, MemorySpace >::prescribe_riemann_characteristic(), ryujin::Euler::HyperbolicSystemView< dim, Number, MemorySpace >::prescribe_riemann_characteristic(), ryujin::Euler::HyperbolicSystemView< dim, Number, MemorySpace >::specific_entropy(), ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::surrogate_harten_entropy(), ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::surrogate_harten_entropy_derivative(), and ryujin::EulerAEOS::HyperbolicSystemView< dim, Number >::surrogate_specific_entropy().

◆ pow() [2/3]

template<typename T , std::size_t width>
dealii::VectorizedArray< T, width > ryujin::pow ( const dealii::VectorizedArray< T, width >  x,
const T  b 
)

Custom implementation of a vectorized pow function.

Definition at line 220 of file simd.template.h.

◆ pow() [3/3]

template<typename T , std::size_t width>
dealii::VectorizedArray< T, width > ryujin::pow ( const dealii::VectorizedArray< T, width >  x,
const dealii::VectorizedArray< T, width >  b 
)

Custom implementation of a vectorized pow function with vectorized exponent.

Definition at line 230 of file simd.template.h.

◆ fast_pow() [1/3]

template<typename T >
DEAL_II_HOST_DEVICE T ryujin::fast_pow ( const T  x,
const T  b,
const Bias  bias = Bias::none 
)

Custom serial approximate pow function.

Referenced by ryujin::fast_pow(), and ryujin::fast_pow().

◆ fast_pow() [2/3]

template<typename T , std::size_t width>
dealii::VectorizedArray< T, width > ryujin::fast_pow ( const dealii::VectorizedArray< T, width >  x,
const T  b,
const Bias  bias = Bias::none 
)

Custom implementation of an approximate, vectorized pow function.

Definition at line 273 of file simd.template.h.

◆ fast_pow() [3/3]

template<typename T , std::size_t width>
dealii::VectorizedArray< T, width > ryujin::fast_pow ( const dealii::VectorizedArray< T, width >  x,
const dealii::VectorizedArray< T, width >  b,
const Bias  bias = Bias::none 
)

Custom implementation of an approximate, vectorized pow function with vectorized exponent.

Definition at line 283 of file simd.template.h.

◆ read_entry() [1/4]

template<typename T , typename V >
DEAL_II_ALWAYS_INLINE T ryujin::read_entry ( const V &  vector,
unsigned int  i 
)
inline

Return a VectorizedArray with { U[i] , U[i + 1] , ... , U[i + VectorizedArray::size() - 1] }

Definition at line 400 of file simd.h.

◆ read_entry() [2/4]

template<typename T , typename T2 >
DEAL_II_ALWAYS_INLINE T ryujin::read_entry ( const std::vector< T2 > &  vector,
unsigned int  i 
)
inline

Variant of above function specialized for std::vector.

Definition at line 424 of file simd.h.

◆ read_entry() [3/4]

template<typename T , typename V >
DEAL_II_ALWAYS_INLINE T ryujin::read_entry ( const V &  vector,
const unsigned int *  js 
)
inline

Return a VectorizedArray with { U[js[0] , U[js[1]] , ... , U[js[VectorizedArray::size() - 1]] }

Definition at line 462 of file simd.h.

◆ read_entry() [4/4]

template<typename T , typename T2 >
DEAL_II_ALWAYS_INLINE T ryujin::read_entry ( const std::vector< T2 > &  vector,
const unsigned int *  js 
)
inline

Variant of above function specialized for std::vector.

Definition at line 487 of file simd.h.

◆ write_entry() [1/2]

template<typename T , typename V >
DEAL_II_ALWAYS_INLINE void ryujin::write_entry ( V &  vector,
const T &  values,
unsigned int  i 
)
inline

Write out the given VectorizedArray to the vector

Definition at line 513 of file simd.h.

Referenced by ryujin::NavierStokes::VelocityMatrix< dim, Number, Number2 >::compute_diagonal().

◆ write_entry() [2/2]

template<typename T , typename T2 >
DEAL_II_ALWAYS_INLINE void ryujin::write_entry ( std::vector< T2 > &  vector,
const T &  values,
unsigned int  i 
)
inline

Variant of above function specialized for std::vector.

Definition at line 535 of file simd.h.

◆ serialize_tensor() [1/2]

template<int rank, int dim, std::size_t width, typename Number >
DEAL_II_ALWAYS_INLINE dealii::Tensor< rank, dim, Number > ryujin::serialize_tensor ( const dealii::Tensor< rank, dim, dealii::VectorizedArray< Number, width > > &  vectorized,
const unsigned int  k 
)
inline

Return the k-th serialized component of a Tensor of VectorizedArray

Definition at line 568 of file simd.h.

References ryujin::serialize_tensor().

Referenced by ryujin::serialize_tensor().

◆ serialize_tensor() [2/2]

template<int rank, int dim, typename Number >
DEAL_II_ALWAYS_INLINE dealii::Tensor< rank, dim, Number > ryujin::serialize_tensor ( const dealii::Tensor< rank, dim, Number > &  serial,
const unsigned int  k 
)
inline

Variant of above function for serial Tensors that simply returns the given tensor.

Definition at line 594 of file simd.h.

References ryujin::serial.

◆ assign_serial_tensor() [1/2]

template<int rank, int dim, std::size_t width, typename Number >
DEAL_II_ALWAYS_INLINE void ryujin::assign_serial_tensor ( dealii::Tensor< rank, dim, dealii::VectorizedArray< Number, width > > &  result,
const dealii::Tensor< rank, dim, Number > &  serial,
const unsigned int  k 
)
inline

Update the k-th serial component of a Tensor of VectorizedArray

Definition at line 610 of file simd.h.

References ryujin::assign_serial_tensor(), and ryujin::serial.

Referenced by ryujin::assign_serial_tensor().

◆ assign_serial_tensor() [2/2]

template<int rank, int dim, typename Number >
DEAL_II_ALWAYS_INLINE void ryujin::assign_serial_tensor ( dealii::Tensor< rank, dim, Number > &  result,
const dealii::Tensor< rank, dim, Number > &  serial,
const unsigned int  k 
)
inline

Variant of above function for serial Tensors that simply assigns the given tensor as is.

Definition at line 634 of file simd.h.

References ryujin::serial.

Variable Documentation

◆ get_stride_size

template<typename T >
constexpr unsigned int ryujin::get_stride_size = 1
constexpr

Return the stride size:

Definition at line 85 of file simd.h.