From db04b9f70c4d7fe076c48bcfeeaac2d02010740c Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <github@naumov.de>
Date: Wed, 10 Nov 2021 12:35:39 +0100
Subject: [PATCH] [MPL] Add material id to medium's description.

---
 Applications/ApplicationsLib/ProjectData.cpp | 3 ++-
 MaterialLib/MPL/CreateMedium.cpp             | 4 +++-
 MaterialLib/MPL/CreateMedium.h               | 1 +
 MaterialLib/MPL/Medium.cpp                   | 9 +++++----
 MaterialLib/MPL/Medium.h                     | 9 +++++++--
 Tests/MaterialLib/TestMPL.cpp                | 4 ++--
 6 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp
index 1d0c60c2240..434869390cd 100644
--- a/Applications/ApplicationsLib/ProjectData.cpp
+++ b/Applications/ApplicationsLib/ProjectData.cpp
@@ -488,7 +488,8 @@ void ProjectData::parseMedia(
             if (id == material_ids_of_this_medium[0])
             {
                 _media[id] = MaterialPropertyLib::createMedium(
-                    _mesh_vec[0]->getDimension(), medium_config, _parameters,
+                    id, _mesh_vec[0]->getDimension(), medium_config,
+                    _parameters,
                     _local_coordinate_system ? &*_local_coordinate_system
                                              : nullptr,
                     _curves);
diff --git a/MaterialLib/MPL/CreateMedium.cpp b/MaterialLib/MPL/CreateMedium.cpp
index 388b910a249..b563262dce3 100644
--- a/MaterialLib/MPL/CreateMedium.cpp
+++ b/MaterialLib/MPL/CreateMedium.cpp
@@ -22,6 +22,7 @@
 namespace MaterialPropertyLib
 {
 std::unique_ptr<Medium> createMedium(
+    int const material_id,
     int const geometry_dimension,
     BaseLib::ConfigTree const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
@@ -49,7 +50,8 @@ std::unique_ptr<Medium> createMedium(
         OGS_FATAL("Neither tag <phases> nor tag <properties> has been found.");
     }
 
-    return std::make_unique<Medium>(std::move(phases), std::move(properties));
+    return std::make_unique<Medium>(material_id, std::move(phases),
+                                    std::move(properties));
 }
 
 }  // namespace MaterialPropertyLib
diff --git a/MaterialLib/MPL/CreateMedium.h b/MaterialLib/MPL/CreateMedium.h
index 8e8587e02c4..bf84ddbb10d 100644
--- a/MaterialLib/MPL/CreateMedium.h
+++ b/MaterialLib/MPL/CreateMedium.h
@@ -42,6 +42,7 @@ namespace MaterialPropertyLib
 /// Medium properties are optional. If not defined, default properties are
 /// assigned.
 std::unique_ptr<Medium> createMedium(
+    int const material_id,
     int const geometry_dimension,
     BaseLib::ConfigTree const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
diff --git a/MaterialLib/MPL/Medium.cpp b/MaterialLib/MPL/Medium.cpp
index f995c260241..aeb3f0c402d 100644
--- a/MaterialLib/MPL/Medium.cpp
+++ b/MaterialLib/MPL/Medium.cpp
@@ -17,9 +17,10 @@
 
 namespace MaterialPropertyLib
 {
-Medium::Medium(std::vector<std::unique_ptr<Phase>>&& phases,
+Medium::Medium(int const material_id,
+               std::vector<std::unique_ptr<Phase>>&& phases,
                std::unique_ptr<PropertyArray>&& properties)
-    : phases_(std::move(phases))
+    : phases_(std::move(phases)), material_id_(material_id)
 {
     if (properties)
     {
@@ -74,9 +75,9 @@ std::size_t Medium::numberOfPhases() const
     return phases_.size();
 }
 
-std::string Medium::description()
+std::string Medium::description() const
 {
-    return "medium";
+    return "medium " + std::to_string(material_id_);
 }
 
 Phase const& fluidPhase(Medium const& medium)
diff --git a/MaterialLib/MPL/Medium.h b/MaterialLib/MPL/Medium.h
index 44636acd048..5c58be939bd 100644
--- a/MaterialLib/MPL/Medium.h
+++ b/MaterialLib/MPL/Medium.h
@@ -31,7 +31,8 @@ namespace MaterialPropertyLib
 class Medium final
 {
 public:
-    Medium(std::vector<std::unique_ptr<Phase>>&& phases,
+    Medium(int const material_id,
+           std::vector<std::unique_ptr<Phase>>&& phases,
            std::unique_ptr<PropertyArray>&& properties);
 
     /// A get-function for a particular phase. The ul argument specifies the
@@ -56,7 +57,7 @@ public:
     std::size_t numberOfPhases() const;
 
     /// Short description of the medium.
-    static std::string description();
+    std::string description() const;
 
     template <typename T>
     T value(PropertyType const p) const
@@ -98,6 +99,10 @@ private:
     /// Most properties are fine with the volume fraction average, but
     /// special-defaults are allowed as well...
     PropertyArray properties_;
+
+    /// The first material id for which the medium was created. Used in the
+    /// description.
+    int const material_id_;
 };
 
 template <typename Container>
diff --git a/Tests/MaterialLib/TestMPL.cpp b/Tests/MaterialLib/TestMPL.cpp
index 8539ae9b448..688ec60e15a 100644
--- a/Tests/MaterialLib/TestMPL.cpp
+++ b/Tests/MaterialLib/TestMPL.cpp
@@ -38,8 +38,8 @@ std::unique_ptr<MPL::Medium> createTestMaterial(
              std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
         curves;
 
-    return MPL::createMedium(geometry_dimension, config, parameters,
-                             local_coordinate_system, curves);
+    return MPL::createMedium(0 /*material id*/, geometry_dimension, config,
+                             parameters, local_coordinate_system, curves);
 }
 
 std::unique_ptr<MaterialPropertyLib::Property> createTestProperty(
-- 
GitLab