From 9aeebe00545f17ccf08c4bd7ecbe41326a3f4c6d Mon Sep 17 00:00:00 2001
From: marenhuxel <maren.huxel@gmx.de>
Date: Wed, 11 Dec 2024 15:10:21 +0100
Subject: [PATCH 1/4] Added engine_efficiency capability

---
 .../src/engine_design/engine_design.cpp       | 20 +++++++++++++++++--
 .../src/engine_design/engine_design.h         | 11 +++++++++-
 .../engine_design/rubber/rubber_design.cpp    | 15 +++++++++-----
 3 files changed, 38 insertions(+), 8 deletions(-)

diff --git a/propulsion_design/src/engine_design/engine_design.cpp b/propulsion_design/src/engine_design/engine_design.cpp
index 669d088b..06cab3c5 100644
--- a/propulsion_design/src/engine_design/engine_design.cpp
+++ b/propulsion_design/src/engine_design/engine_design.cpp
@@ -30,13 +30,13 @@
 
 namespace design
 {
-    void EngineDesigner::write_deck_value(const DeckData &data) const
+    void EngineDesigner::write_deck_value(const DeckData &data, std::string engine_name) const
     {
         /* The deck values assume a ; as separator */
         constexpr char delimiter = ';';
 
         /* Get the file name to export to */
-        const std::filesystem::path file_name = engine_directory_ / (data.name + ".csv");
+        const std::filesystem::path file_name = engine_directory_ / engine_name / (data.name + ".csv");
 
         /* Open the file */
         std::ofstream file(file_name, std::ios::out | std::ios::trunc);
@@ -71,4 +71,20 @@ namespace design
         /* Close the file */
         file.close();
     }
+
+     // Funktion, die die Werte in DeckData skaliert
+    auto EngineDesigner::scale_deck_data_values(DeckData &deck_data, double efficiency_factor) -> DeckData
+    {
+        double technology_factor = 1+(1-efficiency_factor);
+        for (auto i = 0; i < deck_data.values.shape()[0]; ++i) {
+            for (auto j = 0; j < deck_data.values.shape()[1]; ++j) {
+                for (auto k = 0; k < deck_data.values.shape()[2]; ++k) {
+                    if (deck_data.values[i][j][k] != -9999) {
+                        deck_data.values[i][j][k] *= technology_factor;
+                    }
+                }
+            }
+        }
+        return deck_data;
+    }
 }; // namespace design
diff --git a/propulsion_design/src/engine_design/engine_design.h b/propulsion_design/src/engine_design/engine_design.h
index 0dc4ad9c..73ebe444 100644
--- a/propulsion_design/src/engine_design/engine_design.h
+++ b/propulsion_design/src/engine_design/engine_design.h
@@ -147,7 +147,16 @@ namespace design
          *
          * @param data The deck data to write.
          */
-        void write_deck_value(const DeckData &data) const;
+        void write_deck_value(const DeckData &data, std::string engine_name) const;
+
+         /**
+         * @brief Recalculate the engine data deck with the efficiency defined in the engine.xml.
+         *
+         * @param deck_data Engine deck data values.
+         * @param efficiency_factor Value of the efficiency factor defined in the engine.xml.
+         * @return scaled deck data.
+         */
+        auto scale_deck_data_values(DeckData &deck_data, double efficiency_factor) -> DeckData;
 
       private:
         /* === Properties === */
