24 "_material_data_type");
25 params.
addParam<MaterialPropertyName>(
"prop_getter_suffix",
27 "An optional suffix parameter that can be appended to any " 28 "attempt to retrieve/get material properties. The suffix " 29 "will be prepended with a '_' character.");
31 "use_interpolated_state",
33 "For the old and older state use projected material properties interpolated at the " 34 "quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.");
36 "Material property retrieval");
54 const std::set<SubdomainID> & block_ids,
55 const std::set<BoundaryID> & boundary_ids)
56 : _mi_moose_object(*moose_object),
57 _mi_params(_mi_moose_object.parameters()),
58 _mi_name(moose_object->
name()),
59 _mi_moose_object_name(_mi_moose_object.getBase(), _mi_name,
"::"),
60 _mi_feproblem(*_mi_params.getCheckedPointerParam<
FEProblemBase *>(
"_fe_problem_base")),
61 _mi_subproblem(*_mi_params.getCheckedPointerParam<
SubProblem *>(
"_subproblem")),
63 #ifdef MOOSE_KOKKOS_ENABLED
64 _is_kokkos_object(_mi_moose_object.isKokkosObject()),
66 _material_data_type(getMaterialDataType(boundary_ids)),
68 #ifdef MOOSE_KOKKOS_ENABLED
70 ? _mi_feproblem.getKokkosMaterialData(_material_data_type, moose_object)
73 _mi_feproblem.getMaterialData(_material_data_type, _mi_tid, moose_object)),
74 _stateful_allowed(true),
75 _get_material_property_called(false),
76 _get_suffix(_mi_params.
get<MaterialPropertyName>(
"prop_getter_suffix")),
77 _use_interpolated_state(_mi_params.
get<bool>(
"use_interpolated_state")),
79 _mi_block_ids(block_ids),
80 _mi_boundary_ids(boundary_ids)
85 #ifdef MOOSE_KOKKOS_ENABLED 88 : _mi_moose_object(object._mi_moose_object),
89 _mi_params(object._mi_params),
90 _mi_name(object._mi_name),
91 _mi_moose_object_name(object._mi_moose_object_name),
92 _mi_feproblem(object._mi_feproblem),
93 _mi_subproblem(object._mi_subproblem),
94 _mi_tid(object._mi_tid),
95 _is_kokkos_object(object._is_kokkos_object),
96 _material_data_type(object._material_data_type),
97 _material_data(object._material_data),
98 _stateful_allowed(object._stateful_allowed),
99 _get_material_property_called(object._get_material_property_called),
100 _get_suffix(object._get_suffix),
101 _use_interpolated_state(object._use_interpolated_state),
102 _mi_boundary_restricted(object._mi_boundary_restricted),
103 _mi_block_ids(object._mi_block_ids),
104 _mi_boundary_ids(object._mi_boundary_ids)
117 std::set<SubdomainID>
123 std::vector<SubdomainName>
135 std::vector<BoundaryName>
149 const std::string & prop_name)
185 std::shared_ptr<MaterialBase> discrete)
190 std::ostringstream oss;
191 oss <<
"Incompatible material and object blocks:";
193 oss <<
"\n " << discrete->parameters().paramLocationPrefix(
"block")
194 <<
" material defined on blocks ";
195 for (
const auto & sbd_id : discrete->blockIDs())
196 oss << sbd_id <<
", ";
199 <<
" object needs material on blocks ";
201 oss << block_id <<
", ";
209 std::ostringstream oss;
210 oss <<
"Incompatible material and object boundaries:";
212 oss <<
"\n " << discrete->parameters().paramLocationPrefix(
"boundary")
213 <<
" material defined on boundaries ";
214 for (
const auto & bnd_id : discrete->boundaryIDs())
215 oss << bnd_id <<
", ";
218 <<
" object needs material on boundaries ";
220 oss << bnd_id <<
", ";
235 std::shared_ptr<MaterialBase> discrete =
242 std::unordered_map<SubdomainID, std::vector<MaterialBase *>>
245 std::unordered_map<SubdomainID, std::vector<MaterialBase *>> required_mats;
250 std::array<const MaterialPropertyInterface *, 1> consumers = {{
this}};
251 const auto block_required =
253 required_mats[id].insert(
254 required_mats[
id].begin(), block_required.begin(), block_required.end());
256 return required_mats;
263 mooseError(
"Material properties must be retrieved during object construction. This is a code " 271 proxy->resolve(*
this);
std::string name(const ElemQuality q)
FEProblemBase & _mi_feproblem
Reference to the FEProblemBase class.
const THREAD_ID _mi_tid
Current threaded it.
virtual void resolveOptionalProperties()
resolve all optional properties
static const std::string _interpolated_old
name suffixes for interpolated old and older properties
virtual void checkMaterialProperty(const std::string &name, const unsigned int state)
A helper method for checking material properties This method was required to avoid a compiler problem...
unsigned int getMaxQps() const
virtual std::set< BoundaryID > getMaterialPropertyBoundaryIDs(const std::string &prop_name)
Get a vector containing the block ids the material property is defined on.
const std::set< SubdomainID > & _mi_block_ids
Storage for the block ids created by BlockRestrictable.
std::vector< BoundaryName > getMaterialPropertyBoundaryNames(const std::string &name)
Retrieve the boundary namess that the material property is defined.
const std::map< SubdomainID, std::vector< std::shared_ptr< T > > > & getActiveBlockObjects(THREAD_ID tid=0) const
MaterialPropertyInterface(const MooseObject *moose_object, const std::set< SubdomainID > &block_ids, const std::set< BoundaryID > &boundary_ids)
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
void addConsumedPropertyName(const MooseObjectName &obj_name, const std::string &prop_name)
Helper for tracking the object that is consuming a property for MaterialPropertyDebugOutput.
virtual void storeSubdomainDelayedCheckMatProp(const std::string &requestor, SubdomainID block_id, const std::string &name)
Adds to a map based on block ids of material properties to validate.
static const std::string _interpolated_older
MaterialDataType
MaterialData types.
std::vector< SubdomainName > getMaterialPropertyBlockNames(const std::string &name)
Retrieve the block names that the material property is defined.
const bool _mi_boundary_restricted
BoundaryRestricted flag.
std::set< BoundaryID > getMaterialPropertyBoundaryIDs(const std::string &name)
Retrieve the boundary ids that the material property is defined.
virtual void storeBoundaryDelayedCheckMatProp(const std::string &requestor, BoundaryID boundary_id, const std::string &name)
Adds to a map based on boundary ids of material properties to validate.
static InputParameters validParams()
const std::set< BoundaryID > & _mi_boundary_ids
Storage for the boundary ids created by BoundaryRestrictable.
const std::string _mi_name
The name of the object that this interface belongs to.
const MaterialWarehouse & getMaterialWarehouse() const
MaterialPropertyName getMaterialPropertyName(const std::string &name) const
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
virtual void markMatPropRequested(const std::string &)
Helper method for adding a material property name to the _material_property_requested set...
void markMatPropRequested(const std::string &)
A proxy method for _mi_feproblem.markMatPropRequested(name)
MooseApp & getMooseApp() const
Get the MooseApp this class is associated with.
std::set< SubdomainID > getMaterialPropertyBlocks(const std::string &name)
Retrieve the block ids that the material property is defined.
static bool restricted(const std::set< BoundaryID > &ids)
Helper for determining if the object is boundary restricted.
Every object that can be built by the factory should be derived from this class.
Moose::MaterialDataType getMaterialDataType(const std::set< BoundaryID > &boundary_ids) const
virtual std::vector< SubdomainName > getMaterialPropertyBlockNames(const std::string &prop_name)
Get a vector of block id equivalences that the material property is defined on.
const InputParameters & _mi_params
Parameters of the object with this interface.
virtual std::set< SubdomainID > getMaterialPropertyBlocks(const std::string &prop_name)
Get a vector containing the block ids the material property is defined on.
MaterialBase & getMaterialByName(const std::string &name, bool no_warn=false)
void statefulPropertiesAllowed(bool)
Derived classes can declare whether or not they work with stateful material properties.
Generic class for solving transient nonlinear problems.
virtual std::vector< BoundaryName > getMaterialPropertyBoundaryNames(const std::string &prop_name)
Get a vector of block id equivalences that the material property is defined on.
std::shared_ptr< MaterialBase > getMaterial(std::string name, Moose::MaterialDataType type, const THREAD_ID tid=0, bool no_warn=false)
Return a pointer to a MaterialBase object.
An interface for accessing Materials.
static std::deque< MaterialBase * > buildRequiredMaterials(const Consumers &mat_consumers, const std::vector< std::shared_ptr< MaterialBase >> &mats, const bool allow_stateful)
Build the materials required by a set of consumer objects.
void addConsumedPropertyName(const MooseObjectName &obj_name, const std::string &prop_name)
std::vector< std::unique_ptr< OptionalMaterialPropertyProxyBase< MaterialPropertyInterface > > > _optional_property_proxies
optional material properties
void checkBlockAndBoundaryCompatibility(std::shared_ptr< MaterialBase > discrete)
Check if block and boundary restrictions of a given material are compatible with the current material...
void checkExecutionStage()
Check and throw an error if the execution has progressed past the construction stage.
const Moose::MaterialDataType _material_data_type
The type of data.
bool _stateful_allowed
True by default.
A class for storing the names of MooseObject by tag and object name.
MaterialBase & getMaterial(const std::string &name)
Return a MaterialBase reference - usable for computing directly.
bool boundaryRestricted(const std::set< BoundaryID > &boundary_ids)
MaterialBases compute MaterialProperties.
const Elem & get(const ElemType type_in)
void registerInterfaceObject(T &interface)
Registers an interface object for accessing with getInterfaceObjects.
virtual bool startedInitialSetup()
Returns true if we are in or beyond the initialSetup stage.
std::unordered_map< SubdomainID, std::vector< MaterialBase * > > buildRequiredMaterials(bool allow_stateful=true)
get a map of MaterialBase pointers for all material objects that this object depends on for each bloc...
unsigned int getMaxQps() const