diff --git a/MaterialLib/MPL/MaterialSpatialDistributionMap.cpp b/MaterialLib/MPL/MaterialSpatialDistributionMap.cpp index 3709e1ad453e2d677778d9716fa843574770ce0a..dcde7ccfa7d5254a4de478ecf0fb6549fc05bf54 100644 --- a/MaterialLib/MPL/MaterialSpatialDistributionMap.cpp +++ b/MaterialLib/MPL/MaterialSpatialDistributionMap.cpp @@ -11,6 +11,11 @@ */ #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" namespace MaterialPropertyLib @@ -28,7 +33,36 @@ Medium const* MaterialSpatialDistributionMap::getMedium( auto const material_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(