Hipace
DualNumbers.H
Go to the documentation of this file.
1 /* Copyright 2022
2  *
3  * This file is part of HiPACE++.
4  *
5  * Authors: AlexanderSinn
6  * License: BSD-3-Clause-LBNL
7  */
8 #ifndef HIPACE_DUALNUMBERS_H_
9 #define HIPACE_DUALNUMBERS_H_
10 
11 #include <AMReX_Config.H>
12 
13 struct DualNumber {
14  amrex::Real value;
15  amrex::Real epsilon;
16 
18  DualNumber (amrex::Real val, amrex::Real ep) : value{val}, epsilon{ep} {}
20  DualNumber (amrex::Real val) : value{val}, epsilon{0} {}
22  DualNumber () : value{0}, epsilon{0} {}
23 
26  return {a.value + b.value, a.epsilon + b.epsilon};
27  }
28 
31  return {a.value - b.value, a.epsilon - b.epsilon};
32  }
33 
36  return {a.value * b.value, a.epsilon * b.value + a.value * b.epsilon};
37  }
38 
41  return {a.value / b.value, (a.epsilon * b.value - a.value * b.epsilon)/(b.value * b.value)};
42  }
43 };
44 
45 #endif
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
Definition: DualNumbers.H:13
friend AMREX_GPU_HOST_DEVICE constexpr AMREX_FORCE_INLINE DualNumber operator/(const DualNumber &a, const DualNumber &b)
Definition: DualNumbers.H:40
friend AMREX_GPU_HOST_DEVICE constexpr AMREX_FORCE_INLINE DualNumber operator*(const DualNumber &a, const DualNumber &b)
Definition: DualNumbers.H:35
friend AMREX_GPU_HOST_DEVICE constexpr AMREX_FORCE_INLINE DualNumber operator-(const DualNumber &a, const DualNumber &b)
Definition: DualNumbers.H:30
AMREX_GPU_HOST_DEVICE constexpr AMREX_FORCE_INLINE DualNumber(amrex::Real val, amrex::Real ep)
Definition: DualNumbers.H:18
amrex::Real value
Definition: DualNumbers.H:14
friend AMREX_GPU_HOST_DEVICE constexpr AMREX_FORCE_INLINE DualNumber operator+(const DualNumber &a, const DualNumber &b)
Definition: DualNumbers.H:25
amrex::Real epsilon
Definition: DualNumbers.H:15
AMREX_GPU_HOST_DEVICE constexpr AMREX_FORCE_INLINE DualNumber()
Definition: DualNumbers.H:22
AMREX_GPU_HOST_DEVICE constexpr AMREX_FORCE_INLINE DualNumber(amrex::Real val)
Definition: DualNumbers.H:20