105 const std::vector<std::vector<QpMap>> & refinement_map,
111 const int input_parent_side,
112 const int input_child,
113 const int input_child_side);
131 const std::vector<QpMap> & p_refinement_map,
136 const int input_side);
151 const std::vector<const Elem *> & coarsened_element_children,
156 int input_side = -1);
170 const std::vector<std::shared_ptr<MaterialBase>> & mats,
171 const unsigned int n_qpoints,
173 const unsigned int side = 0);
199 const Elem & elem_to,
200 const Elem & elem_from,
202 unsigned int n_qpoints);
215 const Elem * elem_to,
216 const Elem * elem_from,
218 unsigned int n_qpoints);
227 void swap(
const THREAD_ID tid,
const Elem & elem,
unsigned int side);
263 props(
const Elem * elem,
unsigned int side,
const unsigned int state = 0)
const;
278 unsigned int addProperty(
const std::string & prop_name,
279 const std::type_info & type,
280 const unsigned int state,
370 const PropRecord &
getPropRecord(
const unsigned int id)
const;
382 std::array<PropsType, MaterialData::max_state + 1>
_storage;
391 std::map<Moose::MaterialDataType, std::set<const MooseObject *>>
_consumers;
398 std::vector<MaterialProperties *>
399 initProps(
const THREAD_ID tid,
const Elem * elem,
unsigned int side,
unsigned int n_qpoints);
403 const unsigned int state,
406 unsigned int n_qpoints);
413 static void shallowSwapData(
const std::vector<unsigned int> & stateful_prop_ids,
434 initAndSetProps(
const Elem * elem,
const unsigned int side,
const unsigned int state);
450 typedef std::unordered_map<std::pair<const Elem *, unsigned int>,
451 std::map<unsigned int, std::vector<std::stringstream>>>
476 mooseAssert(state <
_storage.size(),
"Invalid material property state " + std::to_string(state));
483 const auto find_elem =
props(state).
find(elem);
484 mooseAssert(find_elem !=
props(state).end(),
"Material property does not have elem entry");
485 const auto find_side = find_elem->second.find(side);
486 mooseAssert(find_side != find_elem->second.end(),
"Material property does not have side entry");
487 return find_side->second;
493 return const_cast<MaterialProperties &
>(std::as_const(*this).props(elem, side, state));
499 const unsigned int state)
MaterialProperties & setProps(const Elem *elem, unsigned int side, const unsigned int state=0)
void shift()
Shift the material properties in time.
friend void dataStore(std::ostream &, MaterialPropertyStorage &, void *)
HashMap< const Elem *, HashMap< unsigned int, MaterialProperties > > PropsType
Accessible type of the stored material property data.
std::vector< MaterialData > _material_data
The threaded material data.
const unsigned int invalid_uint
HashMap is an abstraction for dictionary data type, we make it thread-safe by locking inserts...
MaterialPropertyStorage(MaterialPropertyRegistry ®istry, FEProblemBase &problem)
Registry class for material property IDs and names.
void eraseProperty(const Elem *elem)
Remove the property storage and element pointer from internal data structures Use this when elements ...
static Moose::ParameterRegistry & registry
MaterialDataType
MaterialData types.
Stores the stateful material properties computed by materials.
std::vector< unsigned int > _stateful_prop_id_to_prop_id
the vector of stateful property ids (the vector index is the map to stateful prop_id) ...
const MaterialPropertyRegistry & getMaterialPropertyRegistry() const
Helper object for holding qp mapping info.
void sizeProps(MaterialProperties &mp, unsigned int size)
bool hasProperty(const std::string &name) const
libMesh::Threads::spin_mutex & _spin_mtx
std::vector< std::optional< PropRecord > > _prop_records
Property records indexed by property id (may be null)
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
iterator find(const Key &k)
unsigned int maxState() const
bool restored
Whether or not this property was restored (stateful only)
static void shallowSwapData(const std::vector< unsigned int > &stateful_prop_ids, MaterialProperties &data, MaterialProperties &data_from)
Shallow copies of material properties.
static void shallowSwapDataBack(const std::vector< unsigned int > &stateful_prop_ids, MaterialProperties &data, MaterialProperties &data_from)
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
const std::vector< unsigned int > & statefulProps() const
void dataLoad(std::istream &stream, MaterialPropertyStorage &storage, void *context)
uint8_t processor_id_type
FEProblemBase & _problem
Reference to the problem.
void setRestartInPlace()
Sets the loading of stateful material properties in place.
void prolongStatefulProps(processor_id_type pid, const std::vector< std::vector< QpMap >> &refinement_map, const libMesh::QBase &qrule, const libMesh::QBase &qrule_face, MaterialPropertyStorage &parent_material_props, const THREAD_ID tid, const Elem &elem, const int input_parent_side, const int input_child, const int input_child_side)
Creates storage for newly created elements from mesh Adaptivity.
libMesh::IntRange< unsigned int > stateIndexRange() const
Every object that can be built by the factory should be derived from this class.
void swapBack(const THREAD_ID tid, const Elem &elem, unsigned int side)
Swap (shallow copy) material properties in MaterialPropertyStorage and MaterialDat Thread safe...
std::optional< std::string > queryStatefulPropName(const unsigned int id) const
bool isRestoredProperty(const std::string &name) const
bool _recovering
Whether or not we're recovering; enforces a one-to-one mapping of stateful properties.
unsigned int numStates() const
unsigned int addProperty(const std::string &prop_name, const std::type_info &type, const unsigned int state, const MaterialBase *const declarer)
Adds a property with the name prop_name, type type, and state state (0 = current, 1 = old...
unsigned int state
The max state requrested for this property (0 = current, 1 = old, ...)
std::vector< MaterialProperties * > initProps(const THREAD_ID tid, const Elem *elem, unsigned int side, unsigned int n_qpoints)
Initializes hashmap entries for element and side to proper qpoint and property count sizes...
bool hasStatefulProperties() const
RestartableMapType _restartable_map
The restartable data to be loaded in initStatefulProps() later.
void updateStatefulPropsForPRefinement(const processor_id_type pid, const std::vector< QpMap > &p_refinement_map, const libMesh::QBase &qrule, const libMesh::QBase &qrule_face, const THREAD_ID tid, const Elem &elem, const int input_side)
Based on the p-refinement flag of elem, either prolong (for refinement) or restrict (for coarsening) ...
Basic structure for storing information about a property.
const PropsType & props(const unsigned int state=0) const
Access methods to the stored material property data with the given state state.
std::unordered_map< std::pair< const Elem *, unsigned int >, std::map< unsigned int, std::vector< std::stringstream > > > RestartableMapType
bool hasOlderProperties() const
bool hasProperty(const std::string &prop_name) const
void addConsumer(Moose::MaterialDataType type, const MooseObject *object)
Add object as the consumer of storage of type type.
const std::set< const MooseObject * > & getConsumers(Moose::MaterialDataType type) const
MaterialData & getMaterialData(const THREAD_ID tid)
Proxy for accessing MaterialPropertyStorage.
std::array< PropsType, MaterialData::max_state+1 > _storage
The actual storage.
MaterialPropertyRegistry & _registry
Shared registry (across storage objects) for property names and IDs.
friend void dataLoad(std::istream &, MaterialPropertyStorage &, void *)
void restrictStatefulProps(const std::vector< std::pair< unsigned int, QpMap >> &coarsening_map, const std::vector< const Elem *> &coarsened_element_children, const libMesh::QBase &qrule, const libMesh::QBase &qrule_face, const THREAD_ID tid, const Elem &elem, int input_side=-1)
Creates storage for newly created elements from mesh Adaptivity.
void swap(const THREAD_ID tid, const Elem &elem, unsigned int side)
Swap (shallow copy) material properties in MaterialData and MaterialPropertyStorage Thread safe...
const MaterialData & getMaterialData(const THREAD_ID tid) const
std::map< Moose::MaterialDataType, std::set< const MooseObject * > > _consumers
The consumers of this storage.
void initStatefulProps(const THREAD_ID tid, const std::vector< std::shared_ptr< MaterialBase >> &mats, const unsigned int n_qpoints, const Elem &elem, const unsigned int side=0)
Initialize stateful material properties.
bool stateful() const
Whether or not this property is stateful.
bool _restart_in_place
Whether or not we want to restart stateful properties in place.
void copy(const THREAD_ID tid, const Elem &elem_to, const Elem &elem_from, unsigned int side, unsigned int n_qpoints)
Copy material properties from elem_from to elem_to.
const PropRecord & getPropRecord(const unsigned int id) const
Get the property record associated with the material with id id.
void setRecovering()
Sets the loading of stateful material properties to recover.
MaterialBases compute MaterialProperties.
unsigned int _max_state
The maximum state (0 = current, 1 = old, 2 = older)
void dataStore(std::ostream &stream, MaterialPropertyStorage &storage, void *context)
unsigned int stateful_id
The stateful id in _storage used for this property, if any.
RedistributeProperties is used for its redistribute() callback, which ensures that any stateful prope...
std::set< std::string > declarers
The material (type,name) that have declared this property.
MaterialProperties & initAndSetProps(const Elem *elem, const unsigned int side, const unsigned int state)
libMesh::IntRange< unsigned int > statefulIndexRange() const
std::string type
The type of this property.