![]() |
ryujin 2.1.1 revision 71cbe157f0746717db03d7e1e977da66a7d7bfb5
|
Classes | |
| struct | ryujin::get_value_type< T > |
Type traits and packed index handling | |
| 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<typename Number > | |
| DEAL_II_HOST_DEVICE_ALWAYS_INLINE Number | ryujin::safe_division (const Number &numerator, const Number &denominator) |
| 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) |
SIMD related functions and classes.
|
inline |
|
inline |
| DEAL_II_HOST_DEVICE_ALWAYS_INLINE Number ryujin::positive_part | ( | const Number | number | ) |
Return the positive part of a number.
Definition at line 134 of file simd.h.
Referenced by ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::compute_gap(), ryujin::ShallowWater::WaveSpeedEstimatorView< dim, Number, MemorySpace >::compute_h_star(), ryujin::ShallowWater::WaveSpeedEstimatorView< dim, Number, MemorySpace >::compute_lambda(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::compute_lambda_max(), ryujin::ShallowWater::HyperbolicSystemView< dim, Number, MemorySpace >::inverse_water_depth_mollified(), ryujin::ShallowWater::WaveSpeedEstimatorView< dim, Number, MemorySpace >::lambda1_minus(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::lambda1_minus(), ryujin::ShallowWater::WaveSpeedEstimatorView< dim, Number, MemorySpace >::lambda3_plus(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::lambda3_plus(), ryujin::Euler::LimiterView< dim, Number, MemorySpace >::limit(), ryujin::EulerAEOS::LimiterView< dim, Number, MemorySpace >::limit(), ryujin::EulerBarotropic::LimiterView< dim, Number, MemorySpace >::limit(), ryujin::ScalarConservation::LimiterView< dim, Number, MemorySpace >::limit(), ryujin::ShallowWater::LimiterView< dim, Number, MemorySpace >::limit(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_failsafe(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_interpolated(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_RS_full(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_single_gamma(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_SS_full(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_two_rarefaction(), ryujin::EulerAEOS::HyperbolicSystemView< dim, Number, MemorySpace >::surrogate_harten_entropy(), ryujin::EulerAEOS::HyperbolicSystemView< dim, Number, MemorySpace >::surrogate_pressure(), and ryujin::EulerAEOS::HyperbolicSystemView< dim, Number, MemorySpace >::surrogate_speed_of_sound().
| DEAL_II_HOST_DEVICE_ALWAYS_INLINE Number ryujin::negative_part | ( | const Number | number | ) |
Return the negative part of a number.
Definition at line 146 of file simd.h.
Referenced by ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::compute_gap(), ryujin::ShallowWater::WaveSpeedEstimatorView< dim, Number, MemorySpace >::compute_lambda(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::compute_lambda_max(), ryujin::Euler::LimiterView< dim, Number, MemorySpace >::limit(), ryujin::EulerAEOS::LimiterView< dim, Number, MemorySpace >::limit(), ryujin::EulerBarotropic::LimiterView< dim, Number, MemorySpace >::limit(), ryujin::ScalarConservation::LimiterView< dim, Number, MemorySpace >::limit(), and ryujin::ShallowWater::LimiterView< dim, Number, MemorySpace >::limit().
| DEAL_II_HOST_DEVICE_ALWAYS_INLINE Number ryujin::safe_division | ( | const Number & | numerator, |
| const Number & | denominator | ||
| ) |
For various divisions we have a mathematical guarantee that the numerator and denominator are nonnegative and the limit (of zero numerator and denominator) must converge to zero. The following function takes care of rounding issues when computing such quotients by (a) avoiding division by zero and (b) ensuring non-negativity of the result.
Definition at line 164 of file simd.h.
References ryujin::min.
Referenced by ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::alpha(), ryujin::EulerAEOS::IndicatorView< dim, Number, MemorySpace >::alpha(), ryujin::EulerBarotropic::IndicatorView< dim, Number, MemorySpace >::alpha(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::df(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::f(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::lambda1_minus(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::lambda3_plus(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_failsafe(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_interpolated(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_RS_full(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_single_gamma(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_SS_full(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_two_rarefaction(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::phi_of_p_max(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::rarefaction_fan_pressure(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::rho_star(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::safe_division(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::speed_of_sound(), ryujin::EulerAEOS::HyperbolicSystemView< dim, Number, MemorySpace >::surrogate_gamma(), ryujin::EulerAEOS::HyperbolicSystemView< dim, Number, MemorySpace >::surrogate_harten_entropy_derivative(), and ryujin::EulerAEOS::HyperbolicSystemView< dim, Number, MemorySpace >::surrogate_pressure().
| 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 182 of file simd.h.
Referenced by ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::compute(), ryujin::ShallowWater::WaveSpeedEstimatorView< dim, Number, MemorySpace >::compute_h_star(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::df(), ryujin::ShallowWater::WaveSpeedEstimatorView< dim, Number, MemorySpace >::f(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::f(), ryujin::Euler::LimiterView< dim, Number, MemorySpace >::limit(), ryujin::EulerAEOS::LimiterView< dim, Number, MemorySpace >::limit(), ryujin::ShallowWater::LimiterView< dim, Number, MemorySpace >::limit(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_interpolated(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_RS_full(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_single_gamma(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_two_rarefaction(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_upper_bound(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::rho_star(), and ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::solve().
|
inline |
| DEAL_II_HOST_DEVICE_ALWAYS_INLINE T ryujin::fixed_power | ( | const T | x | ) |
| 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::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::df(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, 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, MemorySpace >::limit(), ryujin::Euler::HyperbolicSystemView< dim, Number, MemorySpace >::mathematical_entropy(), ryujin::Euler::HyperbolicSystemView< dim, Number, MemorySpace >::mathematical_entropy_derivative(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_interpolated(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_RS_full(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_single_gamma(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::p_star_SS_full(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, 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::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::rarefaction_fan_pressure(), ryujin::EulerAEOS::NASGRiemannSolverView< Number, options, MemorySpace >::rho_star(), ryujin::Euler::HyperbolicSystemView< dim, Number, MemorySpace >::specific_entropy(), ryujin::EulerAEOS::HyperbolicSystemView< dim, Number, MemorySpace >::surrogate_harten_entropy(), ryujin::EulerAEOS::HyperbolicSystemView< dim, Number, MemorySpace >::surrogate_harten_entropy_derivative(), and ryujin::EulerAEOS::HyperbolicSystemView< dim, Number, MemorySpace >::surrogate_specific_entropy().
| 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.
| 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.
| 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().
| 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.
| 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.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Write out the given VectorizedArray to the vector
Definition at line 519 of file simd.h.
Referenced by ryujin::NavierStokes::VelocityMatrix< dim, Number, Number2 >::compute_diagonal().
|
inline |
|
inline |
Return the k-th serialized component of a Tensor of VectorizedArray
Definition at line 574 of file simd.h.
References ryujin::serialize_tensor().
Referenced by ryujin::serialize_tensor().
|
inline |
Variant of above function for serial Tensors that simply returns the given tensor.
Definition at line 600 of file simd.h.
References ryujin::serial.
|
inline |
Update the k-th serial component of a Tensor of VectorizedArray
Definition at line 616 of file simd.h.
References ryujin::assign_serial_tensor(), and ryujin::serial.
Referenced by ryujin::assign_serial_tensor().
|
inline |
Variant of above function for serial Tensors that simply assigns the given tensor as is.
Definition at line 640 of file simd.h.
References ryujin::serial.