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