17 MeshLib::Mesh& mesh, std::vector<int>
const& selected_material_ids)
19 auto const materialIds = materialIDs(mesh);
23 "Mesh contains no int-property vector named 'MaterialIDs' needed "
24 "by the 'zero_mesh_field_data_by_materialIDs'");
27 std::vector<std::size_t> element_ids_for_selected_materials;
28 for (std::size_t i = 0; i < materialIds->size(); ++i)
30 if (std::find(selected_material_ids.begin(),
31 selected_material_ids.end(),
32 (*materialIds)[i]) != selected_material_ids.end())
34 element_ids_for_selected_materials.push_back(i);
40 std::vector<std::size_t> element_ip_data_offsets;
42 for (
auto const& [name, property] : properties)
44 if (
auto const item_type = property->getMeshItemType();
53 if (!property->getPropertyName().ends_with(
"_ip"))
58 if (properties.template hasPropertyVector<double>(
61 auto& pv = *properties.template getPropertyVector<double>(name);
62 const int n_components = pv.getNumberOfGlobalComponents();
64 if (element_ip_data_offsets.empty())
68 element_ip_data_offsets =
73 std::transform(element_ip_data_offsets.begin(),
74 element_ip_data_offsets.end(),
75 element_ip_data_offsets.begin(),
76 [n = n_components](std::size_t
const v)
80 for (
auto const element_id : element_ids_for_selected_materials)
84 n_components * element_ip_data_offsets[element_id],
86 n_components * element_ip_data_offsets[element_id + 1],