https://mooseframework.inl.gov
NeighborCoupleable.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 #include "MooseVariableBase.h"
13 #include "Coupleable.h"
14 
15 #define usingNeighborCoupleableMembers usingCoupleableMembers
16 
22 {
23 public:
30  NeighborCoupleable(const MooseObject * moose_object,
31  bool nodal,
32  bool neighbor_nodal,
33  bool is_fv = false);
34 
35  // neighbor
36  virtual const VariableValue & coupledNeighborValue(const std::string & var_name,
37  unsigned int comp = 0) const;
38 
39  std::vector<const VariableValue *> coupledNeighborValues(const std::string & var_name) const;
40  std::vector<const VariableValue *> coupledNeighborValuesOld(const std::string & var_name) const;
41  std::vector<const VariableValue *> coupledNeighborValuesOlder(const std::string & var_name) const;
42 
47  virtual const ADVariableValue & adCoupledNeighborValue(const std::string & var_name,
48  unsigned int comp = 0) const;
49 
53  template <bool is_ad>
54  const auto & coupledGenericNeighborValue(const std::string & var_name,
55  unsigned int comp = 0) const;
56 
60  template <bool is_ad>
61  const auto & coupledGenericNeighborGradient(const std::string & var_name,
62  unsigned int comp = 0) const;
63 
68  virtual const ADVariableValue & adCoupledNeighborValueDot(const std::string & var_name,
69  unsigned int comp = 0) const;
70 
71  std::vector<const ADVariableValue *> adCoupledNeighborValues(const std::string & var_name) const;
72 
77  virtual const ADVectorVariableValue & adCoupledVectorNeighborValue(const std::string & var_name,
78  unsigned int comp = 0) const;
79  virtual const VariableValue & coupledNeighborValueDot(const std::string & var_name,
80  unsigned int comp = 0) const;
81  virtual const VariableValue & coupledNeighborValueDotDu(const std::string & var_name,
82  unsigned int comp = 0) const;
83  virtual const VariableValue & coupledNeighborValueOld(const std::string & var_name,
84  unsigned int comp = 0) const;
85  virtual const VariableValue & coupledNeighborValueOlder(const std::string & var_name,
86  unsigned int comp = 0) const;
87 
88  virtual const VariableGradient & coupledNeighborGradient(const std::string & var_name,
89  unsigned int comp = 0) const;
90  virtual std::vector<const VariableGradient *>
91  coupledNeighborGradients(const std::string & var_name) const;
92  virtual const VariableGradient & coupledNeighborGradientOld(const std::string & var_name,
93  unsigned int comp = 0) const;
94  virtual const VariableGradient & coupledNeighborGradientOlder(const std::string & var_name,
95  unsigned int comp = 0) const;
96 
101  virtual const ADVariableGradient & adCoupledNeighborGradient(const std::string & var_name,
102  unsigned int comp = 0) const;
103 
104  virtual const VectorVariableGradient & coupledVectorNeighborGradient(const std::string & var_name,
105  unsigned int comp = 0) const;
106  virtual const VectorVariableGradient &
107  coupledVectorNeighborGradientOld(const std::string & var_name, unsigned int comp = 0) const;
108  virtual const VectorVariableGradient &
109  coupledVectorNeighborGradientOlder(const std::string & var_name, unsigned int comp = 0) const;
110 
111  virtual const ArrayVariableValue & coupledArrayNeighborValue(const std::string & var_name,
112  unsigned int comp = 0) const;
113  virtual const ArrayVariableGradient & coupledArrayNeighborGradient(const std::string & var_name,
114  unsigned int comp = 0) const;
115  virtual const ArrayVariableGradient &
116  coupledArrayNeighborGradientOld(const std::string & var_name, unsigned int comp = 0) const;
117  virtual const ArrayVariableGradient &
118  coupledArrayNeighborGradientOlder(const std::string & var_name, unsigned int comp = 0) const;
119 
120  virtual const VariableSecond & coupledNeighborSecond(const std::string & var_name,
121  unsigned int i = 0) const;
122 
123  virtual const VariableValue & coupledNeighborDofValues(const std::string & var_name,
124  unsigned int comp = 0) const;
125  virtual const VariableValue & coupledNeighborDofValuesOld(const std::string & var_name,
126  unsigned int comp = 0) const;
127  virtual const VariableValue & coupledNeighborDofValuesOlder(const std::string & var_name,
128  unsigned int comp = 0) const;
129 
130 protected:
132 };
133 
134 template <bool is_ad>
135 const auto &
137  const unsigned int comp) const
138 {
139  if constexpr (is_ad)
140  return adCoupledNeighborValue(var_name, comp);
141  else
142  return coupledNeighborValue(var_name, comp);
143 }
144 
145 template <bool is_ad>
146 const auto &
148  const unsigned int comp) const
149 {
150  if constexpr (is_ad)
151  return adCoupledNeighborGradient(var_name, comp);
152  else
153  return coupledNeighborGradient(var_name, comp);
154 }
OutputTools< Real >::VariableGradient VariableGradient
Definition: MooseTypes.h:315
virtual const VectorVariableGradient & coupledVectorNeighborGradientOld(const std::string &var_name, unsigned int comp=0) const
virtual const VectorVariableGradient & coupledVectorNeighborGradient(const std::string &var_name, unsigned int comp=0) const
virtual const ADVariableGradient & adCoupledNeighborGradient(const std::string &var_name, unsigned int comp=0) const
Get the coupled neighbor variable gradient for var_name with derivative information for automatic dif...
virtual std::vector< const VariableGradient * > coupledNeighborGradients(const std::string &var_name) const
virtual const VectorVariableGradient & coupledVectorNeighborGradientOlder(const std::string &var_name, unsigned int comp=0) const
virtual const VariableGradient & coupledNeighborGradient(const std::string &var_name, unsigned int comp=0) const
std::vector< const VariableValue * > coupledNeighborValuesOld(const std::string &var_name) const
virtual const VariableValue & coupledNeighborValueOlder(const std::string &var_name, unsigned int comp=0) const
virtual const VariableValue & coupledNeighborDofValuesOld(const std::string &var_name, unsigned int comp=0) const
virtual const VariableGradient & coupledNeighborGradientOld(const std::string &var_name, unsigned int comp=0) const
const auto & coupledGenericNeighborValue(const std::string &var_name, unsigned int comp=0) const
Retrieve the coupled neighbor variable value whether AD or not.
virtual const ArrayVariableValue & coupledArrayNeighborValue(const std::string &var_name, unsigned int comp=0) const
virtual const ArrayVariableGradient & coupledArrayNeighborGradientOlder(const std::string &var_name, unsigned int comp=0) const
OutputTools< RealEigenVector >::VariableValue ArrayVariableValue
Definition: MooseTypes.h:348
virtual const ADVectorVariableValue & adCoupledVectorNeighborValue(const std::string &var_name, unsigned int comp=0) const
Get the coupled neighbor vector variable value for var_name with derivative information for automatic...
virtual const VariableValue & coupledNeighborValue(const std::string &var_name, unsigned int comp=0) const
Every object that can be built by the factory should be derived from this class.
Definition: MooseObject.h:28
std::vector< const VariableValue * > coupledNeighborValuesOlder(const std::string &var_name) const
virtual const VariableValue & coupledNeighborValueDotDu(const std::string &var_name, unsigned int comp=0) const
std::vector< const ADVariableValue * > adCoupledNeighborValues(const std::string &var_name) const
virtual const VariableGradient & coupledNeighborGradientOlder(const std::string &var_name, unsigned int comp=0) const
virtual const ADVariableValue & adCoupledNeighborValue(const std::string &var_name, unsigned int comp=0) const
Get the coupled neighbor variable value for var_name with derivative information for automatic differ...
virtual const ArrayVariableGradient & coupledArrayNeighborGradient(const std::string &var_name, unsigned int comp=0) const
OutputTools< Real >::VariableValue VariableValue
Definition: MooseTypes.h:314
Interface for objects that needs coupling capabilities.
Definition: Coupleable.h:45
NeighborCoupleable(const MooseObject *moose_object, bool nodal, bool neighbor_nodal, bool is_fv=false)
Constructing the object.
virtual const ArrayVariableGradient & coupledArrayNeighborGradientOld(const std::string &var_name, unsigned int comp=0) const
virtual const ADVariableValue & adCoupledNeighborValueDot(const std::string &var_name, unsigned int comp=0) const
Get the time derivative of the coupled neighbor variable value for var_name with derivative informati...
virtual const VariableValue & coupledNeighborValueDot(const std::string &var_name, unsigned int comp=0) const
const auto & coupledGenericNeighborGradient(const std::string &var_name, unsigned int comp=0) const
Retrieve the coupled neighbor variable gradient whether AD or not.
virtual const VariableValue & coupledNeighborDofValuesOlder(const std::string &var_name, unsigned int comp=0) const
virtual const VariableValue & coupledNeighborDofValues(const std::string &var_name, unsigned int comp=0) const
OutputTools< Real >::VariableSecond VariableSecond
Definition: MooseTypes.h:316
virtual const VariableValue & coupledNeighborValueOld(const std::string &var_name, unsigned int comp=0) const
OutputTools< RealVectorValue >::VariableGradient VectorVariableGradient
Definition: MooseTypes.h:332
OutputTools< RealEigenVector >::VariableGradient ArrayVariableGradient
Definition: MooseTypes.h:349
std::vector< const VariableValue * > coupledNeighborValues(const std::string &var_name) const
Enhances Coupleable interface to also couple the values from neighbor elements.
virtual const VariableSecond & coupledNeighborSecond(const std::string &var_name, unsigned int i=0) const