www.mooseframework.org
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes | List of all members
MooseADWrapperBase< T, S > Class Template Referenceabstract

#include <MooseADWrapper.h>

Public Types

typedef S DNType
 

Public Member Functions

 MooseADWrapperBase ()
 
 MooseADWrapperBase (MooseADWrapperBase< T, S > &&)=default
 
virtual ~MooseADWrapperBase ()=default
 
const T & value () const
 Returns the value for any case where a MaterialProperty is requested as a regular (non-AD) property. More...
 
T & value ()
 Returns the value for any case where a MaterialProperty is declared as a regular (non-AD) property (used only during material calculations) More...
 
MooseADWrapperBase< T, S > & operator= (const MooseADWrapperBase< T, S > &rhs)
 
MooseADWrapperBase< T, S > & operator= (MooseADWrapperBase< T, S > &&)=default
 
virtual const DNTypedn (bool=true) const
 Returns the dual number for any case where a MaterialProperty is requested as a AD property. More...
 
virtual DNTypedn (bool=true)
 Returns the value for any case where a MaterialProperty is declared as an AD property (used only during material calculations) More...
 
void synchronizeToVal () const
 
void synchronizeToDual () const
 

Protected Member Functions

virtual void initializeDual () const =0
 
virtual void copyDualNumberToValue () const =0
 
virtual void copyValueToDualNumber () const =0
 

Protected Attributes

_val
 
std::unique_ptr< DNType_dual_number = nullptr
 

Private Attributes

bool _dual_is_dirty = true
 
bool _val_is_dirty = false
 

Detailed Description

template<typename T, typename S>
class MooseADWrapperBase< T, S >

Definition at line 36 of file MooseADWrapper.h.

Member Typedef Documentation

◆ DNType

template<typename T, typename S>
typedef S MooseADWrapperBase< T, S >::DNType

Definition at line 39 of file MooseADWrapper.h.

Constructor & Destructor Documentation

◆ MooseADWrapperBase() [1/2]

template<typename T, typename S>
MooseADWrapperBase< T, S >::MooseADWrapperBase ( )
inline

Definition at line 41 of file MooseADWrapper.h.

41 : _val() {}

◆ MooseADWrapperBase() [2/2]

template<typename T, typename S>
MooseADWrapperBase< T, S >::MooseADWrapperBase ( MooseADWrapperBase< T, S > &&  )
default

◆ ~MooseADWrapperBase()

template<typename T, typename S>
virtual MooseADWrapperBase< T, S >::~MooseADWrapperBase ( )
virtualdefault

Member Function Documentation

◆ copyDualNumberToValue()

template<typename T, typename S>
virtual void MooseADWrapperBase< T, S >::copyDualNumberToValue ( ) const
protectedpure virtual

◆ copyValueToDualNumber()

template<typename T, typename S>
virtual void MooseADWrapperBase< T, S >::copyValueToDualNumber ( ) const
protectedpure virtual

◆ dn() [1/2]

template<typename T, typename S>
virtual DNType& MooseADWrapperBase< T, S >::dn ( bool  = true)
inlinevirtual

Returns the value for any case where a MaterialProperty is declared as an AD property (used only during material calculations)

Reimplemented in MooseADWrapper< T >.

Definition at line 91 of file MooseADWrapper.h.

92  {
94  _val_is_dirty = true;
95  return *_dual_number;
96  }

◆ dn() [2/2]

template<typename T, typename S>
virtual const DNType& MooseADWrapperBase< T, S >::dn ( bool  = true) const
inlinevirtual

Returns the dual number for any case where a MaterialProperty is requested as a AD property.

Reimplemented in MooseADWrapper< T >.

Definition at line 81 of file MooseADWrapper.h.

82  {
84  return *_dual_number;
85  }

Referenced by MooseADWrapper< T >::dn().

◆ initializeDual()

template<typename T, typename S>
virtual void MooseADWrapperBase< T, S >::initializeDual ( ) const
protectedpure virtual

◆ operator=() [1/2]

template<typename T, typename S>
MooseADWrapperBase<T, S>& MooseADWrapperBase< T, S >::operator= ( const MooseADWrapperBase< T, S > &  rhs)
inline

