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)
void dataLoad(std::istream &stream, MaterialPropertyStorage &storage, void *context)
void dataStore(std::ostream &stream, MaterialPropertyStorage &storage, void *context)
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
HashMap is an abstraction for dictionary data type, we make it thread-safe by locking inserts.
iterator find(const Key &k)
MaterialBases compute MaterialProperties.
Proxy for accessing MaterialPropertyStorage.
Registry class for material property IDs and names.
bool hasProperty(const std::string &name) const
Stores the stateful material properties computed by materials.
void setRestartInPlace()
Sets the loading of stateful material properties in place.
friend void dataLoad(std::istream &, MaterialPropertyStorage &, void *)
bool hasStatefulProperties() const
bool _recovering
Whether or not we're recovering; enforces a one-to-one mapping of stateful properties.
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.
friend void dataStore(std::ostream &, MaterialPropertyStorage &, void *)
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.
bool _restart_in_place
Whether or not we want to restart stateful properties in place.
MaterialPropertyRegistry & _registry
Shared registry (across storage objects) for property names and IDs.
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) ...
unsigned int maxState() const
const std::set< const MooseObject * > & getConsumers(Moose::MaterialDataType type) const
void swapBack(const THREAD_ID tid, const Elem &elem, unsigned int side)
Swap (shallow copy) material properties in MaterialPropertyStorage and MaterialDat Thread safe.
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)
void swap(const THREAD_ID tid, const Elem &elem, unsigned int side)
Swap (shallow copy) material properties in MaterialData and MaterialPropertyStorage Thread safe.
std::map< Moose::MaterialDataType, std::set< const MooseObject * > > _consumers
The consumers of this storage.
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 sizeProps(MaterialProperties &mp, unsigned int size)
const PropsType & props(const unsigned int state=0) const
Access methods to the stored material property data with the given state state.
bool hasProperty(const std::string &prop_name) const
std::array< PropsType, MaterialData::max_state+1 > _storage
The actual storage.
std::vector< std::optional< PropRecord > > _prop_records
Property records indexed by property id (may be null)
libMesh::Threads::spin_mutex & _spin_mtx
std::vector< MaterialData > _material_data
The threaded material data.
unsigned int numStates() const
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.
void eraseProperty(const Elem *elem)
Remove the property storage and element pointer from internal data structures Use this when elements ...
static void shallowSwapDataBack(const std::vector< unsigned int > &stateful_prop_ids, MaterialProperties &data, MaterialProperties &data_from)
void shift()
Shift the material properties in time.
MaterialData & getMaterialData(const THREAD_ID tid)
libMesh::IntRange< unsigned int > statefulIndexRange() const
unsigned int _max_state
The maximum state (0 = current, 1 = old, 2 = older)
const std::vector< unsigned int > & statefulProps() const
bool isRestoredProperty(const std::string &name) const
HashMap< const Elem *, HashMap< unsigned int, MaterialProperties > > PropsType
Accessible type of the stored material property data.
FEProblemBase & _problem
Reference to the problem.
bool hasOlderProperties() const
std::unordered_map< std::pair< const Elem *, unsigned int >, std::map< unsigned int, std::vector< std::stringstream > > > RestartableMapType
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,...
MaterialProperties & setProps(const Elem *elem, unsigned int side, const unsigned int state=0)
const MaterialPropertyRegistry & getMaterialPropertyRegistry() const
const PropRecord & getPropRecord(const unsigned int id) const
Get the property record associated with the material with id id.
RestartableMapType _restartable_map
The restartable data to be loaded in initStatefulProps() later.
void addConsumer(Moose::MaterialDataType type, const MooseObject *object)
Add object as the consumer of storage of type type.
std::optional< std::string > queryStatefulPropName(const unsigned int id) const
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
static void shallowSwapData(const std::vector< unsigned int > &stateful_prop_ids, MaterialProperties &data, MaterialProperties &data_from)
Shallow copies of material properties.
const MaterialData & getMaterialData(const THREAD_ID tid) const
void setRecovering()
Sets the loading of stateful material properties to recover.
MaterialProperties & initAndSetProps(const Elem *elem, const unsigned int side, const unsigned int state)
Every object that can be built by the factory should be derived from this class.
Helper object for holding qp mapping info.
RedistributeProperties is used for its redistribute() callback, which ensures that any stateful prope...
MaterialDataType
MaterialData types.
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
Basic structure for storing information about a property.
std::string type
The type of this property.
unsigned int stateful_id
The stateful id in _storage used for this property, if any.
std::set< std::string > declarers
The material (type,name) that have declared this property.
bool restored
Whether or not this property was restored (stateful only)
unsigned int state
The max state requrested for this property (0 = current, 1 = old, ...)
bool stateful() const
Whether or not this property is stateful.