5#ifndef DUNE_COMMON_FVECTOR_HH
6#define DUNE_COMMON_FVECTOR_HH
16#include <initializer_list>
42 template<
class K,
int SIZE >
48 typedef typename container_type::size_type
size_type;
51 template<
class K,
int SIZE >
66 template<
typename C,
int SIZE>
73 constexpr static bool value =
true;
76 template<
typename T,
int SIZE>
79 constexpr static bool value =
true;
82 template<
typename T,
int SIZE,
int SIZE1>
85 constexpr static bool value =
false;
94 template<
class K,
int SIZE >
101 std::array<K,SIZE> _data;
124 noexcept(
std::is_nothrow_default_constructible_v<K>)
135 template<Concept::Number S>
136 requires (std::constructible_from<K,S>)
139 noexcept(std::is_nothrow_constructible_v<K,S>)
147 assert(l.size() ==
size());
149 _data[i] = std::data(l)[i];
155 std::is_assignable_v<K&, decltype(std::declval<const V&>()[0])>)
164 template<
class OtherK>
165 requires (std::is_assignable_v<K&, const OtherK&>)
167 noexcept(std::is_nothrow_assignable_v<K&, const OtherK&>)
180 std::is_assignable_v<K&, decltype(std::declval<const V&>()[0])>)
190 template<Concept::Number S>
191 requires std::constructible_from<K,S>
193 noexcept(std::is_nothrow_constructible_v<K,S>)
195 _data.fill(K(scalar));
200 template<
class OtherK>
201 requires (std::is_assignable_v<K&, const OtherK&>)
203 noexcept(std::is_nothrow_assignable_v<K&, const OtherK&>)
253 constexpr const K*
data () const noexcept
279 template<Concept::Number S>
283 return a._data[0] == b;
287 template<Concept::Number S>
291 return a == b._data[0];
299#if __cpp_lib_three_way_comparison
300 return a._data <=> b._data;
307 template<Concept::Number S>
311 return a._data[0] <=> b;
315 template<Concept::Number S>
319 return a <=> b._data[0];
329 template<Concept::Number S>
335 result[i] = a[i] * b;
340 template<Concept::Number S>
346 result[i] = a * b[i];
351 template<Concept::Number S>
357 result[i] = a[i] / b;
362 template<Concept::Number S>
370 template<Concept::Number S>
379 template<Concept::Number S>
388 template<Concept::Number S>
397 template<Concept::Number S>
419 template<
class K,
int SIZE>
423 for (
int i = 0; i < SIZE; ++i)
434 template<
class K,
int SIZE>
438 for (
int i = 0; i < SIZE; ++i) {
439 out &= Dune::isFinite(b[i]);
445 template<
class K,
int SIZE>
449 for (
int i = 0; i < SIZE; ++i) {
450 out |= Dune::isInf(b[i]);
456 template<
class K,
int SIZE,
457 std::enable_if_t<HasNaN<K>::value,
int> = 0>
461 for (
int i = 0; i < SIZE; ++i) {
462 out |= Dune::isNaN(b[i]);
469 std::enable_if_t<HasNaN<K>::value,
int> = 0>
473 return Dune::isUnordered(b[0],c[0]);
Utilities for type computations, constraining overloads, ...
Traits for type conversions and type information.
This file provides some concepts introduced in the C++20 standard library <compare> and <concepts> no...
Compute type of the result of an arithmetic operation involving two different number types.
Some useful basic math stuff.
Type traits to determine the type of reals (when working with complex numbers).
Utility to generate an array with a certain value.
Implements the dense vector interface, with an exchangeable storage class.
Macro for wrapping boundary checks.
constexpr std::array< T, n > filledArray(const T &t)
Return an array filled with the provided value.
Definition filledarray.hh:33
std::istream & operator>>(std::istream &stream, std::tuple< Ts... > &t)
Read a std::tuple.
Definition streamoperators.hh:43
#define DUNE_ASSERT_BOUNDS(cond)
If DUNE_CHECK_BOUNDS is defined: check if condition cond holds; otherwise, do nothing.
Definition boundschecking.hh:30
constexpr decltype(auto) operator*() const
Dereferencing operator.
Definition iteratorfacades.hh:1119
Dune namespace
Definition alignedallocator.hh:13
namespace for customization of math functions with Dune-Semantics
Definition fvector.hh:431
bool isNaN(const FieldVector< K, SIZE > &b, PriorityTag< 2 >, ADLTag)
Returns whether any entry is NaN.
Definition fvector.hh:458
bool isInf(const FieldVector< K, SIZE > &b, PriorityTag< 2 >, ADLTag)
Returns whether any entry is infinite.
Definition fvector.hh:446
auto isFinite(const FieldVector< K, SIZE > &b, PriorityTag< 2 >, ADLTag)
Returns whether all entries are finite.
Definition fvector.hh:435
bool isUnordered(const FieldVector< K, 1 > &b, const FieldVector< K, 1 > &c, PriorityTag< 2 >, ADLTag)
Returns true if either b or c is NaN.
Definition fvector.hh:470
constexpr auto lexicographical_compare_three_way(I1 f1, I1 l1, I2 f2, I2 l2, Cmp comp={}) -> decltype(comp(*f1, *f2))
Lexicographically compares two ranges [first1, last1) and [first2, last2) using three-way comparison ...
Definition algorithm.hh:37
vector space out of a tensor product of fields.
Definition fvector.hh:97
constexpr FieldVector(const FieldVector &)=default
Copy constructor with default behavior.
typename Base::size_type size_type
Definition fvector.hh:109
constexpr FieldVector(const std::initializer_list< K > &l)
Construct from a std::initializer_list of values.
Definition fvector.hh:144
static constexpr size_type size() noexcept
Definition fvector.hh:218
friend constexpr auto operator+(const FieldVector &a, const S &b) noexcept
Binary addition, when using FieldVector<K,1> like K.
Definition fvector.hh:371
friend constexpr auto operator/(const FieldVector &a, const S &b) noexcept
Vector space division by scalar.
Definition fvector.hh:352
typename Base::value_type value_type
Definition fvector.hh:112
static constexpr int dimension
Definition fvector.hh:106
constexpr FieldVector() noexcept(std::is_nothrow_default_constructible_v< K >)
Default constructor, making value-initialized vector with all components set to zero.
Definition fvector.hh:123
friend constexpr auto operator<=>(const FieldVector &a, const FieldVector< T, SIZE > &b) noexcept
Definition fvector.hh:297
friend constexpr bool operator==(const FieldVector &a, const S &b) noexcept
comparing FieldVectors<1> with scalar for equality
Definition fvector.hh:280
constexpr FieldVector(const DenseVector< V > &x)
Constructor from another dense vector if the elements are assignable to K.
Definition fvector.hh:156
constexpr FieldVector & operator=(const DenseVector< V > &x)
Assignment from another dense vector.
Definition fvector.hh:181
constexpr const K * data() const noexcept
Return pointer to underlying array.
Definition fvector.hh:253
value_type & reference
Definition fvector.hh:115
const value_type & const_reference
Definition fvector.hh:118
constexpr reference operator[](size_type i)
Return a reference to the ith element.
Definition fvector.hh:230
constexpr K * data() noexcept
Return pointer to underlying array.
Definition fvector.hh:247
Traits::value_type value_type
export the type representing the field
Definition densevector.hh:265
constexpr derived_type operator-() const
Definition densevector.hh:469
constexpr Iterator end()
end iterator
Definition densevector.hh:368
Traits::size_type size_type
The type used for the index access and size operation.
Definition densevector.hh:274
constexpr DenseVector()=default
constexpr Iterator begin()
begin iterator
Definition densevector.hh:362
constexpr size_type size() const
size method
Definition densevector.hh:351
T field_type
export the type representing the field
Definition ftraits.hh:28
T real_type
export the type representing the real type of the field
Definition ftraits.hh:30
K value_type
Definition fvector.hh:47
std::array< K, SIZE > container_type
Definition fvector.hh:46
container_type::size_type size_type
Definition fvector.hh:48
FieldVector< K, SIZE > derived_type
Definition fvector.hh:45
FieldTraits< K >::real_type real_type
Definition fvector.hh:55
FieldTraits< K >::field_type field_type
Definition fvector.hh:54
TMP to check the size of a DenseVectors statically, if possible.
Definition fvector.hh:68
static constexpr bool value
True if C is not of type FieldVector or its dimension is not equal SIZE.
Definition fvector.hh:73
static constexpr bool value
Definition fvector.hh:79
static constexpr bool value
Definition fvector.hh:85
Tag to make sure the functions in this namespace can be found by ADL.
Definition math.hh:212
Definition matvectraits.hh:31
decltype(std::declval< T1 >()+std::declval< T2 >()) PromotedType
Definition promotiontraits.hh:28
Helper class for tagging priorities.
Definition typeutilities.hh:73
The concept std::three_way_comparable_with specifies that the three way comparison operator <=> on (p...
Definition compare.hh:100