https://mooseframework.inl.gov
Loading...
Searching...
No Matches
InterfaceMaterial.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// MOOOSE includes
13#include "MaterialBase.h"
14#include "NeighborCoupleable.h"
16
17#define usingInterfaceMaterialMembers \
18 usingMaterialBaseMembers; \
19 usingNeighborCoupleableMembers; \
20 using InterfaceMaterial::_q_point; \
21 using InterfaceMaterial::_qrule; \
22 using InterfaceMaterial::_JxW; \
23 using InterfaceMaterial::_current_elem; \
24 using InterfaceMaterial::_neighbor_elem; \
25 using InterfaceMaterial::_current_side; \
26 using InterfaceMaterial::_neighbor_side
27
32 public NeighborCoupleable,
34{
35public:
37
39
40 virtual bool isInterfaceMaterial() override { return true; };
41 void computeProperties() override;
42
44
50 template <typename T, bool is_ad>
52 getGenericMaterialProperty(const std::string & name, const unsigned int state = 0);
53 template <typename T>
54 const MaterialProperty<T> & getMaterialProperty(const std::string & name,
55 const unsigned int state = 0)
56 {
57 return getGenericMaterialProperty<T, false>(name, state);
58 }
59 template <typename T>
61 {
62 return getGenericMaterialProperty<T, true>(name, 0);
63 }
64 template <typename T>
65 const MaterialProperty<T> & getMaterialPropertyOld(const std::string & name)
66 {
67 return getGenericMaterialProperty<T, false>(name, 1);
68 }
69 template <typename T>
71 {
72 return getGenericMaterialProperty<T, false>(name, 2);
73 }
75
77
82 template <typename T, bool is_ad>
84 getGenericMaterialPropertyByName(const std::string & name, const unsigned int state = 0);
85 template <typename T>
86 const MaterialProperty<T> & getMaterialPropertyByName(const std::string & prop_name,
87 const unsigned int state = 0)
88 {
89
90 return getGenericMaterialPropertyByName<T, false>(prop_name, state);
91 }
92 template <typename T>
93 const ADMaterialProperty<T> & getADMaterialPropertyByName(const std::string & prop_name)
94 {
95
96 return getGenericMaterialPropertyByName<T, true>(prop_name, 0);
97 }
98 template <typename T>
99 const MaterialProperty<T> & getMaterialPropertyOldByName(const std::string & prop_name)
100 {
101
102 return getGenericMaterialPropertyByName<T, false>(prop_name, 1);
103 }
104 template <typename T>
105 const MaterialProperty<T> & getMaterialPropertyOlderByName(const std::string & prop_name)
106 {
107
108 return getGenericMaterialPropertyByName<T, false>(prop_name, 2);
109 }
111
113
119 template <typename T, bool is_ad>
121 getGenericNeighborMaterialProperty(const std::string & name, const unsigned int state = 0);
122 template <typename T>
124 const unsigned int state = 0)
125 {
126 return getGenericNeighborMaterialProperty<T, false>(name, state);
127 }
128 template <typename T>
130 {
131 return getGenericNeighborMaterialProperty<T, true>(name, 0);
132 }
133 template <typename T>
135 {
136 return getGenericNeighborMaterialProperty<T, false>(name, 1);
137 }
138 template <typename T>
140 {
141 return getGenericNeighborMaterialProperty<T, false>(name, 2);
142 }
144
146
151 template <typename T, bool is_ad>
153 getGenericNeighborMaterialPropertyByName(const std::string & name, const unsigned int state = 0);
154 template <typename T>
155 const MaterialProperty<T> & getNeighborMaterialPropertyByName(const std::string & prop_name,
156 const unsigned int state = 0)
157 {
158 return getGenericNeighborMaterialPropertyByName<T, false>(prop_name, state);
159 }
160 template <typename T>
161 const ADMaterialProperty<T> & getNeighborADMaterialPropertyByName(const std::string & prop_name)
162 {
163 return getGenericNeighborMaterialPropertyByName<T, true>(prop_name, 0);
164 }
166
168
169 virtual bool isBoundaryMaterial() const override { return true; }
170
171 virtual const std::unordered_set<unsigned int> & getMatPropDependencies() const override
172 {
174 }
175
176protected:
177 bool usesFaceCoupledValues() const override { return true; }
178
179 virtual const MaterialData & materialData() const override { return _material_data; }
180 virtual MaterialData & materialData() override { return _material_data; }
182
183 virtual const QBase & qRule() const override { return *_qrule; }
184
185 bool _bnd;
187 const QBase * const & _qrule;
189
191 const Elem * const & _current_elem;
193 const Elem * const & _neighbor_elem;
195 const unsigned int & _current_side;
197 const unsigned int & _neighbor_side;
198};
199
200template <typename T, bool is_ad>
202InterfaceMaterial::getGenericMaterialProperty(const std::string & name, const unsigned int state)
203{
204 // Check if the supplied parameter is a valid input parameter key
205 const auto prop_name = getMaterialPropertyName(name);
206
207 // Check if it's just a constant.
208 if (const auto * default_property = defaultGenericMaterialProperty<T, is_ad>(prop_name))
209 return *default_property;
210
211 return getGenericMaterialPropertyByName<T, is_ad>(prop_name, state);
212}
213
214template <typename T, bool is_ad>
217 const unsigned int state)
218{
220
221 // The property may not exist yet, so declare it (declare/getMaterialProperty are referencing the
222 // same memory)
223 if (state == 0)
224 _requested_props.insert(prop_name);
225
226 // Do this before hand so that the propery id is defined
227 auto & prop =
228 TwoMaterialPropertyInterface::getGenericMaterialPropertyByName<T, is_ad>(prop_name, state);
229
230 registerPropName(prop_name, true, state);
231
232 return prop;
233}
234
235template <typename T, bool is_ad>
238 const unsigned int state)
239{
240 // Check if the supplied parameter is a valid input parameter key
241 const auto prop_name = getMaterialPropertyName(name);
242
243 // Check if it's just a constant.
244 if (const auto * default_property = defaultGenericMaterialProperty<T, is_ad>(prop_name))
245 return *default_property;
246
247 return getGenericNeighborMaterialPropertyByName<T, is_ad>(prop_name, state);
248}
249
250template <typename T, bool is_ad>
253 const unsigned int state)
254{
256
257 // The property may not exist yet, so declare it (declare/getMaterialProperty are referencing the
258 // same memory)
259 if (state == 0)
260 _requested_props.insert(name);
261
262 // Do this before hand so that the propery id is defined
263 auto & prop =
264 TwoMaterialPropertyInterface::getGenericNeighborMaterialPropertyByName<T, is_ad>(name, state);
265
266 registerPropName(name, true, state);
267
268 return prop;
269}
typename GenericMaterialPropertyStruct< T, is_ad >::type GenericMaterialProperty
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
Interface materials compute MaterialProperties.
virtual MaterialData & materialData() override
const unsigned int & _current_side
current side of the current element
const MaterialProperty< T > & getNeighborMaterialPropertyOlder(const std::string &name)
virtual Moose::MaterialDataType materialDataType() override
const unsigned int & _neighbor_side
current side of the neighbor element
const MooseArray< Real > & _JxW
virtual const std::unordered_set< unsigned int > & getMatPropDependencies() const override
Retrieve the set of material properties that this object depends on.
const QBase *const & _qrule
const GenericMaterialProperty< T, is_ad > & getGenericNeighborMaterialPropertyByName(const std::string &name, const unsigned int state=0)
Retrieve the neighbor property named "name".
const GenericMaterialProperty< T, is_ad > & getGenericMaterialPropertyByName(const std::string &name, const unsigned int state=0)
Retrieve the property named "name".
bool usesFaceCoupledValues() const override
Whether this object evaluates coupled variables on element faces, so that it must request coupled AD ...
void computeProperties() override
Performs the quadrature point loop, calling computeQpProperties.
const MaterialProperty< T > & getNeighborMaterialPropertyByName(const std::string &prop_name, const unsigned int state=0)
virtual const MaterialData & materialData() const override
virtual bool isInterfaceMaterial() override
const ADMaterialProperty< T > & getADMaterialProperty(const std::string &name)
const ADMaterialProperty< T > & getNeighborADMaterialProperty(const std::string &name)
virtual const QBase & qRule() const override
const Elem *const & _neighbor_elem
Current neighbor element.
const ADMaterialProperty< T > & getNeighborADMaterialPropertyByName(const std::string &prop_name)
const MaterialProperty< T > & getMaterialPropertyOldByName(const std::string &prop_name)
const MaterialProperty< T > & getMaterialPropertyOlderByName(const std::string &prop_name)
const Elem *const & _current_elem
Current element.
const MaterialProperty< T > & getMaterialPropertyByName(const std::string &prop_name, const unsigned int state=0)
const MaterialProperty< T > & getMaterialPropertyOld(const std::string &name)
const MaterialProperty< T > & getMaterialPropertyOlder(const std::string &name)
const MaterialProperty< T > & getMaterialProperty(const std::string &name, const unsigned int state=0)
const MooseArray< Point > & _q_point
const MaterialProperty< T > & getNeighborMaterialProperty(const std::string &name, const unsigned int state=0)
static InputParameters validParams()
const MaterialProperty< T > & getNeighborMaterialPropertyOld(const std::string &name)
const GenericMaterialProperty< T, is_ad > & getGenericMaterialProperty(const std::string &name, const unsigned int state=0)
Retrieve the property through a given input parameter key with a fallback to getting it by name.
const GenericMaterialProperty< T, is_ad > & getGenericNeighborMaterialProperty(const std::string &name, const unsigned int state=0)
Retrieve the neighbor property through a given input parameter key with a fallback to getting it by n...
virtual bool isBoundaryMaterial() const override
Returns true of the MaterialData type is not associated with volume data.
const ADMaterialProperty< T > & getADMaterialPropertyByName(const std::string &prop_name)
MaterialBases compute MaterialProperties.
const MaterialProperty< T > & getZeroMaterialProperty(Ts... args)
for backwards compatibility
void checkExecutionStage()
Check and throw an error if the execution has progressed past the construction stage.
std::set< std::string > _requested_props
Set of properties accessed via get method.
void registerPropName(const std::string &prop_name, bool is_get, const unsigned int state)
Small helper function to call store{Subdomain,Boundary}MatPropName.
Proxy for accessing MaterialPropertyStorage.
MaterialPropertyName getMaterialPropertyName(const std::string &name) const
const Moose::MaterialDataType _material_data_type
The type of data.
virtual const std::unordered_set< unsigned int > & getMatPropDependencies() const
Retrieve the set of material properties that this object depends on.
MaterialData & _material_data
The material data class that stores properties.
forward declarations
Definition MooseArray.h:18
const InputParameters & parameters() const
Get the parameters of the object.
Definition MooseBase.h:131
const std::string & name() const
Get the name of the class.
Definition MooseBase.h:103
Enhances Coupleable interface to also couple the values from neighbor elements.
This interface is designed for DGKernel, InternalSideUserObject, InterfaceUserObject,...
MaterialDataType
MaterialData types.
Definition MooseTypes.h:746