|
| template<typename other_type , typename value_type , typename gradient_type , typename = typename std::enable_if< std::is_arithmetic<other_type>::value || is_dual_number<other_type>::value>::type> |
| MFEM_HOST_DEVICE constexpr auto | operator+ (dual< value_type, gradient_type > a, other_type b) -> dual< value_type, gradient_type > |
| | addition of a dual number and a non-dual number
|
| |
| template<typename other_type , typename value_type , typename gradient_type , typename = typename std::enable_if< std::is_arithmetic<other_type>::value || is_dual_number<other_type>::value>::type> |
| MFEM_HOST_DEVICE constexpr auto | operator+ (other_type a, dual< value_type, gradient_type > b) -> dual< value_type, gradient_type > |
| | addition of a dual number and a non-dual number
|
| |
| template<typename value_type_a , typename gradient_type_a , typename value_type_b , typename gradient_type_b > |
| MFEM_HOST_DEVICE constexpr auto | operator+ (dual< value_type_a, gradient_type_a > a, dual< value_type_b, gradient_type_b > b) -> dual< decltype(a.value+b.value), decltype(a.gradient+b.gradient)> |
| | addition of two dual numbers
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE constexpr auto | operator- (dual< value_type, gradient_type > x) -> dual< value_type, gradient_type > |
| | unary negation of a dual number
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE constexpr auto | operator- (dual< value_type, gradient_type > a, real_t b) -> dual< value_type, gradient_type > |
| | subtraction of a non-dual number from a dual number
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE constexpr auto | operator- (real_t a, dual< value_type, gradient_type > b) -> dual< value_type, gradient_type > |
| | subtraction of a dual number from a non-dual number
|
| |
| template<typename value_type_a , typename gradient_type_a , typename value_type_b , typename gradient_type_b > |
| MFEM_HOST_DEVICE constexpr auto | operator- (dual< value_type_a, gradient_type_a > a, dual< value_type_b, gradient_type_b > b) -> dual< decltype(a.value - b.value), decltype(a.gradient - b.gradient)> |
| | subtraction of two dual numbers
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE constexpr auto | operator* (const dual< value_type, gradient_type > &a, real_t b) -> dual< decltype(a.value *b), decltype(a.gradient *b)> |
| | multiplication of a dual number and a non-dual number
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE constexpr auto | operator* (real_t a, const dual< value_type, gradient_type > &b) -> dual< decltype(a *b.value), decltype(a *b.gradient)> |
| | multiplication of a dual number and a non-dual number
|
| |
| template<typename value_type_a , typename gradient_type_a , typename value_type_b , typename gradient_type_b > |
| MFEM_HOST_DEVICE constexpr auto | operator* (dual< value_type_a, gradient_type_a > a, dual< value_type_b, gradient_type_b > b) -> dual< decltype(a.value *b.value), decltype(b.value *a.gradient+a.value *b.gradient)> |
| | multiplication of two dual numbers
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE constexpr auto | operator/ (const dual< value_type, gradient_type > &a, real_t b) -> dual< decltype(a.value/b), decltype(a.gradient/b)> |
| | division of a dual number by a non-dual number
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE constexpr auto | operator/ (real_t a, const dual< value_type, gradient_type > &b) -> dual< decltype(a/b.value), decltype(-(a/(b.value *b.value)) *b.gradient)> |
| | division of a non-dual number by a dual number
|
| |
| template<typename value_type_a , typename gradient_type_a , typename value_type_b , typename gradient_type_b > |
| MFEM_HOST_DEVICE constexpr auto | operator/ (dual< value_type_a, gradient_type_a > a, dual< value_type_b, gradient_type_b > b) -> dual< decltype(a.value/b.value), decltype((a.gradient/b.value) -(a.value *b.gradient)/(b.value *b.value))> |
| | division of two dual numbers
|
| |
| | mfem_binary_comparator_overload (<) mfem_binary_comparator_overload(< |
| | implement operator<= for dual numbers
|
| |
| gradient_type MFEM_HOST_DEVICE dual< value_type, gradient_type > & | operator+= (dual< value_type, gradient_type > &a, const dual< value_type, gradient_type > &b) |
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > & | operator-= (dual< value_type, gradient_type > &a, const dual< value_type, gradient_type > &b) |
| | compound assignment (-) for dual numbers
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > & | operator+= (dual< value_type, gradient_type > &a, real_t b) |
| | compound assignment (+) for dual numbers with real_t righthand side
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > & | operator-= (dual< value_type, gradient_type > &a, real_t b) |
| | compound assignment (-) for dual numbers with real_t righthand side
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > | abs (dual< value_type, gradient_type > x) |
| | implementation of absolute value function for dual numbers
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > | sqrt (dual< value_type, gradient_type > x) |
| | implementation of square root for dual numbers
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > | cos (dual< value_type, gradient_type > a) |
| | implementation of cosine for dual numbers
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > | sin (dual< value_type, gradient_type > a) |
| | implementation of sine for dual numbers
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > | sinh (dual< value_type, gradient_type > a) |
| | implementation of sinh for dual numbers
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > | acos (dual< value_type, gradient_type > a) |
| | implementation of acos for dual numbers
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > | asin (dual< value_type, gradient_type > a) |
| | implementation of asin for dual numbers
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > | tan (dual< value_type, gradient_type > a) |
| | implementation of tan for dual numbers
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > | atan (dual< value_type, gradient_type > a) |
| | implementation of atan for dual numbers
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > | exp (dual< value_type, gradient_type > a) |
| | implementation of exponential function for dual numbers
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > | log (dual< value_type, gradient_type > a) |
| | implementation of the natural logarithm function for dual numbers
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > | pow (dual< value_type, gradient_type > a, dual< value_type, gradient_type > b) |
| | implementation of a (dual) raised to the b (dual) power
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > | pow (real_t a, dual< value_type, gradient_type > b) |
| | implementation of a (non-dual) raised to the b (dual) power
|
| |
| template<typename value_type > |
| MFEM_HOST_DEVICE value_type | pow (value_type a, value_type b) |
| | implementation of a (non-dual) raised to the b (non-dual) power
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > | pow (dual< value_type, gradient_type > a, real_t b) |
| | implementation of a (dual) raised to the b (non-dual) power
|
| |
| template<typename value_type , typename gradient_type , int... n> |
| std::ostream & | operator<< (std::ostream &os, dual< value_type, gradient_type > A) |
| | overload of operator<< for dual to work with work with standard output streams
|
| |
| MFEM_HOST_DEVICE constexpr dual< real_t, real_t > | make_dual (real_t x) |
| | promote a value to a dual number of the appropriate type
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE T | get_value (const T &arg) |
| | return the "value" part from a given type. For non-dual types, this is just the identity function
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE gradient_type | get_value (dual< value_type, gradient_type > arg) |
| | return the "value" part from a dual number type
|
| |
| template<typename value_type , typename gradient_type > |
| MFEM_HOST_DEVICE gradient_type | get_gradient (dual< value_type, gradient_type > arg) |
| | return the "gradient" part from a dual number type
|
| |
| MFEM_HOST_DEVICE constexpr zero | operator+ (zero, zero) |
| | the sum of two zeros is zero
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE constexpr T | operator+ (zero, T other) |
| | the sum of zero with something non-zero just returns the other value
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE constexpr T | operator+ (T other, zero) |
| | the sum of zero with something non-zero just returns the other value
|
| |
| MFEM_HOST_DEVICE constexpr zero | operator- (zero) |
| | the unary negation of zero is zero
|
| |
| MFEM_HOST_DEVICE constexpr zero | operator- (zero, zero) |
| | the difference of two zeros is zero
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE constexpr T | operator- (zero, T other) |
| | the difference of zero with something else is the unary negation of the other thing
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE constexpr T | operator- (T other, zero) |
| | the difference of something else with zero is the other thing itself
|
| |
| MFEM_HOST_DEVICE constexpr zero | operator* (zero, zero) |
| | the product of two zeros is zero
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE constexpr zero | operator* (zero, T) |
| | the product zero with something else is also zero
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE constexpr zero | operator* (T, zero) |
| | the product zero with something else is also zero
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE constexpr zero | operator/ (zero, T) |
| | zero divided by something is zero
|
| |
| MFEM_HOST_DEVICE constexpr zero | operator+= (zero, zero) |
| | zero plus zero is `zero
|
| |
| MFEM_HOST_DEVICE constexpr zero | operator-= (zero, zero) |
| | zero minus zero is `zero
|
| |
| template<int i> |
| MFEM_HOST_DEVICE zero & | get (zero &x) |
| | let zero be accessed like a tuple
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE zero | dot (const T &, zero) |
| | the dot product of anything with zero is zero
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE zero | dot (zero, const T &) |
| | the dot product of anything with zero is zero
|
| |
| template<typename lambda_type > |
| MFEM_HOST_DEVICE constexpr auto | make_tensor (lambda_type f) -> tensor< decltype(f())> |
| | Creates a tensor of requested dimension by subsequent calls to a functor Can be thought of as analogous to std::transform in that the set of possible indices for dimensions n are transformed into the values of the tensor by f.
|
| |
| template<int n1, typename lambda_type > |
| MFEM_HOST_DEVICE auto | make_tensor (lambda_type f) -> tensor< decltype(f(n1)), n1 > |
| | Creates a tensor of requested dimension by subsequent calls to a functor.
|
| |
| template<int n1, int n2, typename lambda_type > |
| MFEM_HOST_DEVICE auto | make_tensor (lambda_type f) -> tensor< decltype(f(n1, n2)), n1, n2 > |
| | Creates a tensor of requested dimension by subsequent calls to a functor.
|
| |
| template<int n1, int n2, int n3, typename lambda_type > |
| MFEM_HOST_DEVICE auto | make_tensor (lambda_type f) -> tensor< decltype(f(n1, n2, n3)), n1, n2, n3 > |
| | Creates a tensor of requested dimension by subsequent calls to a functor.
|
| |
| template<int n1, int n2, int n3, int n4, typename lambda_type > |
| MFEM_HOST_DEVICE auto | make_tensor (lambda_type f) -> tensor< decltype(f(n1, n2, n3, n4)), n1, n2, n3, n4 > |
| | Creates a tensor of requested dimension by subsequent calls to a functor.
|
| |
| template<typename T , int m, int n> |
| MFEM_HOST_DEVICE tensor< T, n > | get_col (tensor< T, m, n > A, int j) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE tensor< T, 1 > | get_col (tensor< T, 1, 1 > A, int j) |
| | This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
|
| |
| template<typename S , typename T , int... n> |
| MFEM_HOST_DEVICE auto | operator+ (const tensor< S, n... > &A, const tensor< T, n... > &B) -> tensor< decltype(S {}+T{}), n... > |
| | return the sum of two tensors
|
| |
| template<typename T , int... n> |
| MFEM_HOST_DEVICE tensor< T, n... > | operator- (const tensor< T, n... > &A) |
| | return the unary negation of a tensor
|
| |
| template<typename S , typename T , int... n> |
| MFEM_HOST_DEVICE auto | operator- (const tensor< S, n... > &A, const tensor< T, n... > &B) -> tensor< decltype(S {}+T{}), n... > |
| | return the difference of two tensors
|
| |
| template<typename S , typename T , int... n, typename = typename std::enable_if<std::is_arithmetic<S>::value || is_dual_number<S>::value>::type> |
| MFEM_HOST_DEVICE auto | operator* (S scale, const tensor< T, n... > &A) -> tensor< decltype(S {} *T{}), n... > |
| | multiply a tensor by a scalar value
|
| |
| template<typename S , typename T , int... n, typename = typename std::enable_if<std::is_arithmetic<S>::value || is_dual_number<S>::value>::type> |
| MFEM_HOST_DEVICE auto | operator* (const tensor< T, n... > &A, S scale) -> tensor< decltype(T {} *S{}), n... > |
| | multiply a tensor by a scalar value
|
| |
| template<typename S , typename T , int... n, typename = typename std::enable_if<std::is_arithmetic<S>::value || is_dual_number<S>::value>::type> |
| MFEM_HOST_DEVICE auto | operator/ (S scale, const tensor< T, n... > &A) -> tensor< decltype(S {} *T{}), n... > |
| | divide a scalar by each element in a tensor
|
| |
| template<typename S , typename T , int... n, typename = typename std::enable_if<std::is_arithmetic<S>::value || is_dual_number<S>::value>::type> |
| MFEM_HOST_DEVICE auto | operator/ (const tensor< T, n... > &A, S scale) -> tensor< decltype(T {} *S{}), n... > |
| | divide a tensor by a scalar
|
| |
| template<typename S , typename T , int... n> |
| MFEM_HOST_DEVICE tensor< S, n... > & | operator+= (tensor< S, n... > &A, const tensor< T, n... > &B) |
| | compound assignment (+) on tensors
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE tensor< T > & | operator+= (tensor< T > &A, const T &B) |
| | compound assignment (+) on tensors
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE tensor< T, 1 > & | operator+= (tensor< T, 1 > &A, const T &B) |
| | compound assignment (+) on tensors
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE tensor< T, 1, 1 > & | operator+= (tensor< T, 1, 1 > &A, const T &B) |
| | compound assignment (+) on tensors
|
| |
| template<typename T , int... n> |
| MFEM_HOST_DEVICE tensor< T, n... > & | operator+= (tensor< T, n... > &A, zero) |
| | compound assignment (+) between a tensor and zero (no-op)
|
| |
| template<typename S , typename T , int... n> |
| MFEM_HOST_DEVICE tensor< S, n... > & | operator-= (tensor< S, n... > &A, const tensor< T, n... > &B) |
| | compound assignment (-) on tensors
|
| |
| template<typename T , int... n> |
| MFEM_HOST_DEVICE constexpr tensor< T, n... > & | operator-= (tensor< T, n... > &A, zero) |
| | compound assignment (-) between a tensor and zero (no-op)
|
| |
| template<typename S , typename T > |
| MFEM_HOST_DEVICE auto | outer (S A, T B) -> decltype(A *B) |
| | compute the outer product of two tensors
|
| |
| template<typename T , int n, int m> |
| MFEM_HOST_DEVICE tensor< T, n+m > | flatten (tensor< T, n, m > A) |
| |
| template<typename S , typename T , int n> |
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), n > | outer (S A, tensor< T, n > B) |
| |
| template<typename S , typename T , int m> |
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), m > | outer (const tensor< S, m > &A, T B) |
| |
| template<typename T , int n> |
| MFEM_HOST_DEVICE zero | outer (zero, const tensor< T, n > &) |
| |
| template<typename T , int n> |
| MFEM_HOST_DEVICE zero | outer (const tensor< T, n > &, zero) |
| |
| template<typename S , typename T , int m, int n> |
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), m, n > | outer (S A, const tensor< T, m, n > &B) |
| |
| template<typename S , typename T , int m, int n> |
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), m, n > | outer (const tensor< S, m > &A, const tensor< T, n > &B) |
| |
| template<typename S , typename T , int m, int n> |
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), m, n > | outer (const tensor< S, m, n > &A, T B) |
| |
| template<typename S , typename T , int m, int n, int p> |
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), m, n, p > | outer (const tensor< S, m, n > &A, const tensor< T, p > &B) |
| |
| template<typename S , typename T , int m, int n, int p> |
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), m, n, p > | outer (const tensor< S, m > &A, const tensor< T, n, p > &B) |
| |
| template<typename S , typename T , int m, int n, int p, int q> |
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), m, n, p, q > | outer (const tensor< S, m, n > &A, const tensor< T, p, q > &B) |
| |
| template<typename S , typename T , int m, int n> |
| MFEM_HOST_DEVICE auto | inner (const tensor< S, m, n > &A, const tensor< T, m, n > &B) -> decltype(S {} *T{}) |
| | this function contracts over all indices of the two tensor arguments
|
| |
| template<typename S , typename T , int m, int n, int p> |
| MFEM_HOST_DEVICE auto | dot (const tensor< S, m, n > &A, const tensor< T, n, p > &B) -> tensor< decltype(S {} *T{}), m, p > |
| | this function contracts over the "middle" index of the two tensor arguments. E.g. returns tensor C, such that C_ij = sum_kl A_ijkl B_kl.
|
| |
| template<typename S , typename T , int m, int n> |
| MFEM_HOST_DEVICE auto | dot (const tensor< S, m > &A, const tensor< T, m, n > &B) -> tensor< decltype(S {} *T{}), n > |
| |
| template<typename S , typename T , int m, int n> |
| MFEM_HOST_DEVICE auto | dot (const tensor< S, m, n > &A, const tensor< T, n > &B) -> tensor< decltype(S {} *T{}), m > |
| |
| template<typename S , typename T , int m, int n, int p> |
| MFEM_HOST_DEVICE auto | dot (const tensor< S, m, n, p > &A, const tensor< T, p > &B) -> tensor< decltype(S {} *T{}), m, n > |
| |
| template<typename S , typename T , int m> |
| MFEM_HOST_DEVICE auto | dot (const tensor< S, m > &A, const tensor< T, m > &B) -> decltype(S {} *T{}) |
| | Dot product of a vector . vector and vector . tensor.
|
| |
| template<typename T , int m> |
| MFEM_HOST_DEVICE auto | dot (const tensor< T, m > &A, const tensor< T, m > &B) -> decltype(T {}) |
| |
| template<typename S , typename T , int m, int n0, int n1, int... n> |
| MFEM_HOST_DEVICE auto | dot (const tensor< S, m > &A, const tensor< T, m, n0, n1, n... > &B) -> tensor< decltype(S {} *T{}), n0, n1, n... > |
| |
| template<typename S , typename T , typename U , int m, int n> |
| MFEM_HOST_DEVICE auto | dot (const tensor< S, m > &u, const tensor< T, m, n > &A, const tensor< U, n > &v) -> decltype(S {} *T{} *U{}) |
| |
| template<typename S , typename T , int m, int n, int p, int q> |
| MFEM_HOST_DEVICE auto | ddot (const tensor< S, m, n, p, q > &A, const tensor< T, p, q > &B) -> tensor< decltype(S {} *T{}), m, n > |
| | real_t dot product, contracting over the two "middle" indices
|
| |
| template<typename S , typename T , int m, int n, int p> |
| MFEM_HOST_DEVICE auto | ddot (const tensor< S, m, n, p > &A, const tensor< T, n, p > &B) -> tensor< decltype(S {} *T{}), m > |
| |
| template<typename S , typename T , int m, int n> |
| MFEM_HOST_DEVICE auto | ddot (const tensor< S, m, n > &A, const tensor< T, m, n > &B) -> decltype(S {} *T{}) |
| |
| template<typename S , typename T , int... m, int... n> |
| MFEM_HOST_DEVICE auto | operator* (const tensor< S, m... > &A, const tensor< T, n... > &B) -> decltype(dot(A, B)) |
| | this is a shorthand for dot(A, B)
|
| |
| template<typename T , int m> |
| MFEM_HOST_DEVICE T | sqnorm (const tensor< T, m > &A) |
| | Returns the squared Frobenius norm of the tensor.
|
| |
| template<typename T , int m, int n> |
| MFEM_HOST_DEVICE T | sqnorm (const tensor< T, m, n > &A) |
| | Returns the squared Frobenius norm of the tensor.
|
| |
| template<typename T , int... n> |
| MFEM_HOST_DEVICE T | norm (const tensor< T, n... > &A) |
| | Returns the Frobenius norm of the tensor.
|
| |
| template<typename T , int n, int m> |
| MFEM_HOST_DEVICE T | weight (const tensor< T, n, m > &A) |
| |
| template<typename T , int... n> |
| MFEM_HOST_DEVICE auto | normalize (const tensor< T, n... > &A) -> decltype(A/norm(A)) |
| | Normalizes the tensor Each element is divided by the Frobenius norm of the tensor,.
|
| |
| template<typename T , int n> |
| MFEM_HOST_DEVICE T | tr (const tensor< T, n, n > &A) |
| | Returns the trace of a square matrix.
|
| |
| template<typename T , int n> |
| MFEM_HOST_DEVICE tensor< T, n, n > | sym (const tensor< T, n, n > &A) |
| | Returns the symmetric part of a square matrix.
|
| |
| template<typename T , int n> |
| MFEM_HOST_DEVICE tensor< T, n, n > | dev (const tensor< T, n, n > &A) |
| | Calculates the deviator of a matrix (rank-2 tensor)
|
| |
| template<int dim> |
| MFEM_HOST_DEVICE tensor< real_t, dim, dim > | IdentityMatrix () |
| | Obtains the identity matrix of the specified dimension.
|
| |
| template<typename T , int m, int n> |
| MFEM_HOST_DEVICE tensor< T, n, m > | transpose (const tensor< T, m, n > &A) |
| | Returns the transpose of the matrix.
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE T | det (const tensor< T, 1, 1 > &A) |
| | Returns the determinant of a matrix.
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE T | det (const tensor< T, 2, 2 > &A) |
| | This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE T | det (const tensor< T, 3, 3 > &A) |
| | This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE std::tuple< tensor< T, 1 >, tensor< T, 1, 1 > > | eig (tensor< T, 1, 1 > &A) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE std::tuple< tensor< T, 2 >, tensor< T, 2, 2 > > | eig (tensor< T, 2, 2 > &A) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE void | GetScalingFactor (const T &d_max, T &mult) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE T | calcsv (const tensor< T, 1, 1 > A, const int i) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE T | calcsv (const tensor< T, 2, 2 > A, const int i) |
| | Compute the i-th singular value of a 2x2 matrix A.
|
| |
| template<int n> |
| MFEM_HOST_DEVICE bool | is_symmetric (tensor< real_t, n, n > A, real_t abs_tolerance=1.0e-8_r) |
| | Return whether a square rank 2 tensor is symmetric.
|
| |
| MFEM_HOST_DEVICE bool | is_symmetric_and_positive_definite (tensor< real_t, 2, 2 > A) |
| | Return whether a matrix is symmetric and positive definite This check uses Sylvester's criterion, checking that each upper left subtensor has a determinant greater than zero.
|
| |
| MFEM_HOST_DEVICE bool | is_symmetric_and_positive_definite (tensor< real_t, 3, 3 > A) |
| | This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
|
| |
| template<typename T , int n> |
| MFEM_HOST_DEVICE tensor< T, n > | linear_solve (tensor< T, n, n > A, const tensor< T, n > b) |
| | Solves Ax = b for x using Gaussian elimination with partial pivoting.
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE tensor< T, 1, 1 > | inv (const tensor< T, 1, 1 > &A) |
| | Inverts a matrix.
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE tensor< T, 2, 2 > | inv (const tensor< T, 2, 2 > &A) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE tensor< T, 3, 3 > | inv (const tensor< T, 3, 3 > &A) |
| |
| template<typename T , int n> |
| MFEM_HOST_DEVICE std::enable_if<(n >3), tensor< T, n, n > >::type | inv (const tensor< T, n, n > &A) |
| |
| template<typename value_type , typename gradient_type , int n> |
| MFEM_HOST_DEVICE dual< value_type, gradient_type > | inv (tensor< dual< value_type, gradient_type >, n, n > A) |
| |
| template<typename T , int... n> |
| std::ostream & | operator<< (std::ostream &os, const tensor< T, n... > &A) |
| | recursively serialize the entries in a tensor to an output stream. Output format uses braces and comma separators to mimic C syntax for multidimensional array initialization.
|
| |
| template<int n> |
| MFEM_HOST_DEVICE tensor< real_t, n > | chop (const tensor< real_t, n > &A) |
| | replace all entries in a tensor satisfying |x| < 1.0e-10 by literal zero
|
| |
| template<int m, int n> |
| MFEM_HOST_DEVICE tensor< real_t, m, n > | chop (const tensor< real_t, m, n > &A) |
| | This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
|
| |
| MFEM_HOST_DEVICE zero | get_gradient (real_t) |
| | Retrieves the gradient component of a real_t (which is nothing)
|
| |
| template<int... n> |
| MFEM_HOST_DEVICE zero | get_gradient (const tensor< real_t, n... > &) |
| | get the gradient of type tensor (note: since its stored type is not a dual number, the derivative term is identically zero)
|
| |
| MFEM_HOST_DEVICE zero | chain_rule (const zero, const zero) |
| | evaluate the change (to first order) in a function, f, given a small change in the input argument, dx.
|
| |
| template<typename T > |
| MFEM_HOST_DEVICE zero | chain_rule (const zero, const T) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE zero | chain_rule (const T, const zero) |
| |
| MFEM_HOST_DEVICE real_t | chain_rule (const real_t df_dx, const real_t dx) |
| |
| template<int... n> |
| MFEM_HOST_DEVICE auto | chain_rule (const tensor< real_t, n... > &df_dx, const real_t dx) -> decltype(df_dx *dx) |
| |
| template<int m> |
| MFEM_HOST_DEVICE constexpr isotropic_tensor< real_t, m, m > | IsotropicIdentity () |
| |
| template<typename S , typename T , int m> |
| MFEM_HOST_DEVICE constexpr auto | operator* (S scale, const isotropic_tensor< T, m, m > &I) -> isotropic_tensor< decltype(S {} *T{}), m, m > |
| |
| template<typename S , typename T , int m> |
| MFEM_HOST_DEVICE constexpr auto | operator* (const isotropic_tensor< T, m, m > &I, const S scale) -> isotropic_tensor< decltype(S {}, T{}), m, m > |
| |
| template<typename S , typename T , int m> |
| MFEM_HOST_DEVICE constexpr auto | operator+ (const isotropic_tensor< S, m, m > &I1, const isotropic_tensor< T, m, m > &I2) -> isotropic_tensor< decltype(S {}+T{}), m, m > |
| |
| template<typename S , typename T , int m> |
| MFEM_HOST_DEVICE constexpr auto | operator- (const isotropic_tensor< S, m, m > &I1, const isotropic_tensor< T, m, m > &I2) -> isotropic_tensor< decltype(S {} - T{}), m, m > |
| |
| template<typename S , typename T , int m> |
| MFEM_HOST_DEVICE auto | operator+ (const isotropic_tensor< S, m, m > &I, const tensor< T, m, m > &A) -> tensor< decltype(S {}+T{}), m, m > |
| |
| template<typename S , typename T , int m> |
| MFEM_HOST_DEVICE auto | operator+ (const tensor< S, m, m > &A, const isotropic_tensor< T, m, m > &I) -> tensor< decltype(S {}+T{}), m, m > |
| |
| template<typename S , typename T , int m> |
| MFEM_HOST_DEVICE auto | operator- (const isotropic_tensor< S, m, m > &I, const tensor< T, m, m > &A) -> tensor< decltype(S {} - T{}), m, m > |
| |
| template<typename S , typename T , int m> |
| MFEM_HOST_DEVICE auto | operator- (const tensor< S, m, m > &A, const isotropic_tensor< T, m, m > &I) -> tensor< decltype(S {} - T{}), m, m > |
| |
| template<typename S , typename T , int m, int... n> |
| MFEM_HOST_DEVICE constexpr auto | dot (const isotropic_tensor< S, m, m > &I, const tensor< T, m, n... > &A) -> tensor< decltype(S {} *T{}), m, n... > |
| |
| template<typename S , typename T , int m, int... n> |
| MFEM_HOST_DEVICE auto | dot (const tensor< S, n... > &A, const isotropic_tensor< T, m, m > &I) -> tensor< decltype(S {} *T{}), n... > |
| |
| template<typename S , typename T , int m, int... n> |
| MFEM_HOST_DEVICE constexpr auto | ddot (const isotropic_tensor< S, m, m > &I, const tensor< T, m, m > &A) -> decltype(S {} *T{}) |
| |
| template<typename T , int m> |
| MFEM_HOST_DEVICE constexpr auto | sym (const isotropic_tensor< T, m, m > &I) -> isotropic_tensor< T, m, m > |
| |
| template<typename T , int m> |
| MFEM_HOST_DEVICE constexpr auto | antisym (const isotropic_tensor< T, m, m > &) -> zero |
| |
| template<typename T , int m> |
| MFEM_HOST_DEVICE constexpr auto | tr (const isotropic_tensor< T, m, m > &I) -> decltype(T {} *m) |
| |
| template<typename T , int m> |
| MFEM_HOST_DEVICE constexpr auto | transpose (const isotropic_tensor< T, m, m > &I) -> isotropic_tensor< T, m, m > |
| |
| template<typename T , int m> |
| MFEM_HOST_DEVICE constexpr auto | det (const isotropic_tensor< T, m, m > &I) -> T |
| |
| template<typename T , int m> |
| MFEM_HOST_DEVICE constexpr auto | norm (const isotropic_tensor< T, m, m > &I) -> T |
| |
| template<typename T , int m> |
| MFEM_HOST_DEVICE constexpr auto | sqnorm (const isotropic_tensor< T, m, m > &I) -> T |
| |
| template<int m> |
| MFEM_HOST_DEVICE constexpr auto | SymmetricIdentity () -> isotropic_tensor< real_t, m, m, m, m > |
| |
| template<int m> |
| MFEM_HOST_DEVICE constexpr auto | AntisymmetricIdentity () -> isotropic_tensor< real_t, m, m, m, m > |
| |
| template<typename S , typename T , int m> |
| MFEM_HOST_DEVICE constexpr auto | operator* (S scale, isotropic_tensor< T, m, m, m, m > I) -> isotropic_tensor< decltype(S {} *T{}), m, m, m, m > |
| |
| template<typename S , typename T , int m> |
| MFEM_HOST_DEVICE constexpr auto | operator* (isotropic_tensor< S, m, m, m, m > I, T scale) -> isotropic_tensor< decltype(S {} *T{}), m, m, m, m > |
| |
| template<typename S , typename T , int m> |
| MFEM_HOST_DEVICE constexpr auto | operator+ (isotropic_tensor< S, m, m, m, m > I1, isotropic_tensor< T, m, m, m, m > I2) -> isotropic_tensor< decltype(S {}+T{}), m, m, m, m > |
| |
| template<typename S , typename T , int m> |
| MFEM_HOST_DEVICE constexpr auto | operator- (isotropic_tensor< S, m, m, m, m > I1, isotropic_tensor< T, m, m, m, m > I2) -> isotropic_tensor< decltype(S {} - T{}), m, m, m, m > |
| |
| template<typename S , typename T , int m, int... n> |
| MFEM_HOST_DEVICE constexpr auto | ddot (const isotropic_tensor< S, m, m, m, m > &I, const tensor< T, m, m > &A) -> tensor< decltype(S {} *T{}), m, m > |
| |
| template<typename input_fop_ts , size_t num_inputs, typename output_fop_t > |
| MFEM_HOST_DEVICE void | assemble_element_mat_t3d (const DeviceTensor< 4, real_t > &A, const DeviceTensor< 3, real_t > &fhat, const DeviceTensor< 5, const real_t > &qpdc, const DeviceTensor< 1, const real_t > &itod, const input_fop_ts &inputs, const output_fop_t &output, const std::array< DofToQuadMap, num_inputs > &input_dtqmaps, const DofToQuadMap &output_dtqmap, std::array< DeviceTensor< 1 >, 6 > &scratch_shmem, const int &q1d, const int &td1d) |
| | Assemble element matrix for three dimensional data.
|
| |
| template<typename input_fop_ts , size_t num_inputs, typename output_fop_t > |
| MFEM_HOST_DEVICE void | assemble_element_mat_t2d (const DeviceTensor< 4, real_t > &A, const DeviceTensor< 3, real_t > &fhat, const DeviceTensor< 5, const real_t > &qpdc, const DeviceTensor< 1, const real_t > &itod, const input_fop_ts &inputs, const output_fop_t &output, const std::array< DofToQuadMap, num_inputs > &input_dtqmaps, const DofToQuadMap &output_dtqmap, std::array< DeviceTensor< 1 >, 6 > &scratch_shmem, const int &q1d, const int &td1d) |
| | Assemble element matrix for two dimensional data.
|
| |
| template<typename input_fop_ts , size_t num_inputs, typename output_fop_t > |
| MFEM_HOST_DEVICE void | assemble_element_mat_naive (const DeviceTensor< 4, real_t > &A, const DeviceTensor< 3, real_t > &fhat, const DeviceTensor< 5, const real_t > &qpdc, const DeviceTensor< 1, const real_t > &itod, const input_fop_ts &inputs, const output_fop_t &output, const std::array< DofToQuadMap, num_inputs > &input_dtqmaps, const DofToQuadMap &output_dtqmap, std::array< DeviceTensor< 1 >, 6 > &scratch_shmem, const int &dimension, const int &q1d, const int &td1d, const bool &use_sum_factorization) |
| | Assemble element matrix for two or three dimensional data.
|
| |
| template<typename output_t > |
| MFEM_HOST_DEVICE void | map_quadrature_data_to_fields_impl (DeviceTensor< 2, real_t > &y, const DeviceTensor< 3, real_t > &f, const output_t &output, const DofToQuadMap &dtq) |
| |
| template<typename output_t > |
| MFEM_HOST_DEVICE void | map_quadrature_data_to_fields_tensor_impl_1d (DeviceTensor< 2, real_t > &y, const DeviceTensor< 3, real_t > &f, const output_t &output, const DofToQuadMap &dtq, std::array< DeviceTensor< 1 >, 6 > &scratch_mem) |
| |
| template<typename output_t > |
| MFEM_HOST_DEVICE void | map_quadrature_data_to_fields_tensor_impl_2d (DeviceTensor< 2, real_t > &y, const DeviceTensor< 3, real_t > &f, const output_t &output, const DofToQuadMap &dtq, std::array< DeviceTensor< 1 >, 6 > &scratch_mem) |
| |
| template<typename output_t > |
| MFEM_HOST_DEVICE void | map_quadrature_data_to_fields_tensor_impl_3d (DeviceTensor< 2, real_t > &y, const DeviceTensor< 3, real_t > &f, const output_t &output, const DofToQuadMap &dtq, std::array< DeviceTensor< 1 >, 6 > &scratch_mem) |
| |
| template<typename output_t > |
| MFEM_HOST_DEVICE void | map_quadrature_data_to_fields (DeviceTensor< 2, real_t > &y, const DeviceTensor< 3, real_t > &f, const output_t &output, const DofToQuadMap &dtq, std::array< DeviceTensor< 1 >, 6 > &scratch_mem, const int &dimension, const bool &use_sum_factorization) |
| |
| template<typename field_operator_t > |
| MFEM_HOST_DEVICE void | map_field_to_quadrature_data_tensor_product_3d (DeviceTensor< 2 > &field_qp, const DofToQuadMap &dtq, const DeviceTensor< 1 > &field_e, const field_operator_t &input, const DeviceTensor< 1, const real_t > &integration_weights, const std::array< DeviceTensor< 1 >, 6 > &scratch_mem) |
| |
| template<typename field_operator_t > |
| MFEM_HOST_DEVICE void | map_field_to_quadrature_data_tensor_product_2d (DeviceTensor< 2 > &field_qp, const DofToQuadMap &dtq, const DeviceTensor< 1 > &field_e, const field_operator_t &input, const DeviceTensor< 1, const real_t > &integration_weights, const std::array< DeviceTensor< 1 >, 6 > &scratch_mem) |
| |
| template<typename field_operator_t > |
| MFEM_HOST_DEVICE void | map_field_to_quadrature_data_tensor_product_1d (DeviceTensor< 2 > &field_qp, const DofToQuadMap &dtq, const DeviceTensor< 1 > &field_e, const field_operator_t &input, const DeviceTensor< 1, const real_t > &integration_weights, const std::array< DeviceTensor< 1 >, 6 > &scratch_mem) |
| |
| template<typename field_operator_t > |
| MFEM_HOST_DEVICE void | map_field_to_quadrature_data (DeviceTensor< 2 > field_qp, const DofToQuadMap &dtq, const DeviceTensor< 1 > &field_e, const field_operator_t &input, const DeviceTensor< 1, const real_t > &integration_weights) |
| |
| template<typename field_operator_ts , size_t num_inputs, size_t num_fields> |
| MFEM_HOST_DEVICE void | map_fields_to_quadrature_data (std::array< DeviceTensor< 2 >, num_inputs > &fields_qp, const std::array< DeviceTensor< 1 >, num_fields > &fields_e, const std::array< DofToQuadMap, num_inputs > &dtqmaps, const std::array< size_t, num_inputs > &input_to_field, const field_operator_ts &fops, const DeviceTensor< 1, const real_t > &integration_weights, const std::array< DeviceTensor< 1 >, 6 > &scratch_mem, const int &dimension, const bool &use_sum_factorization=false) |
| |
| template<typename field_operator_t > |
| MFEM_HOST_DEVICE void | map_field_to_quadrature_data_conditional (DeviceTensor< 2 > &field_qp, const DeviceTensor< 1 > &field_e, const DofToQuadMap &dtqmap, field_operator_t &fop, const DeviceTensor< 1, const real_t > &integration_weights, const std::array< DeviceTensor< 1 >, 6 > &scratch_mem, const bool &condition, const int &dimension, const bool &use_sum_factorization=false) |
| |
| template<size_t num_fields, size_t num_inputs, typename field_operator_ts > |
| MFEM_HOST_DEVICE void | map_fields_to_quadrature_data_conditional (std::array< DeviceTensor< 2 >, num_inputs > &fields_qp, const std::array< DeviceTensor< 1, const real_t >, num_fields > &fields_e, const std::array< DofToQuadMap, num_inputs > &dtqmaps, field_operator_ts fops, const DeviceTensor< 1, const real_t > &integration_weights, const std::array< DeviceTensor< 1 >, 6 > &scratch_mem, const std::array< bool, num_inputs > &conditions, const bool &use_sum_factorization=false) |
| |
| template<size_t num_inputs, typename field_operator_ts > |
| MFEM_HOST_DEVICE void | map_direction_to_quadrature_data_conditional (std::array< DeviceTensor< 2 >, num_inputs > &directions_qp, const DeviceTensor< 1 > &direction_e, const std::array< DofToQuadMap, num_inputs > &dtqmaps, field_operator_ts fops, const DeviceTensor< 1, const real_t > &integration_weights, const std::array< DeviceTensor< 1 >, 6 > &scratch_mem, const std::array< bool, num_inputs > &conditions, const int &dimension, const bool &use_sum_factorization) |
| |
| template<typename qf_param_ts , typename qfunc_t , std::size_t num_fields> |
| MFEM_HOST_DEVICE void | call_qfunction (qfunc_t &qfunc, const std::array< DeviceTensor< 2 >, num_fields > &input_shmem, DeviceTensor< 2 > &residual_shmem, const int &rs_qp, const int &num_qp, const int &q1d, const int &dimension, const bool &use_sum_factorization) |
| | Call a qfunction with the given parameters.
|
| |
| template<typename qf_param_ts , typename qfunc_t , std::size_t num_fields> |
| MFEM_HOST_DEVICE void | call_qfunction_derivative_action (qfunc_t &qfunc, const std::array< DeviceTensor< 2 >, num_fields > &input_shmem, const std::array< DeviceTensor< 2 >, num_fields > &shadow_shmem, DeviceTensor< 2 > &residual_shmem, const int &das_qp, const int &num_qp, const int &q1d, const int &dimension, const bool &use_sum_factorization) |
| | Call a qfunction with the given parameters and compute it's derivative action.
|
| |
| template<typename qf_param_ts , typename qfunc_t , std::size_t num_fields> |
| MFEM_HOST_DEVICE void | call_qfunction_derivative (qfunc_t &qfunc, const std::array< DeviceTensor< 2 >, num_fields > &input_shmem, const std::array< DeviceTensor< 2 >, num_fields > &shadow_shmem, DeviceTensor< 2 > &residual_shmem, DeviceTensor< 5 > &qpdc, const DeviceTensor< 1, const real_t > &itod, const int &das_qp, const int &q1d, const int &dimension, const bool &use_sum_factorization) |
| | Call a qfunction with the given parameters and compute it's derivative represented by the Jacobian on each quadrature point.
|
| |
| template<size_t num_fields> |
| MFEM_HOST_DEVICE void | apply_qpdc (DeviceTensor< 3 > &fhat, const std::array< DeviceTensor< 2 >, num_fields > &shadow_shmem, const DeviceTensor< 5, const real_t > &qpdc, const DeviceTensor< 1, const real_t > &itod, const int &q1d, const int &dimension, const bool &use_sum_factorization) |
| | Apply the quadrature point data cache (qpdc) to a vector (usually a direction).
|
| |
| template<typename qfunc_t , typename args_ts , size_t num_args> |
| MFEM_HOST_DEVICE void | apply_kernel (DeviceTensor< 1, real_t > &f_qp, const qfunc_t &qfunc, args_ts &args, const std::array< DeviceTensor< 2 >, num_args > &u, int qp) |
| |
| template<typename qfunc_t , typename arg_ts , size_t num_args> |
| MFEM_HOST_DEVICE void | apply_kernel_native_dual (DeviceTensor< 1, real_t > &f_qp, const qfunc_t &qfunc, arg_ts &args, const std::array< DeviceTensor< 2 >, num_args > &u, const std::array< DeviceTensor< 2 >, num_args > &v, const int &qp_idx) |
| |
| template<typename func_t , typename... arg_ts> |
| MFEM_HOST_DEVICE auto | qfunction_wrapper (const func_t &f, arg_ts &&...args) |
| |
| template<typename qfunc_t , typename arg_ts , std::size_t... Is, typename inactive_arg_ts > |
| MFEM_HOST_DEVICE auto | fwddiff_apply_enzyme_indexed (qfunc_t &qfunc, arg_ts &&args, arg_ts &&shadow_args, std::index_sequence< Is... >, inactive_arg_ts &&inactive_args, std::index_sequence<>) |
| |
| template<typename qfunc_t , typename arg_ts , std::size_t... Is, typename inactive_arg_ts , std::size_t... Js> |
| MFEM_HOST_DEVICE auto | fwddiff_apply_enzyme_indexed (qfunc_t &qfunc, arg_ts &&args, arg_ts &&shadow_args, std::index_sequence< Is... >, inactive_arg_ts &&inactive_args, std::index_sequence< Js... >) |
| |
| template<typename qfunc_t , typename arg_ts , typename inactive_arg_ts > |
| MFEM_HOST_DEVICE auto | fwddiff_apply_enzyme (qfunc_t &qfunc, arg_ts &&args, arg_ts &&shadow_args, inactive_arg_ts &&inactive_args) |
| |
| template<typename qfunc_t , typename arg_ts , size_t num_args> |
| MFEM_HOST_DEVICE void | apply_kernel_fwddiff_enzyme (DeviceTensor< 1, real_t > &f_qp, qfunc_t &qfunc, arg_ts &args, arg_ts &shadow_args, const std::array< DeviceTensor< 2 >, num_args > &u, const std::array< DeviceTensor< 2 >, num_args > &v, int qp_idx) |
| |
| template<typename T0 , typename T1 , typename T2 > |
| MFEM_HOST_DEVICE void | process_qf_arg (const T0 &, const T1 &, T2 &) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE void | process_qf_arg (const DeviceTensor< 1, T > &u, const DeviceTensor< 1, T > &v, T &arg) |
| |
| template<typename T , int n, int m> |
| MFEM_HOST_DEVICE void | process_qf_arg (const DeviceTensor< 1 > &u, tensor< dual< T, T >, n, m > &arg) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE void | process_qf_arg (const DeviceTensor< 1 > &u, dual< T, T > &arg) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE void | process_qf_arg (const DeviceTensor< 1 > &u, const DeviceTensor< 1 > &v, dual< T, T > &arg) |
| |
| template<typename T , int n> |
| MFEM_HOST_DEVICE void | process_qf_arg (const DeviceTensor< 1 > &u, const DeviceTensor< 1 > &v, tensor< dual< T, T >, n > &arg) |
| |
| template<typename T , int n, int m> |
| MFEM_HOST_DEVICE void | process_qf_arg (const DeviceTensor< 1 > &u, const DeviceTensor< 1 > &v, tensor< dual< T, T >, n, m > &arg) |
| |
| template<typename T , int n> |
| MFEM_HOST_DEVICE void | process_qf_result (DeviceTensor< 1, T > &r, const tensor< dual< T, T >, n > &x) |
| |
| template<typename T , int n, int m> |
| MFEM_HOST_DEVICE void | process_qf_result (DeviceTensor< 1, T > &r, const tensor< dual< T, T >, n, m > &x) |
| |
| template<typename arg_type > |
| MFEM_HOST_DEVICE void | process_qf_arg (const DeviceTensor< 2 > &u, const DeviceTensor< 2 > &v, arg_type &arg, const int &qp) |
| |
| template<size_t num_fields, typename qf_args > |
| MFEM_HOST_DEVICE void | process_qf_args (const std::array< DeviceTensor< 2 >, num_fields > &u, const std::array< DeviceTensor< 2 >, num_fields > &v, qf_args &args, const int &qp) |
| |
| template<typename T , int n, int m> |
| MFEM_HOST_DEVICE void | process_derivative_from_native_dual (DeviceTensor< 1, T > &r, const tensor< dual< T, T >, n, m > &x) |
| |
| template<typename T , int n> |
| MFEM_HOST_DEVICE void | process_derivative_from_native_dual (DeviceTensor< 1, T > &r, const tensor< dual< T, T >, n > &x) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE void | process_derivative_from_native_dual (DeviceTensor< 1, T > &r, const dual< T, T > &x) |
| |
| template<typename T0 , typename T1 > |
| MFEM_HOST_DEVICE void | process_qf_arg (const T0 &, T1 &) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE void | process_qf_arg (const DeviceTensor< 1, T > &u, T &arg) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE void | process_qf_arg (const DeviceTensor< 1, T > &u, tensor< T > &arg) |
| |
| template<typename T , int n> |
| MFEM_HOST_DEVICE void | process_qf_arg (const DeviceTensor< 1 > &u, tensor< T, n > &arg) |
| |
| template<typename T , int n, int m> |
| MFEM_HOST_DEVICE void | process_qf_arg (const DeviceTensor< 1 > &u, tensor< T, n, m > &arg) |
| |
| template<typename arg_type > |
| MFEM_HOST_DEVICE void | process_qf_arg (const DeviceTensor< 2 > &u, arg_type &arg, int qp) |
| |
| template<size_t num_fields, typename qf_args > |
| MFEM_HOST_DEVICE void | process_qf_args (const std::array< DeviceTensor< 2 >, num_fields > &u, qf_args &args, const int &qp) |
| |
| template<typename T0 , typename T1 > |
| MFEM_HOST_DEVICE Vector | process_qf_result (T0, T1) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE void | process_qf_result (DeviceTensor< 1, T > &r, const T &x) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE void | process_qf_result (DeviceTensor< 1 > &r, const dual< T, T > &x) |
| |
| template<typename T > |
| MFEM_HOST_DEVICE void | process_qf_result (DeviceTensor< 1, T > &r, const tensor< T > &x) |
| |
| template<typename T , int n> |
| MFEM_HOST_DEVICE void | process_qf_result (DeviceTensor< 1, T > &r, const tensor< T, n > &x) |
| |
| template<typename T , int n, int m> |
| MFEM_HOST_DEVICE void | process_qf_result (DeviceTensor< 1, T > &r, const tensor< T, n, m > &x) |
| |
| template<typename T , int n, int m> |
| MFEM_HOST_DEVICE void | process_qf_arg (const DeviceTensor< 1, T > &u, const DeviceTensor< 1, T > &v, tensor< T, n, m > &arg) |
| |
| template<typename... T> |
| MFEM_HOST_DEVICE | tuple (T...) -> tuple< T... > |
| | Class template argument deduction rule for tuples.
|
| |
| template<typename... T> |
| MFEM_HOST_DEVICE tuple< T... > | make_tuple (const T &... args) |
| | helper function for combining a list of values into a tuple
|
| |
| template<int i, typename... T> |
| MFEM_HOST_DEVICE constexpr auto & | get (tuple< T... > &values) |
| | return a reference to the ith tuple entry
|
| |
| template<int i, typename... T> |
| MFEM_HOST_DEVICE constexpr const auto & | get (const tuple< T... > &values) |
| | return a copy of the ith tuple entry
|
| |
| template<int i, typename... T> |
| MFEM_HOST_DEVICE constexpr auto | type (const tuple< T... > &values) |
| | a function intended to be used for extracting the ith type from a tuple.
|
| |
| template<typename... S, typename... T, int... i> |
| MFEM_HOST_DEVICE constexpr auto | plus_helper (const tuple< S... > &x, const tuple< T... > &y, std::integer_sequence< int, i... >) |
| | A helper function for the + operator of tuples.
|
| |
| template<typename... S, typename... T> |
| MFEM_HOST_DEVICE constexpr auto | operator+ (const tuple< S... > &x, const tuple< T... > &y) |
| | return a tuple of values defined by elementwise sum of x and y
|
| |
| template<typename... T, int... i> |
| MFEM_HOST_DEVICE constexpr void | plus_equals_helper (tuple< T... > &x, const tuple< T... > &y, std::integer_sequence< int, i... >) |
| | A helper function for the += operator of tuples.
|
| |
| template<typename... T> |
| MFEM_HOST_DEVICE constexpr auto | operator+= (tuple< T... > &x, const tuple< T... > &y) |
| | add values contained in y, to the tuple x
|
| |
| template<typename... T, int... i> |
| MFEM_HOST_DEVICE constexpr void | minus_equals_helper (tuple< T... > &x, const tuple< T... > &y, std::integer_sequence< int, i... >) |
| | A helper function for the -= operator of tuples.
|
| |
| template<typename... T> |
| MFEM_HOST_DEVICE constexpr auto | operator-= (tuple< T... > &x, const tuple< T... > &y) |
| | add values contained in y, to the tuple x
|
| |
| template<typename... S, typename... T, int... i> |
| MFEM_HOST_DEVICE constexpr auto | minus_helper (const tuple< S... > &x, const tuple< T... > &y, std::integer_sequence< int, i... >) |
| | A helper function for the - operator of tuples.
|
| |
| template<typename... S, typename... T> |
| MFEM_HOST_DEVICE constexpr auto | operator- (const tuple< S... > &x, const tuple< T... > &y) |
| | return a tuple of values defined by elementwise difference of x and y
|
| |
| template<typename... T, int... i> |
| MFEM_HOST_DEVICE constexpr auto | unary_minus_helper (const tuple< T... > &x, std::integer_sequence< int, i... >) |
| | A helper function for the - operator of tuples.
|
| |
| template<typename... T> |
| MFEM_HOST_DEVICE constexpr auto | operator- (const tuple< T... > &x) |
| | return a tuple of values defined by applying the unary minus operator to each element of x
|
| |
| template<typename... S, typename... T, int... i> |
| MFEM_HOST_DEVICE constexpr auto | div_helper (const tuple< S... > &x, const tuple< T... > &y, std::integer_sequence< int, i... >) |
| | A helper function for the / operator of tuples.
|
| |
| template<typename... S, typename... T> |
| MFEM_HOST_DEVICE constexpr auto | operator/ (const tuple< S... > &x, const tuple< T... > &y) |
| | return a tuple of values defined by elementwise division of x by y
|
| |
| template<typename... T, int... i> |
| MFEM_HOST_DEVICE constexpr auto | div_helper (const real_t a, const tuple< T... > &x, std::integer_sequence< int, i... >) |
| | A helper function for the / operator of tuples.
|
| |
| template<typename... T, int... i> |
| MFEM_HOST_DEVICE constexpr auto | div_helper (const tuple< T... > &x, const real_t a, std::integer_sequence< int, i... >) |
| | A helper function for the / operator of tuples.
|
| |
| template<typename... T> |
| MFEM_HOST_DEVICE constexpr auto | operator/ (const real_t a, const tuple< T... > &x) |
| | return a tuple of values defined by division of a by the elements of x
|
| |
| template<typename... T> |
| MFEM_HOST_DEVICE constexpr auto | operator/ (const tuple< T... > &x, const real_t a) |
| | return a tuple of values defined by elementwise division of x by a
|
| |
| template<typename... S, typename... T, int... i> |
| MFEM_HOST_DEVICE constexpr auto | mult_helper (const tuple< S... > &x, const tuple< T... > &y, std::integer_sequence< int, i... >) |
| | A helper function for the * operator of tuples.
|
| |
| template<typename... S, typename... T> |
| MFEM_HOST_DEVICE constexpr auto | operator* (const tuple< S... > &x, const tuple< T... > &y) |
| | return a tuple of values defined by elementwise multiplication of x and y
|
| |
| template<typename... T, int... i> |
| MFEM_HOST_DEVICE constexpr auto | mult_helper (const real_t a, const tuple< T... > &x, std::integer_sequence< int, i... >) |
| | A helper function for the * operator of tuples.
|
| |
| template<typename... T, int... i> |
| MFEM_HOST_DEVICE constexpr auto | mult_helper (const tuple< T... > &x, const real_t a, std::integer_sequence< int, i... >) |
| | A helper function for the * operator of tuples.
|
| |
| template<typename... T> |
| MFEM_HOST_DEVICE constexpr auto | operator* (const real_t a, const tuple< T... > &x) |
| | multiply each component of x by the value a on the left
|
| |
| template<typename... T> |
| MFEM_HOST_DEVICE constexpr auto | operator* (const tuple< T... > &x, const real_t a) |
| | multiply each component of x by the value a on the right
|
| |
| template<typename... T, std::size_t... i> |
| auto & | print_helper (std::ostream &out, const tuple< T... > &A, std::integer_sequence< size_t, i... >) |
| | helper used to implement printing a tuple of values
|
| |
| template<typename... T> |
| auto & | operator<< (std::ostream &out, const tuple< T... > &A) |
| | print a tuple of values
|
| |
| template<typename lambda , typename... T, int... i> |
| MFEM_HOST_DEVICE auto | apply_helper (lambda f, tuple< T... > &args, std::integer_sequence< int, i... >) |
| | A helper to apply a lambda to a tuple.
|
| |
| template<typename lambda , typename... T> |
| MFEM_HOST_DEVICE auto | apply (lambda f, tuple< T... > &args) |
| | a way of passing an n-tuple to a function that expects n separate arguments
|
| |
| template<typename lambda , typename... T, int... i> |
| MFEM_HOST_DEVICE auto | apply_helper (lambda f, const tuple< T... > &args, std::integer_sequence< int, i... >) |
| |
| template<typename lambda , typename... T> |
| MFEM_HOST_DEVICE auto | apply (lambda f, const tuple< T... > &args) |
| | a way of passing an n-tuple to a function that expects n separate arguments
|
| |
| template<typename... T1s, typename... T2s> |
| constexpr auto | merge_mfem_tuples_as_empty_std_tuple (const mfem::future::tuple< T1s... > &, const mfem::future::tuple< T2s... > &) |
| | Auxiliary template function that merges (concatenates) two mfem::future::tuple types into a single std::tuple that is empty, i.e. it is value initialized.
|
| |
| template<typename... Ts> |
| constexpr auto | to_array (const std::tuple< Ts... > &tuple) |
| |
| template<typename lambda , std::size_t... i> |
| constexpr void | for_constexpr (lambda &&f, std::integer_sequence< std::size_t, i ... >) |
| |
| template<typename lambda > |
| constexpr void | for_constexpr (lambda &&f, std::integer_sequence< std::size_t >) |
| |
| template<int... n, typename lambda > |
| constexpr void | for_constexpr (lambda &&f) |
| |
| template<typename lambda , typename arg_t > |
| constexpr void | for_constexpr_with_arg (lambda &&f, arg_t &&arg, std::integer_sequence< std::size_t >) |
| |
| template<typename lambda , typename arg_t , std::size_t i, std::size_t... Is> |
| constexpr void | for_constexpr_with_arg (lambda &&f, arg_t &&arg, std::integer_sequence< std::size_t, i, Is... >) |
| |
| template<typename lambda , typename arg_t > |
| constexpr void | for_constexpr_with_arg (lambda &&f, arg_t &&arg) |
| |
| template<std::size_t I, typename Tuple , std::size_t... Is> |
| std::array< bool, sizeof...(Is)> | make_dependency_array (const Tuple &inputs, std::index_sequence< Is... >) |
| |
| template<typename... input_ts, std::size_t... Is> |
| auto | make_dependency_map_impl (tuple< input_ts... > inputs, std::index_sequence< Is... >) |
| |
| template<typename... input_ts> |
| auto | make_dependency_map (tuple< input_ts... > inputs) |
| |
| template<typename T > |
| constexpr auto | get_type_name () -> std::string_view |
| |
| template<typename Tuple , std::size_t... Is> |
| void | print_tuple_impl (const Tuple &t, std::index_sequence< Is... >) |
| |
| template<typename... Args> |
| void | print_tuple (const std::tuple< Args... > &t) |
| |
| void | pretty_print (std::ostream &out, const mfem::DenseMatrix &A) |
| | Pretty print an mfem::DenseMatrix to out.
|
| |
| void | pretty_print (const mfem::Vector &v) |
| | Pretty print an mfem::Vector to out.
|
| |
| template<typename T > |
| void | pretty_print (const mfem::Array< T > &v) |
| | Pretty print an mfem::Array to out.
|
| |
| template<typename K , typename T , std::size_t N> |
| void | pretty_print (const std::unordered_map< K, std::array< T, N > > &map) |
| | Pretty prints an unordered map of std::array to out.
|
| |
| void | print_mpi_root (const std::string &msg) |
| |
| void | print_mpi_sync (const std::string &msg) |
| | print with MPI rank synchronization
|
| |
| void | pretty_print_mpi (const mfem::Vector &v) |
| | Pretty print an mfem::Vector with MPI rank.
|
| |
| template<typename ... Ts> |
| constexpr auto | decay_types (tuple< Ts... > const &) -> tuple< std::remove_cv_t< std::remove_reference_t< Ts > >... > |
| |
| template<typename T > |
| constexpr int | GetFieldId () |
| |
| template<typename Tuple , std::size_t... Is> |
| constexpr auto | extract_field_ids_impl (Tuple &&t, std::index_sequence< Is... >) |
| |
| template<typename... Ts> |
| constexpr auto | extract_field_ids (const std::tuple< Ts... > &t) |
| | Extracts field IDs from a tuple of objects derived from FieldOperator.
|
| |
| constexpr bool | contains (const int *arr, std::size_t size, int value) |
| | Helper function to check if an element is in the array.
|
| |
| template<typename... Ts> |
| constexpr std::size_t | count_unique_field_ids (const std::tuple< Ts... > &t) |
| | Function to count unique field IDs in a tuple.
|
| |
| template<typename T , std::size_t N> |
| auto | get_marked_entries (const std::array< T, N > &a, const std::array< bool, N > &marker) |
| | Get marked entries from an std::array based on a marker array.
|
| |
| template<typename... Ts> |
| constexpr auto | filter_fields (const std::tuple< Ts... > &t) |
| | Filter fields from a tuple based on their field IDs.
|
| |
| template<typename func_t > |
| __global__ void | forall_kernel_shmem (func_t f, int n) |
| |
| template<typename func_t > |
| void | forall (func_t f, const int &N, const ThreadBlocks &blocks, int num_shmem=0, real_t *shmem=nullptr) |
| |
| std::size_t | FindIdx (const std::size_t &id, const std::vector< FieldDescriptor > &fields) |
| | Find the index of a field descriptor in a vector of field descriptors.
|
| |
| int | GetVSize (const FieldDescriptor &f) |
| | Get the vdof size of a field descriptor.
|
| |
| void | GetElementVDofs (const FieldDescriptor &f, int el, Array< int > &vdofs) |
| | Get the element vdofs of a field descriptor.
|
| |
| int | GetTrueVSize (const FieldDescriptor &f) |
| | Get the true dof size of a field descriptor.
|
| |
| int | GetVDim (const FieldDescriptor &f) |
| | Get the vdim of a field descriptor.
|
| |
| template<typename entity_t > |
| int | GetDimension (const FieldDescriptor &f) |
| | Get the spatial dimension of a field descriptor.
|
| |
| const Operator * | get_prolongation (const FieldDescriptor &f) |
| | Get the prolongation operator for a field descriptor.
|
| |
| const Operator * | get_element_restriction (const FieldDescriptor &f, ElementDofOrdering o) |
| | Get the element restriction operator for a field descriptor.
|
| |
| const Operator * | get_face_restriction (const FieldDescriptor &f, ElementDofOrdering o, FaceType ft, L2FaceValues m) |
| | Get the face restriction operator for a field descriptor.
|
| |
| template<typename entity_t > |
| const Operator * | get_restriction (const FieldDescriptor &f, const ElementDofOrdering &o) |
| | Get the restriction operator for a field descriptor.
|
| |
| template<typename entity_t , typename fop_t > |
| std::tuple< std::function< void(const Vector &, Vector &)>, int > | get_restriction_transpose (const FieldDescriptor &f, const ElementDofOrdering &o, const fop_t &fop) |
| | Get a transpose restriction callback for a field descriptor.
|
| |
| void | prolongation (const FieldDescriptor field, const Vector &x, Vector &field_l) |
| | Apply the prolongation operator to a field.
|
| |
| template<std::size_t N, std::size_t M> |
| void | prolongation (const std::array< FieldDescriptor, N > fields, const Vector &x, std::array< Vector, M > &fields_l) |
| | Apply the prolongation operator to a vector of fields.
|
| |
| void | prolongation (const std::vector< FieldDescriptor > fields, const Vector &x, std::vector< Vector > &fields_l) |
| | Apply the prolongation operator to a vector of fields.
|
| |
| void | get_lvectors (const std::vector< FieldDescriptor > fields, const Vector &x, std::vector< Vector > &fields_l) |
| |
| template<typename fop_t > |
| std::function< void(const Vector &, Vector &)> | get_prolongation_transpose (const FieldDescriptor &f, const fop_t &fop, MPI_Comm mpi_comm) |
| | Get a transpose prolongation callback for a field descriptor.
|
| |
| template<typename entity_t > |
| void | restriction (const FieldDescriptor u, const Vector &u_l, Vector &field_e, ElementDofOrdering ordering) |
| | Apply the restriction operator to a field.
|
| |
| template<typename entity_t > |
| void | restriction (const std::vector< FieldDescriptor > u, const std::vector< Vector > &u_l, std::vector< Vector > &fields_e, ElementDofOrdering ordering, const int offset=0) |
| | Apply the restriction operator to a vector of fields.
|
| |
| template<std::size_t N, std::size_t M> |
| void | element_restriction (const std::array< FieldDescriptor, N > u, const std::array< Vector, N > &u_l, std::array< Vector, M > &fields_e, ElementDofOrdering ordering, const int offset=0) |
| |
| template<typename entity_t > |
| int | GetNumEntities (const mfem::Mesh &mesh) |
| | Get the number of entities of a given type.
|
| |
| template<typename entity_t > |
| const DofToQuad * | GetDofToQuad (const FieldDescriptor &f, const IntegrationRule &ir, DofToQuad::Mode mode) |
| | Get the GetDofToQuad object for a given entity type.
|
| |
| template<typename field_operator_t > |
| void | CheckCompatibility (const FieldDescriptor &f) |
| | Check the compatibility of a field operator type with a FieldDescriptor.
|
| |
| template<typename entity_t , typename field_operator_t > |
| int | GetSizeOnQP (const field_operator_t &, const FieldDescriptor &f) |
| | Get the size on quadrature point for a field operator type and FieldDescriptor combination.
|
| |
| template<typename entity_t , typename field_operator_ts > |
| std::array< size_t, tuple_size< field_operator_ts >::value > | create_descriptors_to_fields_map (const std::vector< FieldDescriptor > &fields, field_operator_ts &fops) |
| | Create a map from field operator types to FieldDescriptor indices.
|
| |
| template<typename input_t , std::size_t... i> |
| std::array< DeviceTensor< 3 >, sizeof...(i)> | wrap_input_memory (std::array< Vector, sizeof...(i)> &input_qp_mem, int num_qp, int num_entities, const input_t &inputs, std::index_sequence< i... >) |
| | Wrap input memory for a given set of inputs.
|
| |
| template<typename input_t , std::size_t... i> |
| std::array< Vector, sizeof...(i)> | create_input_qp_memory (int num_qp, int num_entities, input_t &inputs, std::index_sequence< i... >) |
| | Create input memory for a given set of inputs.
|
| |
| template<typename input_t , std::size_t... i> |
| std::vector< int > | get_input_size_on_qp (const input_t &inputs, std::index_sequence< i... >) |
| | Get the size on quadrature point for a given set of inputs.
|
| |
| template<typename entity_t , std::size_t num_fields, std::size_t num_inputs, std::size_t num_outputs, typename input_t > |
| SharedMemoryInfo< num_fields, num_inputs, num_outputs > | get_shmem_info (const std::array< DofToQuadMap, num_inputs > &input_dtq_maps, const std::array< DofToQuadMap, num_outputs > &output_dtq_maps, const std::vector< FieldDescriptor > &fields, const int &num_entities, const input_t &inputs, const int &num_qp, const std::vector< int > &input_size_on_qp, const int &residual_size_on_qp, const ElementDofOrdering &dof_ordering, const int &derivative_action_field_idx=-1) |
| |
| template<typename shmem_info_t > |
| void | print_shared_memory_info (shmem_info_t &shmem_info) |
| |
| template<std::size_t N> |
| MFEM_HOST_DEVICE std::array< DofToQuadMap, N > | load_dtq_mem (void *mem, int offset, const std::array< std::array< int, 2 >, N > &sizes, const std::array< DofToQuadMap, N > &dtq) |
| |
| template<std::size_t num_fields> |
| MFEM_HOST_DEVICE std::array< DeviceTensor< 1 >, num_fields > | load_field_mem (void *mem, int offset, const std::array< int, num_fields > &sizes, const std::array< DeviceTensor< 2 >, num_fields > &fields_e, const int &entity_idx) |
| |
| MFEM_HOST_DEVICE DeviceTensor< 1 > | load_direction_mem (void *mem, int offset, const int &size, const DeviceTensor< 2 > &direction, const int &entity_idx) |
| |
| template<std::size_t N> |
| MFEM_HOST_DEVICE std::array< DeviceTensor< 2 >, N > | load_input_mem (void *mem, int offset, const std::array< int, N > &sizes, const int &num_qp) |
| |
| MFEM_HOST_DEVICE DeviceTensor< 2 > | load_residual_mem (void *mem, int offset, const int &residual_size, const int &num_qp) |
| |
| template<std::size_t N> |
| MFEM_HOST_DEVICE std::array< DeviceTensor< 1 >, 6 > | load_scratch_mem (void *mem, int offset, const std::array< int, N > &sizes) |
| |
| template<typename shared_mem_info_t , std::size_t num_inputs, std::size_t num_outputs, std::size_t num_fields> |
| MFEM_HOST_DEVICE auto | unpack_shmem (void *shmem, const shared_mem_info_t &shmem_info, const std::array< DofToQuadMap, num_inputs > &input_dtq_maps, const std::array< DofToQuadMap, num_outputs > &output_dtq_maps, const std::array< DeviceTensor< 2 >, num_fields > &wrapped_fields_e, const int &num_qp, const int &e) |
| |
| template<typename shared_mem_info_t , std::size_t num_inputs, std::size_t num_outputs, std::size_t num_fields> |
| MFEM_HOST_DEVICE auto | unpack_shmem (void *shmem, const shared_mem_info_t &shmem_info, const std::array< DofToQuadMap, num_inputs > &input_dtq_maps, const std::array< DofToQuadMap, num_outputs > &output_dtq_maps, const std::array< DeviceTensor< 2 >, num_fields > &wrapped_fields_e, const DeviceTensor< 2 > &wrapped_direction_e, const int &num_qp, const int &e) |
| |
| template<std::size_t... i> |
| MFEM_HOST_DEVICE std::array< DeviceTensor< 2 >, sizeof...(i)> | get_local_input_qp (const std::array< DeviceTensor< 3 >, sizeof...(i)> &input_qp_global, int e, std::index_sequence< i... >) |
| |
| template<std::size_t N> |
| MFEM_HOST_DEVICE void | set_zero (std::array< DeviceTensor< 2 >, N > &v) |
| |
| template<std::size_t n> |
| MFEM_HOST_DEVICE void | set_zero (DeviceTensor< n > &u) |
| |
| template<int n> |
| MFEM_HOST_DEVICE void | copy (DeviceTensor< n > &u, DeviceTensor< n > &v) |
| | Copy data from DeviceTensor u to DeviceTensor v.
|
| |
| template<int n, std::size_t m> |
| MFEM_HOST_DEVICE void | copy (std::array< DeviceTensor< n >, m > &u, std::array< DeviceTensor< n >, m > &v) |
| | Copy data from array of DeviceTensor u to array of DeviceTensor v.
|
| |
| template<std::size_t num_fields> |
| std::array< DeviceTensor< 2 >, num_fields > | wrap_fields (std::vector< Vector > &fields, std::array< int, num_fields > &field_sizes, const int &num_entities) |
| | Wraps plain data in DeviceTensors for fields.
|
| |
| template<typename input_t , std::size_t num_fields, std::size_t... i> |
| int | accumulate_sizes_on_qp (const input_t &inputs, std::array< bool, sizeof...(i)> &kinput_is_dependent, const std::array< int, sizeof...(i)> &input_to_field, const std::array< FieldDescriptor, num_fields > &fields, std::index_sequence< i... > seq) |
| | Accumulates the sizes of field operators on quadrature points for dependent inputs.
|
| |
| template<typename entity_t , typename field_operator_ts , std::size_t N = tuple_size<field_operator_ts>::value, std::size_t... Is> |
| std::array< DofToQuadMap, N > | create_dtq_maps_impl (field_operator_ts &fops, std::vector< const DofToQuad * > &dtqs, const std::array< size_t, N > &field_map, std::index_sequence< Is... >) |
| |
| template<typename entity_t , typename field_operator_ts , std::size_t num_fields> |
| std::array< DofToQuadMap, num_fields > | create_dtq_maps (field_operator_ts &fops, std::vector< const DofToQuad * > &dtqmaps, const std::array< size_t, num_fields > &to_field_map) |
| | Create DofToQuad maps for a given set of field operators.
|
| |