From a3c34ab6bc0962a03a1a735f240e872569838317 Mon Sep 17 00:00:00 2001 From: StanislausCichocki Date: Mon, 10 Mar 2025 17:22:25 +0100 Subject: [PATCH] Added logic surplus calculation intrabuilding wise --- CMakeLists.txt | 9 +++-- src/main.cpp | 1 - src/model/{building => }/Building.cpp | 9 +++++ src/model/{building => }/Building.h | 4 +++ src/model/Community.cpp | 7 ++++ src/model/Community.h | 5 ++- src/services/Surplus.cpp | 47 +++++++++++++++++++++++++++ src/services/Surplus.h | 28 ++++++++++++++++ tests/services/test_Surplus.cpp | 9 +++++ 9 files changed, 115 insertions(+), 4 deletions(-) rename src/model/{building => }/Building.cpp (94%) rename src/model/{building => }/Building.h (94%) create mode 100644 src/services/Surplus.cpp create mode 100644 src/services/Surplus.h create mode 100644 tests/services/test_Surplus.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 20d7c0c..39ba7ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,8 +7,13 @@ add_executable(Sim_C__ src/main.cpp src/model/Community.cpp src/model/Community.h - src/model/building/Building.cpp - src/model/building/Building.h + src/model/Building.cpp + src/model/Building.h src/model/Energy_Tariff.cpp src/model/Energy_Tariff.h + src/services/Surplus.cpp + src/services/Surplus.h + tests/services/test_Surplus.cpp ) +find_package(doctest CONFIG REQUIRED) +target_link_libraries(Sim_C__ PRIVATE doctest::doctest) \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 5ebc812..f221352 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,4 +2,3 @@ // Created by Stani on 09/03/2025. // -int main(){} diff --git a/src/model/building/Building.cpp b/src/model/Building.cpp similarity index 94% rename from src/model/building/Building.cpp rename to src/model/Building.cpp index 4792c6d..092b19c 100644 --- a/src/model/building/Building.cpp +++ b/src/model/Building.cpp @@ -148,3 +148,12 @@ std::unique_ptr& Building::Base::metadata() { void Building::Base::set_metadata(std::unique_ptr &metadata) { Metadata = std::move(metadata); } + +void Building::Base::iterateBuildings(std::vector> &buildings, +const std::function& function) { + for (auto &building : buildings) { + function(*building); + } +} + + diff --git a/src/model/building/Building.h b/src/model/Building.h similarity index 94% rename from src/model/building/Building.h rename to src/model/Building.h index cb599ab..884642b 100644 --- a/src/model/building/Building.h +++ b/src/model/Building.h @@ -4,6 +4,7 @@ #ifndef BUILDING_H #define BUILDING_H +#include #include #include @@ -79,6 +80,9 @@ void set_values(std::unique_ptr &values); std::unique_ptr & metadata(); void set_metadata(std::unique_ptr &metadata); + + static void iterateBuildings(std::vector > &buildings, + const std::function& function); }; } diff --git a/src/model/Community.cpp b/src/model/Community.cpp index aa89adf..415d4b9 100644 --- a/src/model/Community.cpp +++ b/src/model/Community.cpp @@ -24,3 +24,10 @@ Energy_Tariff Community::energy_tariff() const { void Community::set_energy_tariff(const Energy_Tariff& energy_tariff) { energy_Tariff = energy_tariff; } + +void Community::iterateCommunities(std::vector> &communities, + const std::function&)> &function) { + for (auto &community : communities) { + function(community); + } +} \ No newline at end of file diff --git a/src/model/Community.h b/src/model/Community.h index 2861d94..73a5452 100644 --- a/src/model/Community.h +++ b/src/model/Community.h @@ -7,7 +7,7 @@ #include #include -#include "building/Building.h" +#include "Building.h" #include "Energy_Tariff.h" @@ -25,6 +25,9 @@ public: void set_energy_tariff(const Energy_Tariff &energy_tariff); + static void iterateCommunities(std::vector> &communities, + const std::function &)> &function); + private: std::string Name; std::vector> Buildings; diff --git a/src/services/Surplus.cpp b/src/services/Surplus.cpp new file mode 100644 index 0000000..5e43970 --- /dev/null +++ b/src/services/Surplus.cpp @@ -0,0 +1,47 @@ +// +// Created by StanislausCichocki on 10.03.2025. +// + +#define VALUE_COUNT (4*24*365) +#include "Surplus.h" +#include "../model/Building.h" +#include +#include +#include + + +void Surplus::CalculateSurplus(std::vector> &communities) { + std::vector consumptionAvailable(VALUE_COUNT, 0.0); + std::vector generationAvailable(VALUE_COUNT, 0.0); + + Community::iterateCommunities(communities, [&](const std::shared_ptr& community) { + auto &buildings = community->buildings(); + + Building::Base::iterateBuildings(buildings, [&](Building::Base &building) { + CalculateBuildingSurplus(building); + }); + }); +} + +void Surplus::CalculateBuildingSurplus(Building::Base& building) { + std::vector ownCoverage(VALUE_COUNT, 0.0f); + std::vector neededConsumption(VALUE_COUNT, 0.0f); + std::vector neededGeneration(VALUE_COUNT, 0.0f); + std::vector ownUsage(VALUE_COUNT, 0.0f); + + const auto& consumption = building.metadata()->consumption_profile(); + const auto& generation = building.metadata()->generation_profile(); + + std::transform(consumption.begin(), consumption.end(), + generation.begin(), ownCoverage.begin(), + [&](const std::unique_ptr& c, const std::unique_ptr& g) { + ownCoverage.push_back((c ? *c : 0.0f) - (g ? *g : 0.0f)); + neededConsumption.push_back((c && *c> 0.0f?*c:0.0f)); + neededGeneration.push_back((g && *g<0.0f?-*g:0.0f)); + ownUsage.push_back((c ? *c : 0.0f) - (neededConsumption.back())); + return 0.0f; + }); +} + + + diff --git a/src/services/Surplus.h b/src/services/Surplus.h new file mode 100644 index 0000000..560f287 --- /dev/null +++ b/src/services/Surplus.h @@ -0,0 +1,28 @@ +// +// Created by StanislausCichocki on 10.03.2025. +// + +#ifndef SURPLUS_H +#define SURPLUS_H +#include +#include +#include "../model/Community.h" +#include + + +class Community; + +class Surplus { +private: + std::vector> &communities; + public: + Surplus(std::vector> &communities):communities(communities){}; + + void CalculateSurplus(std::vector> &communities); + + void CalculateBuildingSurplus(Building::Base&); +}; + + + +#endif //SURPLUS_H diff --git a/tests/services/test_Surplus.cpp b/tests/services/test_Surplus.cpp new file mode 100644 index 0000000..76b0dd9 --- /dev/null +++ b/tests/services/test_Surplus.cpp @@ -0,0 +1,9 @@ +// +// Created by StanislausCichocki on 10.03.2025. +// +#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN +#include "doctest/doctest.h" + +TEST_CASE("Testing add function") { + CHECK(true); +} \ No newline at end of file