diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp index a541166c245ef88dac8b64a8683aab37820fd43e..ee6def405cadd9aab92075516ebc83ae65375dcd 100644 --- a/Applications/ApplicationsLib/ProjectData.cpp +++ b/Applications/ApplicationsLib/ProjectData.cpp @@ -356,6 +356,33 @@ std::vector<GeoLib::NamedRaster> readRasters( // } //} +std::vector<int> parseMaterialIdString( + std::string const& material_id_string, + MeshLib::PropertyVector<int> const* const material_ids) +{ + if (material_id_string == "*") + { + if (material_ids == nullptr) + { + OGS_FATAL( + "MaterialIDs property is not defined in the mesh but it is " + "required to parse '*' definition."); + } + + std::vector<int> material_ids_of_this_medium = + *material_ids | + ranges::views::adjacent_remove_if(std::equal_to<>()) | + ranges::to_vector; + BaseLib::makeVectorUnique(material_ids_of_this_medium); + DBUG("Catch all medium definition for material ids {}.", + fmt::join(material_ids_of_this_medium, ", ")); + return material_ids_of_this_medium; + } + + // Usual case of ids separated by comma. + return BaseLib::splitMaterialIdString(material_id_string); +} + } // namespace ProjectData::ProjectData() = default; @@ -565,26 +592,9 @@ void ProjectData::parseMedia( //! \ogs_file_attr{prj__media__medium__id} medium_config.getConfigAttribute<std::string>("id", "0"); - std::vector<int> material_ids_of_this_medium; - if (material_id_string == "*") - { - auto const* const material_ids = materialIDs(*_mesh_vec[0]); - if (material_ids != nullptr) - { - material_ids_of_this_medium = - *material_ids | - ranges::views::adjacent_remove_if(std::equal_to<>()) | - ranges::to_vector; - BaseLib::makeVectorUnique(material_ids_of_this_medium); - DBUG("Catch all medium definition for material ids {}.", - fmt::join(material_ids_of_this_medium, ", ")); - } - } - else - { - material_ids_of_this_medium = - BaseLib::splitMaterialIdString(material_id_string); - } + std::vector<int> const material_ids_of_this_medium = + parseMaterialIdString(material_id_string, + materialIDs(*_mesh_vec[0])); for (auto const& id : material_ids_of_this_medium) {