15#ifndef dealii_numbers_h
16#define dealii_numbers_h
30#ifdef DEAL_II_WITH_ADOLC
58 template <
typename Number>
80#if DEAL_II_VECTORIZATION_WIDTH_IN_BITS >= 512
82#elif DEAL_II_VECTORIZATION_WIDTH_IN_BITS >= 256
84#elif DEAL_II_VECTORIZATION_WIDTH_IN_BITS >= 128
104#if DEAL_II_VECTORIZATION_WIDTH_IN_BITS >= 128 && defined(__ALTIVEC__)
106#elif DEAL_II_VECTORIZATION_WIDTH_IN_BITS >= 512 && defined(__AVX512F__)
108#elif DEAL_II_VECTORIZATION_WIDTH_IN_BITS >= 256 && defined(__AVX__)
110#elif DEAL_II_VECTORIZATION_WIDTH_IN_BITS >= 128 && defined(__SSE2__)
112#elif DEAL_II_VECTORIZATION_WIDTH_IN_BITS >= 128 && defined(__ARM_NEON)
124template <
typename Number,
132#ifdef DEAL_II_WITH_ADOLC
147abs(
const adouble &x);
150abs(
const adtl::adouble &x);
158 template <
typename Number, std::
size_t w
idth>
159 DEAL_II_ALWAYS_INLINE ::VectorizedArray<Number, width>
sqrt(
160 const ::VectorizedArray<Number, width> &);
161 template <
typename Number, std::
size_t w
idth>
162 DEAL_II_ALWAYS_INLINE ::VectorizedArray<Number, width>
abs(
163 const ::VectorizedArray<Number, width> &);
164 template <
typename Number, std::
size_t w
idth>
165 DEAL_II_ALWAYS_INLINE ::VectorizedArray<Number, width>
max(
166 const ::VectorizedArray<Number, width> &,
167 const ::VectorizedArray<Number, width> &);
168 template <
typename Number, std::
size_t w
idth>
169 DEAL_II_ALWAYS_INLINE ::VectorizedArray<Number, width>
min(
170 const ::VectorizedArray<Number, width> &,
171 const ::VectorizedArray<Number, width> &);
172 template <
typename Number,
size_t w
idth>
174 const ::VectorizedArray<Number, width> &,
const Number p);
175 template <
typename Number,
size_t w
idth>
177 const ::VectorizedArray<Number, width> &);
178 template <
typename Number,
size_t w
idth>
180 const ::VectorizedArray<Number, width> &);
181 template <
typename Number,
size_t w
idth>
183 const ::VectorizedArray<Number, width> &);
184 template <
typename Number,
size_t w
idth>
186 const ::VectorizedArray<Number, width> &);
187 template <
typename Number,
size_t w
idth>
189 const ::VectorizedArray<Number, width> &);
214 constexpr double E = 2.7182818284590452354;
219 constexpr double LOG2E = 1.4426950408889634074;
224 constexpr double LOG10E = 0.43429448190325182765;
229 constexpr double LN2 = 0.69314718055994530942;
234 constexpr double LN10 = 2.30258509299404568402;
239 constexpr double PI = 3.14159265358979323846;
244 constexpr double PI_2 = 1.57079632679489661923;
249 constexpr double PI_4 = 0.78539816339744830962;
254 constexpr double SQRT2 = 1.41421356237309504880;
259 constexpr double SQRT1_2 = 0.70710678118654752440;
276 bool is_finite(
const std::complex<double> &x);
282 bool is_finite(
const std::complex<float> &x);
292 bool is_finite(
const std::complex<long double> &x);
304 template <
typename Number1,
typename Number2>
306 const Number2 &value_2);
318 template <
typename Number1,
typename Number2>
320 const Number2 &value_2);
329 template <
typename Number>
342 template <
typename Number1,
typename Number2>
355 template <
typename Number1,
typename Number2>
357 const Number2 &value_2);
371 template <
typename Number1,
typename Number2>
384 template <
typename Number1,
typename Number2>
386 const Number2 &value_2);
396 template <
typename number>
452 template <
typename number>
478 static constexpr std::complex<number>
479 conjugate(
const std::complex<number> &x);
495 abs(
const std::complex<number> &x);
502 return std::isnan(x);
509 return std::isfinite(x);
532 inline bool is_finite(
const std::complex<long double> &x)
539 template <
typename number>
548 template <
typename number>
557 template <
typename number>
563#ifdef DEAL_II_WITH_ADOLC
575 template <
typename number>
577 const std::complex<number> &x)
584 template <
typename number>
590#ifdef DEAL_II_WITH_ADOLC
599 template <
typename number>
617 template <
typename T>
622 template <
typename NumberType>
634 template <
typename From,
typename To>
639 template <
typename T>
642 template <
typename F,
typename T>
643 static constexpr auto
644 test(
int) ->
decltype(
f(
static_cast<T
>(std::declval<F>())),
true)
649 template <
typename F,
typename T>
650 static constexpr auto
664 template <
typename T>
681 template <
typename F>
684 std::enable_if_t<!std::is_same_v<std::decay_t<T>, std::decay_t<F>> &&
685 std::is_constructible_v<T, F>> * =
nullptr)
691 template <
typename F>
694 std::enable_if_t<!std::is_same_v<std::decay_t<T>, std::decay_t<F>> &&
695 !std::is_constructible_v<T, F> &&
699 return static_cast<T
>(f);
706 template <
typename F>
710 std::enable_if_t<!std::is_same_v<std::decay_t<T>, std::decay_t<F>> &&
711 !std::is_constructible_v<T, F> &&
719 template <
typename T>
722 static constexpr const std::complex<T> &
728 static constexpr std::complex<T>
731 return std::complex<T>(t);
735 template <
typename U>
736 static constexpr std::complex<T>
748#ifdef DEAL_II_ADOLC_WITH_ADVANCED_BRANCHING
775 template <
typename Number>
795 template <
typename Number>
830 template <
typename Number>
851 template <
typename Number>
863 template <
typename Number1,
typename Number2>
871 template <
typename Number1,
typename Number2>
872 inline constexpr bool
879 template <
typename Number>
887 template <
typename Number1,
typename Number2>
895 template <
typename Number1,
typename Number2>
904 template <
typename Number1,
typename Number2>
912 template <
typename Number1,
typename Number2>
915 const Number2 &value_2)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_HOST_DEVICE
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_HOST_DEVICE_ALWAYS_INLINE
const bool IsBlockVector< VectorType >::value
bool value_is_less_than_or_equal_to(const Number1 &value_1, const Number2 &value_2)
bool value_is_greater_than(const Number1 &value_1, const Number2 &value_2)
constexpr bool values_are_not_equal(const Number1 &value_1, const Number2 &value_2)
constexpr bool value_is_zero(const Number &value)
constexpr bool values_are_equal(const Number1 &value_1, const Number2 &value_2)
bool value_is_less_than(const Number1 &value_1, const Number2 &value_2)
bool is_finite(const double x)
bool value_is_greater_than_or_equal_to(const Number1 &value_1, const Number2 &value_2)
bool is_nan(const double x)
::VectorizedArray< Number, width > log(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > exp(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > tan(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > min(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > max(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > cos(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > sin(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > sqrt(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > pow(const ::VectorizedArray< Number, width > &, const Number p)
::VectorizedArray< Number, width > abs(const ::VectorizedArray< Number, width > &)
static constexpr std::complex< T > value(const std::complex< U > &t)
static constexpr std::complex< T > value(const T &t)
static constexpr const std::complex< T > & value(const std::complex< T > &t)
static constexpr T value(const F &f, std::enable_if_t<!std::is_same_v< std::decay_t< T >, std::decay_t< F > > &&std::is_constructible_v< T, F > > *=nullptr)
static constexpr const T & value(const T &t)
static constexpr T value(const F &f, std::enable_if_t<!std::is_same_v< std::decay_t< T >, std::decay_t< F > > &&!std::is_constructible_v< T, F > &&is_explicitly_convertible< const F, T >::value > *=nullptr)
static T value(const F &f, std::enable_if_t<!std::is_same_v< std::decay_t< T >, std::decay_t< F > > &&!std::is_constructible_v< T, F > &&!is_explicitly_convertible< const F, T >::value &&Differentiation::AD::is_ad_number< F >::value > *=nullptr)
static constexpr unsigned int max_width
static constexpr unsigned int max_width
static constexpr unsigned int max_width
static constexpr auto test(...) -> bool
static constexpr auto test(int) -> decltype(f(static_cast< T >(std::declval< F >())), true)
static constexpr std::complex< number > conjugate(const std::complex< number > &x)
std::complex< double > double_type
static real_type abs(const std::complex< number > &x)
static constexpr real_type abs_square(const std::complex< number > &x)
static constexpr bool is_complex
static constexpr const number & conjugate(const number &x)
static constexpr bool is_complex
static real_type abs(const number &x)
static constexpr real_type abs_square(const number &x)