41 typedef std::pair<dealii::types::material_id, std::shared_ptr<Material<dim, Number>>> Pair;
42 typedef std::map<dealii::types::material_id, std::shared_ptr<Material<dim, Number>>> Materials;
44 MaterialHandler() : dof_index(0)
49 initialize(dealii::MatrixFree<dim, Number>
const & matrix_free,
50 unsigned int const dof_index,
51 unsigned int const quad_index,
52 std::shared_ptr<MaterialDescriptor const> material_descriptor,
53 bool const large_deformation)
55 this->dof_index = dof_index;
56 this->material_descriptor = material_descriptor;
58 for(
auto iter = material_descriptor->begin(); iter != material_descriptor->end(); ++iter)
60 dealii::types::material_id
id = iter->first;
61 std::shared_ptr<MaterialData> data = iter->second;
62 MaterialType type = data->type;
66 case MaterialType::Undefined:
68 AssertThrow(
false, dealii::ExcMessage(
"Material type is undefined."));
71 case MaterialType::StVenantKirchhoff:
73 std::shared_ptr<StVenantKirchhoffData<dim>> data_svk =
74 std::static_pointer_cast<StVenantKirchhoffData<dim>>(data);
78 matrix_free, dof_index, quad_index, *data_svk, large_deformation)));
83 AssertThrow(
false, dealii::ExcMessage(
"Specified material type is not implemented."));
91 reinit(dealii::MatrixFree<dim, Number>
const & matrix_free,
unsigned int const cell)
93 auto mid = matrix_free.get_cell_iterator(cell, 0, dof_index)->material_id();
96 for(
unsigned int v = 1; v < matrix_free.n_active_entries_per_cell_batch(cell); v++)
97 AssertThrow(mid == matrix_free.get_cell_iterator(cell, v)->material_id(),
98 dealii::ExcMessage(
"You have to categorize cells according to their materials!"));
101 material = material_map[mid];
104 std::shared_ptr<Material<dim, Number>>
111 unsigned int dof_index;
113 std::shared_ptr<MaterialDescriptor const> material_descriptor;
114 Materials material_map;
117 std::shared_ptr<Material<dim, Number>> material;