12#ifndef MFEM_REDUCERS_HPP
13#define MFEM_REDUCERS_HPP
69 static_assert(std::is_integral<T>::value,
"Only works for integral types");
87 static_assert(std::is_integral<T>::value,
"Only works for integral types");
114 static constexpr T
max_val = std::numeric_limits<T>::max();
160 static constexpr T
min_val = std::numeric_limits<T>::min();
199 if (
b.first <
a.first)
203 if (
b.second >
a.second)
213 static constexpr T
min_val = std::numeric_limits<T>::min();
214 static constexpr T
max_val = std::numeric_limits<T>::max();
227 a.first = fmin(
a.first,
b.first);
228 a.second = fmax(
a.second,
b.second);
242 a.first = fmin(
a.first,
b.first);
243 a.second = fmax(
a.second,
b.second);
261 if (
b.first <=
a.first)
273 std::integral_constant<T, std::numeric_limits<T>::max()>::value, I{0}};
282 if (
b.first <=
a.first)
298 if (
b.first <=
a.first)
318 if (
a.first <=
b.first)
330 std::integral_constant<T, std::numeric_limits<T>::max()>::value, I{0}};
339 if (
a.first <=
b.first)
355 if (
a.first <=
b.first)
371 if (
b.min_val <=
a.min_val)
373 a.min_val =
b.min_val;
374 a.min_loc =
b.min_loc;
376 if (
b.max_val >=
a.max_val)
378 a.max_val =
b.max_val;
379 a.max_loc =
b.max_loc;
390 std::integral_constant<T, std::numeric_limits<T>::max()>::value,
391 std::integral_constant<T, std::numeric_limits<T>::min()>::value, I(0),
401 if (
b.min_val <=
a.min_val)
403 a.min_val =
b.min_val;
404 a.min_loc =
b.min_loc;
406 if (
b.max_val >=
a.max_val)
408 a.max_val =
b.max_val;
409 a.max_loc =
b.max_loc;
424 if (
b.min_val <=
a.min_val)
426 a.min_val =
b.min_val;
427 a.min_loc =
b.min_loc;
429 if (
b.max_val >=
a.max_val)
431 a.max_val =
b.max_val;
432 a.max_loc =
b.max_loc;
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void Join(value_type &a, const value_type &b)
static MFEM_HOST_DEVICE void Join(value_type &a, const value_type &b)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void Join(value_type &a, const value_type &b)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void Join(value_type &a, const value_type &b)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void Join(value_type &a, const value_type &b)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void Join(value_type &a, const value_type &b)
static MFEM_HOST_DEVICE void Join(value_type &a, const value_type &b)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void Join(value_type &a, const value_type &b)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void Join(value_type &a, const value_type &b)
static MFEM_HOST_DEVICE void Join(value_type &a, const value_type &b)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void Join(value_type &a, const value_type &b)
static MFEM_HOST_DEVICE void SetInitialValue(T &a)
Pair of values which can be used in device code.
static MFEM_HOST_DEVICE void Join(value_type &a, value_type b)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void Join(value_type &a, value_type b)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void Join(value_type &a, value_type b)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static constexpr T min_val
Two pairs for the min/max values and their location indices.
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void Join(value_type &a, value_type b)
static MFEM_HOST_DEVICE void Join(value_type &a, value_type b)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void Join(value_type &a, const value_type &b)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static constexpr T max_val
static constexpr T min_val
static MFEM_HOST_DEVICE void Join(value_type &a, value_type b)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void Join(value_type &a, value_type b)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void Join(value_type &a, value_type b)
static constexpr T max_val
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)
static MFEM_HOST_DEVICE void Join(value_type &a, const value_type &b)
static MFEM_HOST_DEVICE void Join(value_type &a, const value_type &b)
static MFEM_HOST_DEVICE void SetInitialValue(value_type &a)