Definition at line 66 of file MooseADWrapper.h.

67  {
68  _val = rhs._val;
69  if (_dual_number && rhs._dual_number)
70  *_dual_number = *rhs._dual_number;
71  else if (_dual_number)
73  return *this;
74  }

◆ operator=() [2/2]

template<typename T, typename S>
MooseADWrapperBase<T, S>& MooseADWrapperBase< T, S >::operator= ( MooseADWrapperBase< T, S > &&  )
default

◆ synchronizeToDual()

template<typename T, typename S>
void MooseADWrapperBase< T, S >::synchronizeToDual ( ) const
inline

Definition at line 112 of file MooseADWrapper.h.

113  {
114  mooseAssert(!(_dual_is_dirty && _val_is_dirty),
115  "dual/non-dual material property synchronization is broken");
116  if (!_dual_is_dirty)
117  return;
118 
119  if (!_dual_number)
120  initializeDual();
121  if (_dual_number)
123  _dual_is_dirty = false;
124  }

Referenced by MooseADWrapperBase< TensorValue< Real >, TensorValue< DualReal > >::dn().

◆ synchronizeToVal()

template<typename T, typename S>
void MooseADWrapperBase< T, S >::synchronizeToVal ( ) const
inline

Definition at line 98 of file MooseADWrapper.h.

99  {
100  mooseAssert(!(_dual_is_dirty && _val_is_dirty),
101  "dual/non-dual material property synchronization is broken");
102  if (!_val_is_dirty)
103  return;
104 
105  if (!_dual_number)
106  initializeDual();
107  if (_dual_number)
109  _val_is_dirty = false;
110  }

Referenced by MooseADWrapperBase< TensorValue< Real >, TensorValue< DualReal > >::value().

◆ value() [1/2]

template<typename T, typename S>
T& MooseADWrapperBase< T, S >::value ( )
inline

Returns the value for any case where a MaterialProperty is declared as a regular (non-AD) property (used only during material calculations)

Definition at line 59 of file MooseADWrapper.h.

60  {
62  _dual_is_dirty = true;
63  return _val;
64  }

◆ value() [2/2]

template<typename T, typename S>
const T& MooseADWrapperBase< T, S >::value ( ) const
inline

Returns the value for any case where a MaterialProperty is requested as a regular (non-AD) property.

Definition at line 49 of file MooseADWrapper.h.

50  {
52  return _val;
53  }

Referenced by MooseADWrapper< std::vector< DenseMatrix< Real > > >::copyDualNumberToValue().

Member Data Documentation

◆ _dual_is_dirty

template<typename T, typename S>
bool MooseADWrapperBase< T, S >::_dual_is_dirty = true
mutableprivate

◆ _dual_number

template<typename T, typename S>
std::unique_ptr<DNType> MooseADWrapperBase< T, S >::_dual_number = nullptr
mutableprotected

◆ _val

template<typename T, typename S>
T MooseADWrapperBase< T, S >::_val
mutableprotected

◆ _val_is_dirty

template<typename T, typename S>
bool MooseADWrapperBase< T, S >::_val_is_dirty = false
mutableprivate

The documentation for this class was generated from the following file:
MooseADWrapperBase::synchronizeToDual
void synchronizeToDual() const
Definition: MooseADWrapper.h:112
MooseADWrapperBase::_val
T _val
Definition: MooseADWrapper.h:131
MooseADWrapperBase::_val_is_dirty
bool _val_is_dirty
Definition: MooseADWrapper.h:136
MooseADWrapperBase::copyValueToDualNumber
virtual void copyValueToDualNumber() const =0
MooseADWrapperBase::_dual_number
std::unique_ptr< DNType > _dual_number
Definition: MooseADWrapper.h:132
MooseADWrapperBase::_dual_is_dirty
bool _dual_is_dirty
Definition: MooseADWrapper.h:135
MooseADWrapperBase::initializeDual
virtual void initializeDual() const =0
MooseADWrapperBase::synchronizeToVal
void synchronizeToVal() const
Definition: MooseADWrapper.h:98
MooseADWrapperBase::copyDualNumberToValue
virtual void copyDualNumberToValue() const =0