![]() |
MFEM v4.10.0
Finite element discretization library
|
Namespaces | |
| namespace | dfem |
| namespace | Entity |
| Entity struct. | |
Classes | |
| struct | always_false |
| struct | create_function_signature |
| struct | create_function_signature< output_t(*)(input_ts...)> |
| struct | create_function_signature< output_t(T::*)(input_ts...) const > |
| class | DerivativeOperator |
| class | DifferentiableOperator |
| struct | DofToQuadMap |
| DofToQuadMap struct. More... | |
| struct | dual |
| Dual number struct (value plus gradient) More... | |
| class | FDJacobian |
| struct | FieldDescriptor |
| FieldDescriptor struct. More... | |
| class | FieldOperator |
| Base class for FieldOperators. More... | |
| struct | FunctionSignature |
| struct | FunctionSignature< output_t(input_ts...)> |
| class | Gradient |
| Gradient FieldOperator. More... | |
| class | Identity |
| Identity FieldOperator. More... | |
| struct | is_dual_number |
| class for checking if a type is a dual number or not More... | |
| struct | is_dual_number< dual< value_type, gradient_type > > |
| class for checking if a type is a dual number or not More... | |
| struct | is_gradient_fop |
| struct | is_gradient_fop< Gradient< FIELD_ID > > |
| struct | is_identity_fop |
| struct | is_identity_fop< Identity< FIELD_ID > > |
| struct | is_sum_fop |
| struct | is_sum_fop< Sum< FIELD_ID > > |
| struct | is_tuple |
Trait for checking if a type is a mfem::tuple. More... | |
| struct | is_tuple< tuple< T... > > |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More... | |
| struct | is_tuple_of_tuples |
Trait for checking if a type if a mfem::tuple containing only mfem::tuple. More... | |
| struct | is_tuple_of_tuples< tuple< T... > > |
Trait for checking if a type if a mfem::tuple containing only mfem::tuple. More... | |
| struct | is_value_fop |
| struct | is_value_fop< Value< FIELD_ID > > |
| struct | is_weight_fop |
| struct | is_weight_fop< Weight > |
| struct | is_zero |
checks if a type is zero More... | |
| struct | is_zero< zero > |
| struct | isotropic_tensor |
| struct | isotropic_tensor< T, 3, 3, 3 > |
| struct | isotropic_tensor< T, m, m > |
| struct | isotropic_tensor< T, m, m, m, m > |
| struct | isotropic_tensor< T, n > |
| class | ParameterFunction |
| class | ParameterSpace |
| Base class for parametric spaces. More... | |
| struct | SharedMemory |
| struct | SharedMemoryInfo |
| class | Sum |
| Sum FieldOperator. More... | |
| struct | tensor |
| struct | tensor< T > |
| struct | tensor< T, 0 > |
| struct | tensor< T, 0, n1 > |
| struct | tensor< T, n0 > |
| struct | tensor< T, n0, n1 > |
| struct | tensor< T, n0, n1, n2 > |
| struct | tensor< T, n0, n1, n2, n3 > |
| struct | tensor< T, n0, n1, n2, n3, n4 > |
| struct | ThreadBlocks |
| ThreadBlocks struct. More... | |
| struct | tuple |
| This is a class that mimics most of std::tuple's interface, except that it is usable in CUDA kernels and admits some arithmetic operator overloads. More... | |
| struct | tuple<> |
| Specialization for empty tuple. More... | |
| struct | tuple_element |
| a struct used to determine the type at index I of a tuple More... | |
| struct | tuple_element< 0, tuple< Head, Tail... > > |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More... | |
| struct | tuple_element< I, tuple< Head, Tail... > > |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More... | |
| struct | tuple_size |
| Get the size of a tuple type. More... | |
| struct | tuple_size< tuple< Types... > > |
| class | UniformParameterSpace |
| Uniform parameter space. More... | |
| class | Value |
| Value FieldOperator. More... | |
| class | Weight |
| Weight FieldOperator. More... | |
| struct | zero |
| A sentinel struct for eliding no-op tensor operations. More... | |
Typedefs | |
| template<typename T , int n1, int n2 = 1> | |
| using | reduced_tensor |
| Removes 1s from tensor dimensions For example, a tensor<T, 1, 10> is equivalent to a tensor<T, 10> | |
| template<typename T1 , typename T2 > | |
| using | outer_product_t = typename detail::outer_prod<T1, T2>::type |
| a type function that returns the tensor type of an outer product of two tensors | |
| using | action_t |
| Type alias for a function that computes the action of an operator. | |
| using | derivative_setup_t |
| Type alias for a function that computes the cache for the action of a derivative. | |
| using | derivative_action_t |
| Type alias for a function that computes the action of a derivative. | |
| using | assemble_derivative_sparsematrix_callback_t |
| Type alias for a function that assembles the SparseMatrix of a derivative operator. | |
| using | assemble_derivative_hypreparmatrix_callback_t |
| Type alias for a function that assembles the HypreParMatrix of a derivative operator. | |
| using | restriction_callback_t |
| Type alias for a function that applies the appropriate restriction to the solution and parameters. | |
| template<typename T > | |
| using | decay_tuple = decltype(decay_types(std::declval<T>())) |
Functions | |
| 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 constexpr tuple< T... > | make_tuple (const T &... args) |
| helper function for combining a list of values into a tuple | |
| template<size_t I, typename... T> | |
| MFEM_HOST_DEVICE constexpr auto & | get (tuple< T... > &t) |
| return a reference to the ith tuple entry | |
| template<size_t I, typename... T> | |
| MFEM_HOST_DEVICE constexpr const auto & | get (const tuple< T... > &t) |
| return a const reference to the ith tuple entry | |
| template<size_t I, typename... T> | |
| MFEM_HOST_DEVICE constexpr auto && | get (tuple< T... > &&t) |
| return an rvalue reference to the ith tuple entry | |
| template<size_t I, typename... T> | |
| MFEM_HOST_DEVICE constexpr const auto && | get (const tuple< T... > &&t) |
| return a const rvalue reference to the ith tuple entry | |
| template<size_t I, typename... T> | |
| MFEM_HOST_DEVICE constexpr auto | type (const tuple< T... > &t) |
| a function intended to be used for extracting the ith type from a tuple. | |
| 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... 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... 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... 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> | |
| MFEM_HOST_DEVICE constexpr tuple< T... > & | operator+= (tuple< T... > &x, const tuple< T... > &y) |
| add values contained in y, to the tuple x | |
| template<typename... T> | |
| MFEM_HOST_DEVICE constexpr tuple< T... > & | operator-= (tuple< T... > &x, const tuple< T... > &y) |
| subtract values contained in y from the tuple x | |
| 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 scalar_t , typename... T> | |
| MFEM_HOST_DEVICE constexpr auto | operator* (scalar_t a, const tuple< T... > &x) |
| multiply each component of x by the value a on the left | |
| template<typename scalar_t , typename... T> | |
| MFEM_HOST_DEVICE constexpr auto | operator* (const tuple< T... > &x, scalar_t a) |
| multiply each component of x by the value a on the right | |
| template<typename scalar_t , typename... T> | |
| MFEM_HOST_DEVICE constexpr auto | operator/ (const tuple< T... > &x, scalar_t a) |
| return a tuple of values defined by elementwise division of x by a | |
| template<typename scalar_t , typename... T> | |
| MFEM_HOST_DEVICE constexpr auto | operator/ (scalar_t a, const tuple< T... > &x) |
| return a tuple of values defined by division of a by the elements of x | |
| template<typename... T> | |
| auto & | operator<< (std::ostream &out, const tuple< T... > &t) |
| print a tuple of values | |
| template<typename F , typename... T> | |
| MFEM_HOST_DEVICE auto | apply (F &&f, tuple< T... > &args) |
| a way of passing an n-tuple to a function that expects n separate arguments | |
| template<typename F , typename... T> | |
| MFEM_HOST_DEVICE auto | apply (F &&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 tuple< T1s... > &, const 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. | |
| using mfem::future::action_t |
Type alias for a function that computes the action of an operator.
Definition at line 31 of file doperator.hpp.
Type alias for a function that assembles the HypreParMatrix of a derivative operator.
Definition at line 49 of file doperator.hpp.
Type alias for a function that assembles the SparseMatrix of a derivative operator.
Definition at line 44 of file doperator.hpp.
| using mfem::future::decay_tuple = decltype(decay_types(std::declval<T>())) |
Type alias for a function that computes the action of a derivative.
Definition at line 39 of file doperator.hpp.
Type alias for a function that computes the cache for the action of a derivative.
Definition at line 35 of file doperator.hpp.
| using mfem::future::outer_product_t = typename detail::outer_prod<T1, T2>::type |
a type function that returns the tensor type of an outer product of two tensors
| T1 | the first argument to the outer product |
| T2 | the second argument to the outer product |
Definition at line 1953 of file tensor.hpp.
| using mfem::future::reduced_tensor |
Removes 1s from tensor dimensions For example, a tensor<T, 1, 10> is equivalent to a tensor<T, 10>
| T | The scalar type of the tensor |
| n1 | The first dimension |
| n2 | The second dimension |
Definition at line 308 of file tensor.hpp.
Type alias for a function that applies the appropriate restriction to the solution and parameters.
Definition at line 54 of file doperator.hpp.
| int mfem::future::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.
| input_t | Type of input field operators tuple |
| num_fields | Number of fields |
| i | Parameter pack indices for field operators |
| inputs | Tuple of input field operators |
| kinput_is_dependent | Array indicating which inputs are dependent |
| input_to_field | Array mapping input indices to field indices |
| fields | Array of field descriptors |
| seq | Index sequence for inputs |
This function accumulates the sizes needed on quadrature points for all dependent input field operators. For each dependent input, it calculates the size required on quadrature points using GetSizeOnQP() and adds it to the total. Non-dependent inputs contribute zero to the total size.
|
constexpr |
Definition at line 2176 of file tensor.hpp.
|
constexpr |
Definition at line 2244 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::apply | ( | F && | f, |
| const tuple< T... > & | args ) |
a way of passing an n-tuple to a function that expects n separate arguments
| F | a callable type |
| T | the types of arguments to be passed in to f |
| f | the callable object |
| args | a tuple of arguments |
For example, foo(bar, baz) is equivalent to apply(foo, mfem::tuple(bar,baz)).
| MFEM_HOST_DEVICE auto mfem::future::apply | ( | F && | f, |
| tuple< T... > & | args ) |
a way of passing an n-tuple to a function that expects n separate arguments
| F | a callable type |
| T | the types of arguments to be passed in to f |
| f | the callable object |
| args | a tuple of arguments |
For example, foo(bar, baz) is equivalent to apply(foo, mfem::tuple(bar,baz)).
|
inline |
Definition at line 510 of file qfunction_apply.hpp.
|
inline |
Definition at line 603 of file qfunction_apply.hpp.
|
inline |
Definition at line 523 of file qfunction_apply.hpp.
|
inline |
Apply the quadrature point data cache (qpdc) to a vector (usually a direction).
The qpdc consists of compatible data to be used for integration with a test operator, e.g. Jacobians of a linearization from a FE operation with a trial function including integration weights and necessary transformations.
| fhat | the qpdc applied to a vector in shadow_memory. |
| shadow_shmem | the shadow shared memory. |
| qpdc | the quadrature point data cache holding the resulting Jacobians on each quadrature point. |
| itod | inputs trial operator dimension. If input is dependent the value corresponds to the spatial dimension, otherwise a zero indicates non-dependence on the variable. |
| q1d | number of quadrature points in 1D. |
| dimension | spatial dimension. |
| use_sum_factorization | whether to use sum factorization. |
Definition at line 450 of file qfunction_apply.hpp.
| MFEM_HOST_DEVICE void mfem::future::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.
Note: In the below layouts, total_trial_op_dim is > 1 if there are more than one inputs dependent on the derivative variable.
| A | Memory for one element matrix with layout [test_ndof, test_vdim, trial_ndof, trial_vdim]. |
| fhat | Memory to hold the residual computation with layout [test_vdim, test_op_dim, nqp]. |
| qpdc | The quadrature point data cache with data layout [test_vdim, test_op_dim, trial_vdim, total_trial_op_dim, nqp]. |
| itod | Input Trial Operator Dimension array. If the trial operator is not dependent, the dimension is 0 to indicate that. |
| inputs | The input field operator types. |
| output | The output field operator types. |
| input_dtqmaps | The input DofToQuad maps. |
| output_dtqmap | The output DofToQuad maps. |
| scratch_shmem | Scratch shared memory for computations. |
| dimension | The spatial dimension. |
| q1d | The number of quadrature points in one dimension. |
| td1d | The number of trial dofs in one dimension. |
| use_sum_factorization | Indicator if sum factorization is used. |
Definition at line 366 of file assemble.hpp.
| MFEM_HOST_DEVICE void mfem::future::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.
Note: In the below layouts, total_trial_op_dim is > 1 if there are more than one inputs dependent on the derivative variable.
| A | Memory for one element matrix with layout [test_ndof, test_vdim, trial_ndof, trial_vdim]. |
| fhat | Memory to hold the residual computation with layout [test_vdim, test_op_dim, nqp]. |
| qpdc | The quadrature point data cache with data layout [test_vdim, test_op_dim, trial_vdim, total_trial_op_dim, nqp]. |
| itod | Input Trial Operator Dimension array. If the trial operator is not dependent, the dimension is 0 to indicate that. |
| inputs | The input field operator types. |
| output | The output field operator types. |
| input_dtqmaps | The input DofToQuad maps. |
| output_dtqmap | The output DofToQuad maps. |
| scratch_shmem | Scratch shared memory for computations. |
| q1d | The number of quadrature points in one dimension. |
| td1d | The number of trial dofs in one dimension. |
Definition at line 210 of file assemble.hpp.
| MFEM_HOST_DEVICE void mfem::future::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.
Note: In the below layouts, total_trial_op_dim is > 1 if there are more than one inputs dependent on the derivative variable.
| A | Memory for one element matrix with layout [test_ndof, test_vdim, trial_ndof, trial_vdim]. |
| fhat | Memory to hold the residual computation with layout [test_vdim, test_op_dim, nqp]. |
| qpdc | The quadrature point data cache with data layout [test_vdim, test_op_dim, trial_vdim, total_trial_op_dim, nqp]. |
| itod | Input Trial Operator Dimension array. If the trial operator is not dependent, the dimension is 0 to indicate that. |
| inputs | The input field operator types. |
| output | The output field operator types. |
| input_dtqmaps | The input DofToQuad maps. |
| output_dtqmap | The output DofToQuad maps. |
| scratch_shmem | Scratch shared memory for computations. |
| q1d | The number of quadrature points in one dimension. |
| td1d | The number of trial dofs in one dimension. |
Definition at line 39 of file assemble.hpp.
| MFEM_HOST_DEVICE T mfem::future::calcsv | ( | const tensor< T, 1, 1 > | A, |
| const int | i ) |
Definition at line 1510 of file tensor.hpp.
| MFEM_HOST_DEVICE T mfem::future::calcsv | ( | const tensor< T, 2, 2 > | A, |
| const int | i ) |
Compute the i-th singular value of a 2x2 matrix A.
Definition at line 1519 of file tensor.hpp.
|
inline |
Call a qfunction with the given parameters.
| qfunc | the qfunction to call. |
| input_shmem | the input shared memory. |
| residual_shmem | the residual shared memory. |
| rs_qp | the size of the residual. |
| num_qp | the number of quadrature points. |
| q1d | the number of quadrature points in 1D. |
| dimension | the spatial dimension. |
| use_sum_factorization | whether to use sum factorization. |
| qf_param_ts | the tuple type of the qfunction parameters. |
Definition at line 35 of file qfunction_apply.hpp.
|
inline |
Call a qfunction with the given parameters and compute it's derivative represented by the Jacobian on each quadrature point.
| qfunc | the qfunction to call. |
| input_shmem | the input shared memory. |
| shadow_shmem | the shadow shared memory. |
| residual_shmem | the residual shared memory. |
| qpdc | the quadrature point data cache holding the resulting Jacobians on each quadrature point. |
| itod | inputs trial operator dimension. If input is dependent the value corresponds to the spatial dimension, otherwise a zero indicates non-dependence on the variable. |
| das_qp | the size of the derivative action. |
| q1d | the number of quadrature points in 1D. |
| dimension | the spatial dimension. |
| use_sum_factorization | whether to use sum factorization. |
| qf_param_ts | the tuple type of the qfunction parameters. |
Definition at line 302 of file qfunction_apply.hpp.
|
inline |
Call a qfunction with the given parameters and compute it's derivative action.
| qfunc | the qfunction to call. |
| input_shmem | the input shared memory. |
| shadow_shmem | the shadow shared memory. |
| residual_shmem | the residual shared memory. |
| das_qp | the size of the derivative action. |
| num_qp | the number of quadrature points. |
| q1d | the number of quadrature points in 1D. |
| dimension | the spatial dimension. |
| use_sum_factorization | whether to use sum factorization. |
| qf_param_ts | the tuple type of the qfunction parameters. |
Definition at line 122 of file qfunction_apply.hpp.
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 2004 of file tensor.hpp.
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 1994 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::chain_rule | ( | const tensor< real_t, n... > & | df_dx, |
| const real_t | dx ) -> decltype(df_dx * dx) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 2012 of file tensor.hpp.
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 1983 of file tensor.hpp.
evaluate the change (to first order) in a function, f, given a small change in the input argument, dx.
Definition at line 1975 of file tensor.hpp.
| void mfem::future::CheckCompatibility | ( | const FieldDescriptor & | f | ) |
Check the compatibility of a field operator type with a FieldDescriptor.
This function checks if the field operator type is compatible with the FieldDescriptor type.
| f | the field descriptor. |
| field_operator_t | the field operator type. |
| MFEM_HOST_DEVICE tensor< real_t, m, n > mfem::future::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.
Definition at line 1886 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< real_t, n > mfem::future::chop | ( | const tensor< real_t, n > & | A | ) |
replace all entries in a tensor satisfying |x| < 1.0e-10 by literal zero
| [in] | A | The tensor to "chop" |
Definition at line 1871 of file tensor.hpp.
|
constexpr |
|
inline |
Copy data from DeviceTensor u to DeviceTensor v.
| u | source DeviceTensor |
| v | destination DeviceTensor |
| n | DeviceTensor rank |
|
inline |
Copy data from array of DeviceTensor u to array of DeviceTensor v.
| u | source DeviceTensor array |
| v | destination DeviceTensor array |
| n | DeviceTensor rank |
| m | number of DeviceTensors |
|
constexpr |
| std::array< size_t, tuple_size< field_operator_ts >::value > mfem::future::create_descriptors_to_fields_map | ( | const std::vector< FieldDescriptor > & | fields, |
| field_operator_ts & | fops ) |
Create a map from field operator types to FieldDescriptor indices.
| fields | the vector of field descriptors. |
| fops | the field operator types. |
| entity_t | the entity type (see Entity). |
| std::array< DofToQuadMap, num_fields > mfem::future::create_dtq_maps | ( | field_operator_ts & | fops, |
| std::vector< const DofToQuad * > & | dtqmaps, | ||
| const std::array< size_t, num_fields > & | to_field_map ) |
| std::array< DofToQuadMap, N > mfem::future::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... > | ) |
| std::array< Vector, sizeof...(i)> mfem::future::create_input_qp_memory | ( | int | num_qp, |
| int | num_entities, | ||
| input_t & | inputs, | ||
| std::index_sequence< i... > | ) |
|
constexpr |
Definition at line 2162 of file tensor.hpp.
|
constexpr |
Definition at line 2282 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::ddot | ( | const tensor< S, m, n > & | A, |
| const tensor< T, m, n > & | B ) -> decltype(S {} * T{}) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 1207 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::ddot | ( | const tensor< S, m, n, p > & | A, |
| const tensor< T, n, p > & | B ) -> tensor<decltype(S {} * T{}), m> |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 1185 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::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
| S | the underlying type of the tensor (lefthand) argument |
| T | the underlying type of the tensor (righthand) argument |
| m | first dimension of A |
| n | second dimension of A |
| p | third dimension of A, first dimensions of B |
| q | fourth dimension of A, second dimensions of B |
| [in] | A | The lefthand tensor |
| [in] | B | The righthand tensor |
Definition at line 1159 of file tensor.hpp.
|
constexpr |
|
constexpr |
Definition at line 2194 of file tensor.hpp.
| MFEM_HOST_DEVICE T mfem::future::det | ( | const tensor< T, 1, 1 > & | A | ) |
Returns the determinant of a matrix.
| [in] | A | The matrix to obtain the determinant of |
Definition at line 1406 of file tensor.hpp.
| MFEM_HOST_DEVICE T mfem::future::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.
Definition at line 1412 of file tensor.hpp.
| MFEM_HOST_DEVICE T mfem::future::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.
Definition at line 1418 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< T, n, n > mfem::future::dev | ( | const tensor< T, n, n > & | A | ) |
Calculates the deviator of a matrix (rank-2 tensor)
| [in] | A | The matrix to calculate the deviator of In the context of stress tensors, the deviator is obtained by subtracting the mean stress (average of main diagonal elements) from each element on the main diagonal |
Definition at line 1354 of file tensor.hpp.
|
constexpr |
Definition at line 2144 of file tensor.hpp.
the dot product of anything with zero is zero
Definition at line 288 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::dot | ( | const tensor< S, m > & | A, |
| const tensor< T, m > & | B ) -> decltype(S {} * T{}) |
Dot product of a vector . vector and vector . tensor.
| S | the underlying type of the tensor (lefthand) argument |
| T | the underlying type of the tensor (righthand) argument |
| m | the dimension of the first tensor |
| n | the parameter pack of dimensions of the second tensor |
| A | The lefthand tensor |
| B | The righthand tensor |
Definition at line 1088 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::dot | ( | const tensor< S, m > & | A, |
| const tensor< T, m, n > & | B ) -> tensor<decltype(S {} * T{}), n> |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 988 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::dot | ( | const tensor< S, m > & | A, |
| const tensor< T, m, n0, n1, n... > & | B ) -> tensor<decltype(S {} * T{}), n0, n1, n...> |
Definition at line 1113 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::dot | ( | const tensor< S, m > & | u, |
| const tensor< T, m, n > & | A, | ||
| const tensor< U, n > & | v ) -> decltype(S {} * T{} * U{}) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 1132 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::dot | ( | const tensor< S, m, n > & | A, |
| const tensor< T, n > & | B ) -> tensor<decltype(S {} * T{}), m> |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 1007 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::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.
| S | the underlying type of the tensor (lefthand) argument |
| T | the underlying type of the tensor (righthand) argument |
| n | integers describing the tensor shape |
| [in] | A | The lefthand tensor |
| [in] | B | The righthand tensor |
Definition at line 965 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::dot | ( | const tensor< S, m, n, p > & | A, |
| const tensor< T, p > & | B ) -> tensor<decltype(S {} * T{}), m, n> |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 1026 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::dot | ( | const tensor< S, n... > & | A, |
| const isotropic_tensor< T, m, m > & | I ) -> tensor<decltype(S {} * T{}), n...> |
Definition at line 2152 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::dot | ( | const tensor< T, m > & | A, |
| const tensor< T, m > & | B ) -> decltype(T {}) |
Definition at line 1100 of file tensor.hpp.
the dot product of anything with zero is zero
Definition at line 295 of file tensor.hpp.
| MFEM_HOST_DEVICE std::tuple< tensor< T, 1 >, tensor< T, 1, 1 > > mfem::future::eig | ( | tensor< T, 1, 1 > & | A | ) |
Definition at line 1427 of file tensor.hpp.
| MFEM_HOST_DEVICE std::tuple< tensor< T, 2 >, tensor< T, 2, 2 > > mfem::future::eig | ( | tensor< T, 2, 2 > & | A | ) |
Definition at line 1433 of file tensor.hpp.
| void mfem::future::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 ) |
|
constexpr |
Extracts field IDs from a tuple of objects derived from FieldOperator.
| t | the tuple to extract field IDs from. |
|
constexpr |
|
constexpr |
|
inline |
| MFEM_HOST_DEVICE tensor< T, n+m > mfem::future::flatten | ( | tensor< T, n, m > | A | ) |
Definition at line 732 of file tensor.hpp.
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
| void mfem::future::forall | ( | func_t | f, |
| const int & | N, | ||
| const ThreadBlocks & | blocks, | ||
| int | num_shmem = 0, | ||
| real_t * | shmem = nullptr ) |
| __global__ void mfem::future::forall_kernel_shmem | ( | func_t | f, |
| int | n ) |
|
inline |
Definition at line 587 of file qfunction_apply.hpp.
|
inline |
Definition at line 569 of file qfunction_apply.hpp.
|
inline |
Definition at line 551 of file qfunction_apply.hpp.
|
constexpr |
|
constexpr |
|
constexpr |
|
constexpr |
let zero be accessed like a tuple
Definition at line 281 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< T, 1 > mfem::future::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.
Definition at line 465 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< T, n > mfem::future::get_col | ( | tensor< T, m, n > | A, |
| int | j ) |
Definition at line 455 of file tensor.hpp.
|
inline |
|
inline |
| MFEM_HOST_DEVICE zero mfem::future::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)
Definition at line 1967 of file tensor.hpp.
| MFEM_HOST_DEVICE gradient_type mfem::future::get_gradient | ( | dual< value_type, gradient_type > | arg | ) |
Retrieves the gradient component of a real_t (which is nothing)
Definition at line 1959 of file tensor.hpp.
| std::vector< int > mfem::future::get_input_size_on_qp | ( | const input_t & | inputs, |
| std::index_sequence< i... > | ) |
|
inline |
|
inline |
| auto mfem::future::get_marked_entries | ( | const std::array< T, N > & | a, |
| const std::array< bool, N > & | marker ) |
|
inline |
|
inline |
Get a transpose prolongation callback for a field descriptor.
In the special case of a one field operator, the transpose prolongation is a simple sum of the local vector that is reduced to the global vector.
| f | the field descriptor. |
| fop | the field operator. |
| mpi_comm | the MPI communicator. |
| fop_t | the field operator type. |
|
inline |
|
inline |
| SharedMemoryInfo< num_fields, num_inputs, num_outputs > mfem::future::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 ) |
|
constexpr |
| MFEM_HOST_DEVICE T mfem::future::get_value | ( | const T & | arg | ) |
| MFEM_HOST_DEVICE gradient_type mfem::future::get_value | ( | dual< value_type, gradient_type > | arg | ) |
| int mfem::future::GetDimension | ( | const FieldDescriptor & | f | ) |
|
inline |
Get the GetDofToQuad object for a given entity type.
This function retrieves the DofToQuad object for a given field descriptor and integration rule.
| f | the field descriptor. |
| ir | the integration rule. |
| mode | the mode of the DofToQuad object. |
| entity_t | the entity type (see Entity). |
|
inline |
Get the element vdofs of a field descriptor.
| f | the field descriptor. |
| el | the element index. |
| vdofs | the array to store the element vdofs. |
|
constexpr |
| int mfem::future::GetNumEntities | ( | const mfem::Mesh & | mesh | ) |
| MFEM_HOST_DEVICE void mfem::future::GetScalingFactor | ( | const T & | d_max, |
| T & | mult ) |
Definition at line 1491 of file tensor.hpp.
| int mfem::future::GetSizeOnQP | ( | const field_operator_t & | , |
| const FieldDescriptor & | f ) |
Get the size on quadrature point for a field operator type and FieldDescriptor combination.
| entity_t | the entity type (see Entity). |
| field_operator_t | the field operator type. |
| f | the field descriptor. |
|
inline |
|
inline |
|
inline |
Obtains the identity matrix of the specified dimension.
Definition at line 1370 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::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
| S | the underlying type of the tensor (lefthand) argument |
| T | the underlying type of the tensor (righthand) argument |
| m | the number of rows |
| n | the number of columns |
| [in] | A | The lefthand tensor |
| [in] | B | The righthand tensor |
Definition at line 941 of file tensor.hpp.
|
inline |
Inverts a matrix.
| [in] | A | The matrix to invert |
Definition at line 1707 of file tensor.hpp.
|
inline |
Definition at line 1713 of file tensor.hpp.
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 1732 of file tensor.hpp.
| MFEM_HOST_DEVICE std::enable_if<(n >3), tensor< T, n, n > >::type mfem::future::inv | ( | const tensor< T, n, n > & | A | ) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 1758 of file tensor.hpp.
| MFEM_HOST_DEVICE dual< value_type, gradient_type > mfem::future::inv | ( | tensor< dual< value_type, gradient_type >, n, n > | A | ) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
TODO: compare performance of this hardcoded implementation to just using inv() directly
Definition at line 1827 of file tensor.hpp.
| MFEM_HOST_DEVICE bool mfem::future::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.
| n | The height of the tensor |
| A | The square rank 2 tensor |
| abs_tolerance | The absolute tolerance to check for symmetry |
Definition at line 1574 of file tensor.hpp.
|
inline |
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.
| A | The matrix to test for positive definiteness |
Definition at line 1598 of file tensor.hpp.
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 1616 of file tensor.hpp.
|
constexpr |
Definition at line 2042 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< T, n > mfem::future::linear_solve | ( | tensor< T, n, n > | A, |
| const tensor< T, n > | b ) |
Solves Ax = b for x using Gaussian elimination with partial pivoting.
| [in] | A | The coefficient matrix A |
| [in] | b | The righthand side vector b |
Definition at line 1641 of file tensor.hpp.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
| std::array< bool, sizeof...(Is)> mfem::future::make_dependency_array | ( | const Tuple & | inputs, |
| std::index_sequence< Is... > | ) |
| auto mfem::future::make_dependency_map | ( | tuple< input_ts... > | inputs | ) |
| auto mfem::future::make_dependency_map_impl | ( | tuple< input_ts... > | inputs, |
| std::index_sequence< Is... > | ) |
|
constexpr |
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.
| lambda_type | The type of the functor |
| [in] | f | The functor to generate the tensor values from |
auto parameters. Definition at line 327 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::make_tensor | ( | lambda_type | f | ) | -> tensor<decltype(f(n1)), n1> |
Creates a tensor of requested dimension by subsequent calls to a functor.
| n1 | The dimension of the tensor |
| lambda_type | The type of the functor |
| [in] | f | The functor to generate the tensor values from |
n1 arguments of type int auto parameters. Definition at line 345 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::make_tensor | ( | lambda_type | f | ) | -> tensor<decltype(f(n1, n2)), n1, n2> |
Creates a tensor of requested dimension by subsequent calls to a functor.
| n1 | The first dimension of the tensor |
| n2 | The second dimension of the tensor |
| lambda_type | The type of the functor |
| [in] | f | The functor to generate the tensor values from |
n1 x n2 arguments of type int auto parameters. Definition at line 370 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::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.
| n1 | The first dimension of the tensor |
| n2 | The second dimension of the tensor |
| n3 | The third dimension of the tensor |
| lambda_type | The type of the functor |
| [in] | f | The functor to generate the tensor values from |
n1 x n2 x n3 arguments of type int auto parameters. Definition at line 399 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::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.
| n1 | The first dimension of the tensor |
| n2 | The second dimension of the tensor |
| n3 | The third dimension of the tensor |
| n4 | The fourth dimension of the tensor |
| lambda_type | The type of the functor |
| [in] | f | The functor to generate the tensor values from |
n1 x n2 x n3 x n4 arguments of type int auto parameters. Definition at line 432 of file tensor.hpp.
|
constexpr |
| MFEM_HOST_DEVICE void mfem::future::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 ) |
Definition at line 632 of file interpolate.hpp.
| MFEM_HOST_DEVICE void mfem::future::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 ) |
Definition at line 429 of file interpolate.hpp.
| MFEM_HOST_DEVICE void mfem::future::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 ) |
Definition at line 570 of file interpolate.hpp.
|
inline |
Definition at line 344 of file interpolate.hpp.
|
inline |
Definition at line 211 of file interpolate.hpp.
|
inline |
Definition at line 20 of file interpolate.hpp.
|
inline |
Definition at line 510 of file interpolate.hpp.
| MFEM_HOST_DEVICE void mfem::future::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 ) |
Definition at line 612 of file interpolate.hpp.
| MFEM_HOST_DEVICE void mfem::future::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 ) |
Definition at line 505 of file integrate.hpp.
| MFEM_HOST_DEVICE void mfem::future::map_quadrature_data_to_fields_impl | ( | DeviceTensor< 2, real_t > & | y, |
| const DeviceTensor< 3, real_t > & | f, | ||
| const output_t & | output, | ||
| const DofToQuadMap & | dtq ) |
Definition at line 20 of file integrate.hpp.
| MFEM_HOST_DEVICE void mfem::future::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 ) |
Definition at line 100 of file integrate.hpp.
| MFEM_HOST_DEVICE void mfem::future::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 ) |
Definition at line 180 of file integrate.hpp.
| MFEM_HOST_DEVICE void mfem::future::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 ) |
Definition at line 318 of file integrate.hpp.
|
constexpr |
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.
| mfem::future::mfem_binary_comparator_overload | ( | ) |
implement operator<= for dual numbers
implement operator== for dual numbers implement operator>= for dual numbers implement operator> for dual numbers
|
constexpr |
Definition at line 2200 of file tensor.hpp.
| MFEM_HOST_DEVICE T mfem::future::norm | ( | const tensor< T, n... > & | A | ) |
Returns the Frobenius norm of the tensor.
| [in] | A | The tensor to obtain the norm from |
Definition at line 1269 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::normalize | ( | const tensor< T, n... > & | A | ) | -> decltype(A / norm(A)) |
Normalizes the tensor Each element is divided by the Frobenius norm of the tensor,.
| [in] | A | The tensor to normalize |
Definition at line 1305 of file tensor.hpp.
|
constexpr |
Definition at line 2056 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::operator* | ( | const tensor< S, m... > & | A, |
| const tensor< T, n... > & | B ) -> decltype(dot(A, B)) |
this is a shorthand for dot(A, B)
Definition at line 1225 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::operator* | ( | const tensor< T, n... > & | A, |
| S | scale ) -> tensor<decltype(T {} * S{}), n...> |
multiply a tensor by a scalar value
| S | the scalar value type. Must be arithmetic (e.g. float, real_t, int) or a dual number |
| T | the underlying type of the tensor (righthand) argument |
| n | integers describing the tensor shape |
| [in] | A | The tensor to be scaled |
| [in] | scale | The scaling factor |
Definition at line 562 of file tensor.hpp.
|
constexpr |
|
constexpr |
|
constexpr |
Definition at line 2258 of file tensor.hpp.
|
constexpr |
Definition at line 2048 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::operator* | ( | S | scale, |
| const tensor< T, n... > & | A ) -> tensor<decltype(S {} * T{}), n...> |
multiply a tensor by a scalar value
| S | the scalar value type. Must be arithmetic (e.g. float, real_t, int) or a dual number |
| T | the underlying type of the tensor (righthand) argument |
| n | integers describing the tensor shape |
| [in] | scale | The scaling factor |
| [in] | A | The tensor to be scaled |
Definition at line 540 of file tensor.hpp.
|
constexpr |
Definition at line 2250 of file tensor.hpp.
|
constexpr |
|
constexpr |
the product zero with something else is also zero
Definition at line 261 of file tensor.hpp.
|
constexpr |
the product zero with something else is also zero
Definition at line 254 of file tensor.hpp.
the product of two zeros is zero
Definition at line 250 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::operator+ | ( | const isotropic_tensor< S, m, m > & | I, |
| const tensor< T, m, m > & | A ) -> tensor<decltype(S {} + T{}), m, m> |
Definition at line 2080 of file tensor.hpp.
|
constexpr |
Definition at line 2064 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::operator+ | ( | const tensor< S, m, m > & | A, |
| const isotropic_tensor< T, m, m > & | I ) -> tensor<decltype(S {} + T{}), m, m> |
Definition at line 2096 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::operator+ | ( | const tensor< S, n... > & | A, |
| const tensor< T, n... > & | B ) -> tensor<decltype(S {} + T{}), n...> |
return the sum of two tensors
| S | the underlying type of the lefthand argument |
| T | the underlying type of the righthand argument |
| n | integers describing the tensor shape |
| [in] | A | The lefthand operand |
| [in] | B | The righthand operand |
Definition at line 479 of file tensor.hpp.
|
constexpr |
|
constexpr |
|
constexpr |
Definition at line 2266 of file tensor.hpp.
|
constexpr |
|
constexpr |
the sum of zero with something non-zero just returns the other value
Definition at line 220 of file tensor.hpp.
|
constexpr |
the sum of zero with something non-zero just returns the other value
Definition at line 213 of file tensor.hpp.
the sum of two zeros is zero
Definition at line 209 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< S, n... > & mfem::future::operator+= | ( | tensor< S, n... > & | A, |
| const tensor< T, n... > & | B ) |
compound assignment (+) on tensors
| S | the underlying type of the tensor (lefthand) argument |
| T | the underlying type of the tensor (righthand) argument |
| n | integers describing the tensor shape |
| [in] | A | The lefthand tensor |
| [in] | B | The righthand tensor |
Definition at line 626 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< T > & mfem::future::operator+= | ( | tensor< T > & | A, |
| const T & | B ) |
compound assignment (+) on tensors
| T | the underlying type of the tensor argument |
| [in] | A | The lefthand tensor |
| [in] | B | The righthand tensor |
Definition at line 643 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< T, 1 > & mfem::future::operator+= | ( | tensor< T, 1 > & | A, |
| const T & | B ) |
compound assignment (+) on tensors
| T | the underlying type of the tensor argument |
| [in] | A | The lefthand tensor |
| [in] | B | The righthand tensor |
Definition at line 655 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< T, 1, 1 > & mfem::future::operator+= | ( | tensor< T, 1, 1 > & | A, |
| const T & | B ) |
compound assignment (+) on tensors
| T | the underlying type of the tensor argument |
| [in] | A | The lefthand tensor |
| [in] | B | The righthand tensor |
Definition at line 667 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< T, n... > & mfem::future::operator+= | ( | tensor< T, n... > & | A, |
| zero | ) |
compound assignment (+) between a tensor and zero (no-op)
| T | the underlying type of the tensor (righthand) argument |
| n | integers describing the tensor shape |
| [in] | A | The lefthand tensor |
Definition at line 679 of file tensor.hpp.
zero plus zero is `zero
Definition at line 274 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::operator- | ( | const isotropic_tensor< S, m, m > & | I, |
| const tensor< T, m, m > & | A ) -> tensor<decltype(S {} - T{}), m, m> |
Definition at line 2112 of file tensor.hpp.
|
constexpr |
Definition at line 2072 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::operator- | ( | const tensor< S, m, m > & | A, |
| const isotropic_tensor< T, m, m > & | I ) -> tensor<decltype(S {} - T{}), m, m> |
Definition at line 2128 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::operator- | ( | const tensor< S, n... > & | A, |
| const tensor< T, n... > & | B ) -> tensor<decltype(S {} + T{}), n...> |
return the difference of two tensors
| S | the underlying type of the lefthand argument |
| T | the underlying type of the righthand argument |
| n | integers describing the tensor shape |
| [in] | A | The lefthand operand |
| [in] | B | The righthand operand |
Definition at line 517 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< T, n... > mfem::future::operator- | ( | const tensor< T, n... > & | A | ) |
return the unary negation of a tensor
| T | the underlying type of the righthand argument |
| n | integers describing the tensor shape |
| [in] | A | The tensor to negate |
Definition at line 498 of file tensor.hpp.
|
constexpr |
|
constexpr |
|
constexpr |
Definition at line 2274 of file tensor.hpp.
|
constexpr |
the difference of something else with zero is the other thing itself
Definition at line 242 of file tensor.hpp.
the unary negation of zero is zero
Definition at line 228 of file tensor.hpp.
|
constexpr |
the difference of zero with something else is the unary negation of the other thing
Definition at line 235 of file tensor.hpp.
the difference of two zeros is zero
Definition at line 231 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< S, n... > & mfem::future::operator-= | ( | tensor< S, n... > & | A, |
| const tensor< T, n... > & | B ) |
compound assignment (-) on tensors
| S | the underlying type of the tensor (lefthand) argument |
| T | the underlying type of the tensor (righthand) argument |
| n | integers describing the tensor shape |
| [in] | A | The lefthand tensor |
| [in] | B | The righthand tensor |
Definition at line 693 of file tensor.hpp.
|
constexpr |
compound assignment (-) between a tensor and zero (no-op)
| T | the underlying type of the tensor (righthand) argument |
| n | integers describing the tensor shape |
| [in] | A | The lefthand tensor |
Definition at line 709 of file tensor.hpp.
zero minus zero is `zero
Definition at line 277 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::operator/ | ( | const tensor< T, n... > & | A, |
| S | scale ) -> tensor<decltype(T {} * S{}), n...> |
divide a tensor by a scalar
| S | the scalar value type. Must be arithmetic (e.g. float, real_t, int) or a dual number |
| T | the underlying type of the tensor (righthand) argument |
| n | integers describing the tensor shape |
| [in] | A | The tensor of numerators |
| [in] | scale | The denominator |
Definition at line 606 of file tensor.hpp.
|
constexpr |
|
constexpr |
| MFEM_HOST_DEVICE auto mfem::future::operator/ | ( | S | scale, |
| const tensor< T, n... > & | A ) -> tensor<decltype(S {} * T{}), n...> |
divide a scalar by each element in a tensor
| S | the scalar value type. Must be arithmetic (e.g. float, real_t, int) or a dual number |
| T | the underlying type of the tensor (righthand) argument |
| n | integers describing the tensor shape |
| [in] | scale | The numerator |
| [in] | A | The tensor of denominators |
Definition at line 584 of file tensor.hpp.
|
constexpr |
|
constexpr |
zero divided by something is zero
Definition at line 268 of file tensor.hpp.
| std::ostream & mfem::future::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.
| [in] | os | The stream to work with standard output streams |
| [in] | A | The tensor to write out |
Definition at line 1855 of file tensor.hpp.
| std::ostream & mfem::future::operator<< | ( | std::ostream & | os, |
| dual< value_type, gradient_type > | A ) |
| auto & mfem::future::operator<< | ( | std::ostream & | out, |
| const tuple< T... > & | t ) |
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), m, n > mfem::future::outer | ( | const tensor< S, m > & | A, |
| const tensor< T, n > & | B ) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 825 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), m, n, p > mfem::future::outer | ( | const tensor< S, m > & | A, |
| const tensor< T, n, p > & | B ) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 889 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), m > mfem::future::outer | ( | const tensor< S, m > & | A, |
| T | B ) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 767 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), m, n, p > mfem::future::outer | ( | const tensor< S, m, n > & | A, |
| const tensor< T, p > & | B ) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 866 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), m, n, p, q > mfem::future::outer | ( | const tensor< S, m, n > & | A, |
| const tensor< T, p, q > & | B ) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 911 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), m, n > mfem::future::outer | ( | const tensor< S, m, n > & | A, |
| T | B ) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 845 of file tensor.hpp.
| MFEM_HOST_DEVICE zero mfem::future::outer | ( | const tensor< T, n > & | , |
| zero | ) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
zero Definition at line 794 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), m, n > mfem::future::outer | ( | S | A, |
| const tensor< T, m, n > & | B ) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 805 of file tensor.hpp.
| MFEM_HOST_DEVICE auto mfem::future::outer | ( | S | A, |
| T | B ) -> decltype(A * B) |
compute the outer product of two tensors
| S | the type of the lefthand argument |
| T | the type of the righthand argument |
| [in] | A | The lefthand argument |
| [in] | B | The righthand argument |
Definition at line 724 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< decltype(S{} *T{}), n > mfem::future::outer | ( | S | A, |
| tensor< T, n > | B ) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 750 of file tensor.hpp.
| MFEM_HOST_DEVICE zero mfem::future::outer | ( | zero | , |
| const tensor< T, n > & | ) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
zero, and the right argument is a tensor Definition at line 784 of file tensor.hpp.
| MFEM_HOST_DEVICE value_type mfem::future::pow | ( | value_type | a, |
| value_type | b ) |
| void mfem::future::pretty_print | ( | const mfem::Array< T > & | v | ) |
Pretty print an mfem::Array to out.
T has to have an overloaded operator<<
Formatted s.t. the output is [v0, v1, ..., vn] which is compatible with numpy syntax.
| v | vector of vectors to print |
|
inline |
Pretty print an mfem::Vector to out.
Formatted s.t. the output is [v0, v1, ..., vn] which is compatible with numpy syntax.
| v | vector of vectors to print |
| void mfem::future::pretty_print | ( | const std::unordered_map< K, std::array< T, N > > & | map | ) |
|
inline |
Pretty print an mfem::DenseMatrix to out.
Formatted s.t. the output is [[v00, v01, ..., v0n], [v10, v11, ..., v1n], ..., vmn]] which is compatible with numpy syntax.
| out | ostream to print to |
| A | mfem::DenseMatrix to print |
|
inline |
Pretty print an mfem::Vector with MPI rank.
| v | vector to print |
|
inline |
|
inline |
| void mfem::future::print_shared_memory_info | ( | shmem_info_t & | shmem_info | ) |
| void mfem::future::print_tuple | ( | const std::tuple< Args... > & | t | ) |
| void mfem::future::print_tuple_impl | ( | const Tuple & | t, |
| std::index_sequence< Is... > | ) |
|
inline |
Definition at line 186 of file qfunction_transform.hpp.
|
inline |
Definition at line 174 of file qfunction_transform.hpp.
|
inline |
Definition at line 159 of file qfunction_transform.hpp.
|
inline |
Definition at line 63 of file qfunction_transform.hpp.
|
inline |
Definition at line 74 of file qfunction_transform.hpp.
|
inline |
Definition at line 88 of file qfunction_transform.hpp.
|
inline |
Definition at line 54 of file qfunction_transform.hpp.
|
inline |
Definition at line 39 of file qfunction_transform.hpp.
|
inline |
Definition at line 221 of file qfunction_transform.hpp.
|
inline |
Definition at line 233 of file qfunction_transform.hpp.
| MFEM_HOST_DEVICE void mfem::future::process_qf_arg | ( | const DeviceTensor< 1, T > & | u, |
| const DeviceTensor< 1, T > & | v, | ||
| T & | arg ) |
Definition at line 29 of file qfunction_transform.hpp.
|
inline |
Definition at line 332 of file qfunction_transform.hpp.
|
inline |
Definition at line 203 of file qfunction_transform.hpp.
|
inline |
Definition at line 212 of file qfunction_transform.hpp.
|
inline |
Definition at line 248 of file qfunction_transform.hpp.
|
inline |
Definition at line 132 of file qfunction_transform.hpp.
| MFEM_HOST_DEVICE void mfem::future::process_qf_arg | ( | const T0 & | , |
| const T1 & | , | ||
| T2 & | ) |
Definition at line 21 of file qfunction_transform.hpp.
|
inline |
Definition at line 195 of file qfunction_transform.hpp.
|
inline |
Definition at line 145 of file qfunction_transform.hpp.
|
inline |
Definition at line 256 of file qfunction_transform.hpp.
|
inline |
Definition at line 287 of file qfunction_transform.hpp.
|
inline |
Definition at line 278 of file qfunction_transform.hpp.
|
inline |
Definition at line 105 of file qfunction_transform.hpp.
|
inline |
Definition at line 117 of file qfunction_transform.hpp.
|
inline |
Definition at line 296 of file qfunction_transform.hpp.
|
inline |
Definition at line 305 of file qfunction_transform.hpp.
|
inline |
Definition at line 317 of file qfunction_transform.hpp.
|
inline |
Definition at line 269 of file qfunction_transform.hpp.
|
inline |
| void mfem::future::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.
x is a long vector containing the data for all fields on tdofs and fields contains the information about each individual field to retrieve it's corresponding prolongation.
| fields | the array of field descriptors. |
| x | the input vector in tdofs. |
| fields_l | the array of output vectors in vdofs. |
| N | the number of fields. |
| M | the number of output fields. |
|
inline |
Apply the prolongation operator to a vector of fields.
x is a long vector containing the data for all fields on tdofs and fields contains the information about each individual field to retrieve it's corresponding prolongation.
| fields | the array of field descriptors. |
| x | the input vector in tdofs. |
| fields_l | the array of output vectors in vdofs. |
|
inline |
Definition at line 540 of file qfunction_apply.hpp.
| void mfem::future::restriction | ( | const FieldDescriptor | u, |
| const Vector & | u_l, | ||
| Vector & | field_e, | ||
| ElementDofOrdering | ordering ) |
| void mfem::future::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.
| u | the vector of field descriptors. |
| u_l | the vector of input vectors in vdofs. |
| fields_e | the vector of output vectors in edofs. |
| ordering | the element dof ordering. |
| offset | the array index offset to start writing in fields_e. |
| entity_t | the entity type (see Entity). |
|
inline |
|
inline |
|
constexpr |
Definition at line 2206 of file tensor.hpp.
| MFEM_HOST_DEVICE T mfem::future::sqnorm | ( | const tensor< T, m > & | A | ) |
Returns the squared Frobenius norm of the tensor.
| [in] | A | The tensor to obtain the squared norm from |
Definition at line 1236 of file tensor.hpp.
| MFEM_HOST_DEVICE T mfem::future::sqnorm | ( | const tensor< T, m, n > & | A | ) |
Returns the squared Frobenius norm of the tensor.
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 1251 of file tensor.hpp.
|
constexpr |
Definition at line 2170 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< T, n, n > mfem::future::sym | ( | const tensor< T, n, n > & | A | ) |
Returns the symmetric part of a square matrix.
| [in] | A | The matrix to obtain the symmetric part of |
Definition at line 1333 of file tensor.hpp.
|
constexpr |
Definition at line 2238 of file tensor.hpp.
|
constexpr |
|
constexpr |
Definition at line 2182 of file tensor.hpp.
| MFEM_HOST_DEVICE T mfem::future::tr | ( | const tensor< T, n, n > & | A | ) |
Returns the trace of a square matrix.
| [in] | A | The matrix to compute the trace of |
Definition at line 1317 of file tensor.hpp.
|
constexpr |
Definition at line 2188 of file tensor.hpp.
| MFEM_HOST_DEVICE tensor< T, n, m > mfem::future::transpose | ( | const tensor< T, m, n > & | A | ) |
Returns the transpose of the matrix.
| [in] | A | The matrix to obtain the transpose of |
Definition at line 1388 of file tensor.hpp.
| MFEM_HOST_DEVICE mfem::future::tuple | ( | T... | ) | -> tuple< T... > |
Class template argument deduction rule for tuples.
| T | the variadic template parameter for tuple types |
|
constexpr |
a function intended to be used for extracting the ith type from a tuple.
| I | the index of the tuple to query |
| T | the types stored in the tuple |
| t | the tuple of values |
|
inline |
|
inline |
| MFEM_HOST_DEVICE T mfem::future::weight | ( | const tensor< T, n, m > & | A | ) |
Definition at line 1275 of file tensor.hpp.
| std::array< DeviceTensor< 2 >, num_fields > mfem::future::wrap_fields | ( | std::vector< Vector > & | fields, |
| std::array< int, num_fields > & | field_sizes, | ||
| const int & | num_entities ) |
Wraps plain data in DeviceTensors for fields.
| fields | array of field data |
| field_sizes | for each field, number of values stored for each entity |
| num_entities | number of entities (elements, faces, etc) in mesh |
| num_fields | number of fields |
| std::array< DeviceTensor< 3 >, sizeof...(i)> mfem::future::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... > | ) |