diff --git a/propulsion_design/src/engine_design/rubber/rubber_design.cpp b/propulsion_design/src/engine_design/rubber/rubber_design.cpp
index 53ec3892..ea02215c 100644
--- a/propulsion_design/src/engine_design/rubber/rubber_design.cpp
+++ b/propulsion_design/src/engine_design/rubber/rubber_design.cpp
@@ -37,18 +37,23 @@ namespace design
 {
     void Rubber::initialize()
     {
+        /* Initialize the EngineDesigner */
+        EngineDesigner::initialize();
+
         /* Check whether the engine efficiency technology factor is 1.0 */
         const auto efficiency_factor = static_cast<float>(
             this->configuration()->at(
                 "module_configuration_file/program_settings/technology_factors/engine_efficiency/value"));
         if (std::abs(efficiency_factor - 1.0) > 1e-6)
         {
-            /** @todo Actually implement the change in the engine efficiency factor. */
-            throw std::runtime_error("[design::Rubber::initialize()] The engine efficiency technology factor is not 1.0. Changing this factor is not yet supported!");
-        }
+            std::filesystem::path path_to_csv = EngineDesigner::engine_database(); 
+            std::string engine_name = this->configuration()->at("module_configuration_file/program_settings/propulsion/engine/Rubber/engine_model/value");
+            std::string added_path = (std::filesystem::path(path_to_csv) / engine_name / engine_name).string();
+            DeckData deck_data = DeckData::from_csv(added_path.append("_WF.csv"));
 
-        /* Initialize the EngineDesigner */
-        EngineDesigner::initialize();
+            DeckData deck_data_scaled = EngineDesigner::scale_deck_data_values(deck_data, EngineDesigner::technology_factor("engine_efficiency"));    
+            EngineDesigner::write_deck_value(deck_data_scaled, engine_name);
+        }
 
         /* Loop through all propulsion settings */
         for (const auto &propulsion : this->configuration()->getVector("module_configuration_file/program_settings/propulsion"))
-- 
GitLab


From 297ed5654116ad018d2115a9db2f76f84db3b819 Mon Sep 17 00:00:00 2001
From: marenhuxel <maren.huxel@gmx.de>
Date: Wed, 11 Dec 2024 18:10:31 +0100
Subject: [PATCH 2/4] Fixed comment

---
 propulsion_design/src/engine_design/engine_design.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/propulsion_design/src/engine_design/engine_design.cpp b/propulsion_design/src/engine_design/engine_design.cpp
index 06cab3c5..8fff672f 100644
--- a/propulsion_design/src/engine_design/engine_design.cpp
+++ b/propulsion_design/src/engine_design/engine_design.cpp
@@ -72,7 +72,7 @@ namespace design
         file.close();
     }
 
-     // Funktion, die die Werte in DeckData skaliert
+     // Scale values in DeckData
     auto EngineDesigner::scale_deck_data_values(DeckData &deck_data, double efficiency_factor) -> DeckData
     {
         double technology_factor = 1+(1-efficiency_factor);
-- 
GitLab


From 920e811e14336cf19b7597d79e4bfa0ea8857102 Mon Sep 17 00:00:00 2001
From: Maren Huxel <maren.huxel@tum.de>
Date: Thu, 12 Dec 2024 09:29:25 +0100
Subject: [PATCH 3/4] Added Info Output.

---
 propulsion_design/src/engine_design/rubber/rubber_design.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/propulsion_design/src/engine_design/rubber/rubber_design.cpp b/propulsion_design/src/engine_design/rubber/rubber_design.cpp
index ea02215c..706c3bd1 100644
--- a/propulsion_design/src/engine_design/rubber/rubber_design.cpp
+++ b/propulsion_design/src/engine_design/rubber/rubber_design.cpp
@@ -53,6 +53,8 @@ namespace design
 
             DeckData deck_data_scaled = EngineDesigner::scale_deck_data_values(deck_data, EngineDesigner::technology_factor("engine_efficiency"));    
             EngineDesigner::write_deck_value(deck_data_scaled, engine_name);
+            utility::print(std::format(
+                "Design with engine efficiency factor = {:.2f}", efficiency_factor), Level::Info);
         }
 
         /* Loop through all propulsion settings */
-- 
GitLab


From 066511699f6b91ef417001c2ed92d62011d99d69 Mon Sep 17 00:00:00 2001
From: tobi <tobias.weckenmann@tum.de>
Date: Thu, 12 Dec 2024 09:42:28 +0100
Subject: [PATCH 4/4] Adds desciption in config

---
 propulsion_design/propulsion_design_conf.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/propulsion_design/propulsion_design_conf.xml b/propulsion_design/propulsion_design_conf.xml
index 592f2739..23ff8a6e 100644
--- a/propulsion_design/propulsion_design_conf.xml
+++ b/propulsion_design/propulsion_design_conf.xml
@@ -86,7 +86,7 @@
 				<upper_boundary>+Inf</upper_boundary>
 				<lower_boundary>0.0</lower_boundary>
 			</pylon_mass>
-			<engine_efficiency>
+			<engine_efficiency  description="Increase or decrease the efficiency by manipulating the fuel flow (Efficiency increase (value higher than 1) -> decreased fuelflow).">
 				<value>1.0</value>
 				<unit>1</unit>
 				<upper_boundary>+Inf</upper_boundary>
-- 
GitLab