Skip to content
Snippets Groups Projects
Commit f2d8e51a authored by Dmitri Naumov's avatar Dmitri Naumov
Browse files

[MPL] Report media/material ids mismatch

instead of crash triggered by map::at std::out_of_range exception.
parent ba42ee8f
No related branches found
No related tags found
No related merge requests found
...@@ -11,6 +11,11 @@ ...@@ -11,6 +11,11 @@
*/ */
#include "MaterialSpatialDistributionMap.h" #include "MaterialSpatialDistributionMap.h"
#include <spdlog/fmt/bundled/core.h>
#include <spdlog/fmt/bundled/ranges.h>
#include <range/v3/view/map.hpp>
#include "MeshLib/Mesh.h" #include "MeshLib/Mesh.h"
namespace MaterialPropertyLib namespace MaterialPropertyLib
...@@ -28,7 +33,36 @@ Medium const* MaterialSpatialDistributionMap::getMedium( ...@@ -28,7 +33,36 @@ Medium const* MaterialSpatialDistributionMap::getMedium(
auto const material_id = auto const material_id =
material_ids_ == nullptr ? 0 : (*material_ids_)[element_id]; material_ids_ == nullptr ? 0 : (*material_ids_)[element_id];
return media_.at(material_id).get(); assert(!media_.empty());
if (auto const it = media_.find(material_id); it != media_.end())
{
return it->second.get();
}
//
// Error handling until end of the function.
//
if (material_ids_ == nullptr)
{
assert(material_id == 0);
ERR("No MaterialIDs given in the mesh therefore default material id = "
"0 is used.");
}
auto keys = media_ | ranges::views::keys;
if (media_.size() == 1)
{
ERR("Single medium for material id {} is defined.",
fmt::join(keys, ", "));
}
else
{
ERR("Media for material ids {} are defined.", fmt::join(keys, ", "));
}
OGS_FATAL("No medium for material id {} found for element {}.", material_id,
element_id);
} }
void MaterialSpatialDistributionMap::checkElementHasMedium( void MaterialSpatialDistributionMap::checkElementHasMedium(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment