MFEM v4.9.0
Finite element discretization library
Loading...
Searching...
No Matches
dual.hpp File Reference

This file contains the declaration of a dual number class. More...

Go to the source code of this file.

Classes

struct  mfem::future::dual< value_type, gradient_type >
 Dual number struct (value plus gradient) More...
 
struct  mfem::future::is_dual_number< T >
 class for checking if a type is a dual number or not More...
 
struct  mfem::future::is_dual_number< dual< value_type, gradient_type > >
 class for checking if a type is a dual number or not More...
 

Namespaces

namespace  mfem
 
namespace  mfem::future
 

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 mfem::future::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 mfem::future::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 mfem::future::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 mfem::future::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 mfem::future::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 mfem::future::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 mfem::future::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 mfem::future::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 mfem::future::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 mfem::future::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 mfem::future::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 mfem::future::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 mfem::future::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::future::mfem_binary_comparator_overload (<) mfem_binary_comparator_overload(<
 implement operator<= for dual numbers
 
gradient_type MFEM_HOST_DEVICE dual< value_type, gradient_type > & mfem::future::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 > & mfem::future::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 > & mfem::future::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 > & mfem::future::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 > mfem::future::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 > mfem::future::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 > mfem::future::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 > mfem::future::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 > mfem::future::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 > mfem::future::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 > mfem::future::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 > mfem::future::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 > mfem::future::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 > mfem::future::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 > mfem::future::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 > mfem::future::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 > mfem::future::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 mfem::future::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 > mfem::future::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 & mfem::future::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_tmfem::future::make_dual (real_t x)
 promote a value to a dual number of the appropriate type
 
template<typename T >
MFEM_HOST_DEVICE T mfem::future::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 mfem::future::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 mfem::future::get_gradient (dual< value_type, gradient_type > arg)
 return the "gradient" part from a dual number type
 

Detailed Description

This file contains the declaration of a dual number class.

Definition in file dual.hpp.