From bf17e8bc3c6b912a38f5918b3f97b7180951714f Mon Sep 17 00:00:00 2001 From: Simon Malacek <164174122+malacek@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:38:00 +0100 Subject: [PATCH 1/4] Add Excel files for Lego-Heat --- CaseStudy.py | 17 ++- ExcelReader.py | 55 +++++++++ ExcelWriter.py | 82 ++++++++++--- TableDefinitions.xml | 112 ++++++++++++++++++ data/example/Global_Parameters.xlsx | Bin 0 -> 21481 bytes data/example/Heat_Demand.xlsx | Bin 0 -> 20975 bytes data/example/Heat_Nodes.xlsx | Bin 0 -> 11999 bytes data/example/Heat_P2H_Conversion_Factors.xlsx | Bin 0 -> 18247 bytes data/example/Heat_P2H_Technologies.xlsx | Bin 0 -> 14179 bytes 9 files changed, 246 insertions(+), 20 deletions(-) create mode 100644 data/example/Global_Parameters.xlsx create mode 100644 data/example/Heat_Demand.xlsx create mode 100644 data/example/Heat_Nodes.xlsx create mode 100644 data/example/Heat_P2H_Conversion_Factors.xlsx create mode 100644 data/example/Heat_P2H_Technologies.xlsx diff --git a/CaseStudy.py b/CaseStudy.py index 87dac63..aaa676e 100644 --- a/CaseStudy.py +++ b/CaseStudy.py @@ -16,7 +16,8 @@ class CaseStudy: # Lists of dataframes based on their dependencies - every table should only be present in one of these lists - rpk_dependent_dataframes: list[str] = ["dPower_Demand", + rpk_dependent_dataframes: list[str] = ["dHeat_Demand", + "dPower_Demand", "dPower_Hindex", "dPower_ImportExport", "dPower_Inflows", @@ -45,6 +46,7 @@ def __init__(self, n_jobs: int = 4, global_parameters_file: str = "Global_Parameters.xlsx", dGlobal_Parameters: pd.DataFrame = None, global_scenarios_file: str = "Global_Scenarios.xlsx", dGlobal_Scenarios: pd.DataFrame = None, + heat_demand_file: str = "Heat_Demand.xlsx", dHeat_Demand: pd.DataFrame = None, power_parameters_file: str = "Power_Parameters.xlsx", dPower_Parameters: pd.DataFrame = None, power_businfo_file: str = "Power_BusInfo.xlsx", dPower_BusInfo: pd.DataFrame = None, power_network_file: str = "Power_Network.xlsx", dPower_Network: pd.DataFrame = None, @@ -128,6 +130,13 @@ def __init__(self, self.dPower_WeightsK = dPower_WeightsK # Add conditional tasks (dependent on dPower_Parameters) + if self.dGlobal_Parameters["pEnableHeat"]: + self.heat_demand_file = heat_demand_file + if dHeat_Demand is None: + tasks.append(("dHeat_Demand", ExcelReader.get_Heat_Demand, (self.data_folder + self.heat_demand_file,))) + else: + self.dHeat_Demand = dHeat_Demand + if self.dPower_Parameters["pEnableThermalGen"]: self.power_thermalgen_file = power_thermalgen_file if dPower_ThermalGen is None: @@ -275,6 +284,9 @@ def scale_CaseStudy(self): if self.dPower_Parameters["pEnablePowerImportExport"]: self.scale_dPower_ImportExport() + if self.dGlobal_Parameters["pEnableHeat"]: + self.scale_dHeat_Demand() + def remove_scaling(self): self.power_scaling_factor = 1 / self.power_scaling_factor self.cost_scaling_factor = 1 / self.cost_scaling_factor @@ -286,6 +298,9 @@ def remove_scaling(self): self.cost_scaling_factor = 1 / self.cost_scaling_factor self.angle_to_rad_scaling_factor = 1 / self.angle_to_rad_scaling_factor + def scale_dHeat_Demand(self): + self.dHeat_Demand["value"] *= self.power_scaling_factor + def scale_dPower_Parameters(self): self.dPower_Parameters["pSBase"] *= self.power_scaling_factor self.dPower_Parameters["pENSCost"] *= self.cost_scaling_factor / self.power_scaling_factor diff --git a/ExcelReader.py b/ExcelReader.py index 374614f..481ed9b 100644 --- a/ExcelReader.py +++ b/ExcelReader.py @@ -144,6 +144,61 @@ def get_Global_Scenarios(excel_file_path: str, keep_excluded_entries: bool = Fal return dGlobal_Scenarios +def get_Heat_P2H_Conversion_Factors(excel_file_path: str, keep_excluded_entries: bool = False, fail_on_wrong_version: bool = False) -> pd.DataFrame: + """ + Read the dHeat_P2H_Conversion_Factors data from the Excel file. + :param excel_file_path: Path to the Excel file + :param keep_excluded_entries: Unused but kept for compatibility with other functions + :param fail_on_wrong_version: If True, raise an error if the version of the Excel file does not match the expected version + :return: dHeat_P2H_Conversion_Factors + """ + dHeat_P2H_Conversion_Factors = __read_pivoted_file(excel_file_path, "v0.0.1", ['rp', 'k', 'hn', 'dt', 'htec'], 'k', ['rp', 'hn', 'dt', 'htec', 'dataPackage', 'dataSource', 'id'], False, False, fail_on_wrong_version) + + if keep_excluded_entries: + printer.warning("'keep_excluded_entries' is set for 'dHeat_P2H_Conversion_Factors', although nothing is excluded anyway - please check if this is intended.") + + return dHeat_P2H_Conversion_Factors + + +def get_Heat_Demand(excel_file_path: str, keep_excluded_entries: bool = False, fail_on_wrong_version: bool = False) -> pd.DataFrame: + """ + Read the dHeat_Demand data from the Excel file. + :param excel_file_path: Path to the Excel file + :param keep_excluded_entries: Unused but kept for compatibility with other functions + :param fail_on_wrong_version: If True, raise an error if the version of the Excel file does not match the expected version + :return: dHeat_Demand + """ + dHeat_Demand = __read_pivoted_file(excel_file_path, "v0.0.1", ['rp', 'k', 'hn', 'dt'], 'k', ['rp', 'hn', 'dt', 'dataPackage', 'dataSource', 'id'], False, False, fail_on_wrong_version) + + if keep_excluded_entries: + printer.warning("'keep_excluded_entries' is set for 'get_Heat_Demand', although nothing is excluded anyway - please check if this is intended.") + + return dHeat_Demand + +def get_Heat_Nodes(excel_file_path: str, keep_excluded_entries: bool = False, fail_on_wrong_version: bool = False) -> pd.DataFrame: + """ + Read the dHeat_Node_Links data from the Excel file. + :param excel_file_path: Path to the Excel file + :param keep_excluded_entries: Do not exclude any entries which are marked to be excluded in the Excel file + :param fail_on_wrong_version: If True, raise an error if the version of the Excel file does not match the expected version + :return: dHeat_Node_Links + """ + dHeat_Node_Links = __read_non_pivoted_file(excel_file_path, "v0.0.1", ["i","hn"], True, keep_excluded_entries, fail_on_wrong_version) + + return dHeat_Node_Links + + +def get_Heat_P2H_Technologies(excel_file_path: str, keep_excluded_entries: bool = False, fail_on_wrong_version: bool = False) -> pd.DataFrame: + """ + Read the dHeat_P2H_Technologies data from the Excel file. + :param excel_file_path: Path to the Excel file + :param keep_excluded_entries: Do not exclude any entries which are marked to be excluded in the Excel file + :param fail_on_wrong_version: If True, raise an error if the version of the Excel file does not match the expected version + :return: dHeat_P2H_Technologies + """ + dHeat_P2H_Technologies = __read_non_pivoted_file(excel_file_path, "v0.0.1", ["hn","dt","htec"], True, keep_excluded_entries, fail_on_wrong_version) + + return dHeat_P2H_Technologies def get_Power_BusInfo(excel_file_path: str, keep_excluded_entries: bool = False, fail_on_wrong_version: bool = False) -> pd.DataFrame: """ diff --git a/ExcelWriter.py b/ExcelWriter.py index 940d0cd..f0aa25d 100644 --- a/ExcelWriter.py +++ b/ExcelWriter.py @@ -291,6 +291,46 @@ def write_Global_Scenarios(self, dGlobal_Scenarios: pd.DataFrame, folder_path: s """ self._write_Excel_from_definition(dGlobal_Scenarios, folder_path, "Global_Scenarios") + def write_Heat_Demand(self, dHeat_Demand: pd.DataFrame, folder_path: str) -> None: + """ + Write the dHeat_Demand DataFrame to an Excel file in LEGO format. + :param dHeat_Demand: DataFrame containing the dHeat_Demand data. + :param folder_path: Path to the folder where the Excel file will be saved. + :return: None + """ + + self._write_Excel_from_definition(dHeat_Demand, folder_path, "Heat_Demand") + + def write_Heat_Nodes(self, dHeat_Nodes: pd.DataFrame, folder_path: str) -> None: + """ + Write the dHeat_Nodes DataFrame to an Excel file in LEGO format. + :param dHeat_Nodes: DataFrame containing the dHeat_Demand data. + :param folder_path: Path to the folder where the Excel file will be saved. + :return: None + """ + + self._write_Excel_from_definition(dHeat_Nodes, folder_path, "Heat_Nodes") + + def write_Heat_P2H_Technologies(self, dHeat_P2H_Technologies: pd.DataFrame, folder_path: str) -> None: + """ + Write the dHeat_P2H_Technologies DataFrame to an Excel file in LEGO format. + :param dHeat_P2H_Technologies: DataFrame containing the dHeat_Demand data. + :param folder_path: Path to the folder where the Excel file will be saved. + :return: None + """ + + self._write_Excel_from_definition(dHeat_P2H_Technologies, folder_path, "P2H_Technologies") + + def write_Heat_P2H_Conversion_Factors(self, dHeat_P2H_Conversion_Factors: pd.DataFrame, folder_path: str) -> None: + """ + Write the dHeat_P2H_Conversion_Factors DataFrame to an Excel file in LEGO format. + :param dHeat_P2H_Conversion_Factors: DataFrame containing the dHeat_Demand data. + :param folder_path: Path to the folder where the Excel file will be saved. + :return: None + """ + + self._write_Excel_from_definition(dHeat_P2H_Conversion_Factors, folder_path, "P2H_Conversion_Factors") + def write_Power_BusInfo(self, dPower_BusInfo: pd.DataFrame, folder_path: str) -> None: """ Write the dPower_BusInfo DataFrame to an Excel file in LEGO format. @@ -524,25 +564,29 @@ def model_to_excel(model: pyomo.core.Model, target_path: str) -> None: printer.separator() combinations = [ - ("Data_Packages", f"{args.caseStudyFolder}Data_Packages.xlsx", ExcelReader.get_Data_Packages, ew.write_Data_Packages), - ("Data_Sources", f"{args.caseStudyFolder}Data_Sources.xlsx", ExcelReader.get_Data_Sources, ew.write_Data_Sources), - ("Global_Scenarios", f"{args.caseStudyFolder}Global_Scenarios.xlsx", ExcelReader.get_Global_Scenarios, ew.write_Global_Scenarios), - ("Power_BusInfo", f"{args.caseStudyFolder}Power_BusInfo.xlsx", ExcelReader.get_Power_BusInfo, ew.write_Power_BusInfo), - ("Power_Demand", f"{args.caseStudyFolder}Power_Demand.xlsx", ExcelReader.get_Power_Demand, ew.write_Power_Demand), - ("Power_Demand_KInRows", f"{args.caseStudyFolder}Power_Demand_KInRows.xlsx", ExcelReader.get_Power_Demand_KInRows, ew.write_Power_Demand_KInRows), - ("Power_Hindex", f"{args.caseStudyFolder}Power_Hindex.xlsx", ExcelReader.get_Power_Hindex, ew.write_Power_Hindex), - ("Power_ImportExport", f"{args.caseStudyFolder}Power_ImportExport.xlsx", ExcelReader.get_Power_ImportExport, ew.write_Power_ImportExport), - ("Power_Inflows", f"{args.caseStudyFolder}Power_Inflows.xlsx", ExcelReader.get_Power_Inflows, ew.write_Power_Inflows), - ("Power_Inflows_KInRows", f"{args.caseStudyFolder}Power_Inflows_KInRows.xlsx", ExcelReader.get_Power_Inflows_KInRows, ew.write_Power_Inflows_KInRows), - ("Power_Network", f"{args.caseStudyFolder}Power_Network.xlsx", ExcelReader.get_Power_Network, ew.write_Power_Network), - ("Power_Storage", f"{args.caseStudyFolder}Power_Storage.xlsx", ExcelReader.get_Power_Storage, ew.write_Power_Storage), - ("Power_ThermalGen", f"{args.caseStudyFolder}Power_ThermalGen.xlsx", ExcelReader.get_Power_ThermalGen, ew.write_Power_ThermalGen), - ("Power_VRES", f"{args.caseStudyFolder}Power_VRES.xlsx", ExcelReader.get_Power_VRES, ew.write_Power_VRES), - ("Power_VRESProfiles", f"{args.caseStudyFolder}Power_VRESProfiles.xlsx", ExcelReader.get_Power_VRESProfiles, ew.write_Power_VRESProfiles), - ("Power_VRESProfiles_KInRows", f"{args.caseStudyFolder}Power_VRESProfiles_KInRows.xlsx", ExcelReader.get_Power_VRESProfiles_KInRows, ew.write_Power_VRESProfiles_KInRows), - ("Power_WeightsK", f"{args.caseStudyFolder}Power_WeightsK.xlsx", ExcelReader.get_Power_WeightsK, ew.write_Power_WeightsK), - ("Power_WeightsRP", f"{args.caseStudyFolder}Power_WeightsRP.xlsx", ExcelReader.get_Power_WeightsRP, ew.write_Power_WeightsRP), - ("Power_Wind_TechnicalDetails", f"{args.caseStudyFolder}Power_Wind_TechnicalDetails.xlsx", ExcelReader.get_Power_Wind_TechnicalDetails, ew.write_Power_Wind_TechnicalDetails) + #conda env("Data_Packages", f"{args.caseStudyFolder}Data_Packages.xlsx", ExcelReader.get_Data_Packages, ew.write_Data_Packages), + #("Data_Sources", f"{args.caseStudyFolder}Data_Sources.xlsx", ExcelReader.get_Data_Sources, ew.write_Data_Sources), + #("Global_Scenarios", f"{args.caseStudyFolder}Global_Scenarios.xlsx", ExcelReader.get_Global_Scenarios, ew.write_Global_Scenarios), + ("Heat_Demand", f"{args.caseStudyFolder}Heat_Demand.xlsx", ExcelReader.get_Heat_Demand, ew.write_Heat_Demand), + ("Heat_Nodes", f"{args.caseStudyFolder}Heat_Nodes.xlsx", ExcelReader.get_Heat_Nodes, ew.write_Heat_Nodes), + ("Heat_P2H_Technologies", f"{args.caseStudyFolder}Heat_P2H_Technologies.xlsx", ExcelReader.get_Heat_P2H_Technologies, ew.write_Heat_P2H_Technologies), + ("Heat_P2H_Conversion_Factors", f"{args.caseStudyFolder}Heat_P2H_Conversion_Factors.xlsx", ExcelReader.get_Heat_P2H_Conversion_Factors, ew.write_Heat_P2H_Conversion_Factors), + # ("Power_BusInfo", f"{args.caseStudyFolder}Power_BusInfo.xlsx", ExcelReader.get_Power_BusInfo, ew.write_Power_BusInfo), + # ("Power_Demand", f"{args.caseStudyFolder}Power_Demand.xlsx", ExcelReader.get_Power_Demand, ew.write_Power_Demand), + # ("Power_Demand_KInRows", f"{args.caseStudyFolder}Power_Demand_KInRows.xlsx", ExcelReader.get_Power_Demand_KInRows, ew.write_Power_Demand_KInRows), + # ("Power_Hindex", f"{args.caseStudyFolder}Power_Hindex.xlsx", ExcelReader.get_Power_Hindex, ew.write_Power_Hindex), + # ("Power_ImportExport", f"{args.caseStudyFolder}Power_ImportExport.xlsx", ExcelReader.get_Power_ImportExport, ew.write_Power_ImportExport), + # ("Power_Inflows", f"{args.caseStudyFolder}Power_Inflows.xlsx", ExcelReader.get_Power_Inflows, ew.write_Power_Inflows), + # ("Power_Inflows_KInRows", f"{args.caseStudyFolder}Power_Inflows_KInRows.xlsx", ExcelReader.get_Power_Inflows_KInRows, ew.write_Power_Inflows_KInRows), + # ("Power_Network", f"{args.caseStudyFolder}Power_Network.xlsx", ExcelReader.get_Power_Network, ew.write_Power_Network), + # ("Power_Storage", f"{args.caseStudyFolder}Power_Storage.xlsx", ExcelReader.get_Power_Storage, ew.write_Power_Storage), + # ("Power_ThermalGen", f"{args.caseStudyFolder}Power_ThermalGen.xlsx", ExcelReader.get_Power_ThermalGen, ew.write_Power_ThermalGen), + # ("Power_VRES", f"{args.caseStudyFolder}Power_VRES.xlsx", ExcelReader.get_Power_VRES, ew.write_Power_VRES), + # ("Power_VRESProfiles", f"{args.caseStudyFolder}Power_VRESProfiles.xlsx", ExcelReader.get_Power_VRESProfiles, ew.write_Power_VRESProfiles), + # ("Power_VRESProfiles_KInRows", f"{args.caseStudyFolder}Power_VRESProfiles_KInRows.xlsx", ExcelReader.get_Power_VRESProfiles_KInRows, ew.write_Power_VRESProfiles_KInRows), + # ("Power_WeightsK", f"{args.caseStudyFolder}Power_WeightsK.xlsx", ExcelReader.get_Power_WeightsK, ew.write_Power_WeightsK), + # ("Power_WeightsRP", f"{args.caseStudyFolder}Power_WeightsRP.xlsx", ExcelReader.get_Power_WeightsRP, ew.write_Power_WeightsRP), + # ("Power_Wind_TechnicalDetails", f"{args.caseStudyFolder}Power_Wind_TechnicalDetails.xlsx", ExcelReader.get_Power_Wind_TechnicalDetails, ew.write_Power_Wind_TechnicalDetails) ] files_different = [] diff --git a/TableDefinitions.xml b/TableDefinitions.xml index 18771ac..5516f58 100644 --- a/TableDefinitions.xml +++ b/TableDefinitions.xml @@ -39,6 +39,53 @@ + + v0.0.1 + Heat - Demand + 30.0 + + + + + + + + + + + + + v0.0.1 + Heat - Node Links + 45.0 + + + + + + + + + + + + + v0.0.1 + Heat - P2H Technologies + 60.0 + + + + + + + + + + + + + v0.1.2 Power - Bus information @@ -426,6 +473,13 @@ 21.0 rightFloat2 + + Heat Demand Type + Type of Heat Demand + [residential, industry, ...] + 22.0 + general + Efficiency Efficiency calculated as 1/input for 1 MWh, i.e. 0.5 (or 50%) if 2 MWh fuel are required for 1 MWh electricity @@ -489,6 +543,20 @@ 15.0 general + + Heat Node + Name of heat node + [hn] + 15.0 + general + + + Heat Conversion Technology + Type of Conversion Technology + [ASHP, WSHP, electric, …] + 27.0 + general + Hub Height Heigth of the turbine @@ -510,6 +578,13 @@ 19.00 dbKey + + Implicit Thermal Storage Capacity + Implicit thermal storage capacity + [MWh_thermal] + 30.0 + rightFloat2 + InertiaConst Inertia constant H of the unit @@ -524,6 +599,13 @@ 15.0 rightFloat2 + + Installed Capacity + Installed Capacity termal + [MW_thermal] + 15.0 + rightFloat2 + InvestCost Annualized investment cost per MW @@ -853,6 +935,13 @@ 41.0 general + + Self Discharge Thermal + Self-discharge rate of thermal storage unit + [%, 0-1] + 20.0 + rightFloat2 + Self Discharge Self discharge of the storage unit @@ -881,6 +970,13 @@ 15.0 general + + Heating technology share + Share of conversion technology at hn for dt + [%, 0-1] + 20.0 + general + Vmax Cut-out wind speed @@ -1007,6 +1103,22 @@ 10.57 rightInt + + + k + Heat Demand at this representative time step k + [MW] + 10.57 + rightInt + + + + k + Heat Conversion Efficiency at this representative time step k + [-] + 10.57 + rightFloat2 + g diff --git a/data/example/Global_Parameters.xlsx b/data/example/Global_Parameters.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0ff5a7d4a327f3f45444fb58d82523123aa21e0a GIT binary patch literal 21481 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®NC_%KvC zu(45@Ue~V4_uRpst)ab4?iCPyFLeof-U3UZw7SICTtvjHkGqp>UKnNhk9x&{gNbOz z$;hI^kUZ^`Y;_`|hQo#l2kLe9f3Q`GJ-O^X&kBK*@)W4*MLB%2Haj))NRjo4Xarck zUeKO)7G@S@S^pwi+NE@)HS6wXh}S)uTJ9|HpBgn$13V>)zb~#bmi1f@5&*!T834eq zuS2^Mxc~JlZtz2+60G${?+FM~Sh_G>6##4_MP!!E>^UrJaXEagl8@HfZ@yoWYhz`( zlAh!-wZi)nLG|je(9iO%m_Qfp`Z1I5OTt#-ALl(VZ2j_g`}9~$AR$@CfBy*kPc{CZOzr#&^Nq$`NScE zcM|rQOr;jO{I$vQINm4^iNUqmwr`q8y}03cZbYI;W5zPwe6^HUaG_ZSBE1J~On0jP z1gSOVWNE!0zmI+zh@OA*fDyBTe1*e*dE9a~64|n)?I>svHvF=X&Qm6R0?e4J#G6{`@Q-fy7E zcLf`b2?&Q{IcY0X@dugxSid}VM~m&*2)s_;M1;+&QjoF+e@VY}4__Boj1TAEjuH$i3- z6Dd$B#^@Q~aGUDc>-pH^l}z`Ix7?Pe zGxdAe-O>0z5kQvVW$qGJtLfz3>okCMQoMkxiH7!exzs~_V-a=-3r#N9?8r%(yRjzJ zw$H25;U6ZW&BCJW5ElFrPCa^zw@pcJW4Ik?p@mM=1-koy=v;L-5Gl(8QHv$m{A?2%gN>t6I79_o?zV~o&dQa428m_jdvbuQg z_a)h=vl`ouUy3aFo=1g$JXV_{jmb$d@Ftd|R;^@ob2LPE5lfbhRcYLzYKmDd$m~jX z?b_IiA8Y6JU@$m9BE>4{q;mr~;ghH<-H*i>=Enq9&I#)f7japC9gKa>)e7sOq)bI6`ffE`WhFabWoPT3#=$UP&#~|crj2-lU^I+9i+6vQGFCcv>m650vKJ0 zh4@sdKPnkuM=mm2B|Pb9MHZqUF|0^VN83NPgKwOkhQ(}+N7pL%H<`!lD!#-yvHK|4 znNTUey6o~uu%YE8y5e|dJ+sx#b^)sCW=;M zl*?}<%B|BuLd$rHHK1UTceaam&#r9Ac3eymPC^N<+U?dD7b0FVGDwhnCf2T`h6kfm zqV1L^4*6oP;5RmVzxCSA*SH0TpERlo~kIxE^rAcdi$f1og8j?ykcr*H=^`WbdO(-{s z)9A$opG=JAoEFer#yaK}-K?D1HxI#e_o-N33xP&nNc>Ziycu0 zHZBUYs>qFb0erN)ut=OTz?*#G+-r(OIK$jQ3vO0%Q?!afb66mIEqP7pdh`%iJY%2j z+|*oDqEQxQY@Hzt_gQ}XhwCk2n4&z=@soYe_(8_)(Caf(do4j;&ZxjJB7Ur0Da^!x zh?oiR@4j{TiaNR>@Y(;niya}F&@%2A3jiR9I)6p~G>{{N6B?_Xz^CvZ{|`26gam}f zIzI^-BDjEmiO=6`b_iJrcWFOa5JW8MM=bxiXCq`G+|!(}h-)0N{NEi8AsgYedcu~k zMHtyX&aQ-ngj3-O;a%+`!jl=15K7p+PN3ZSzx6UgAYnH+0a6(J6~xcpKnNxjx)ZRc q;Su;>WRH-CP)kmDjEw+*e^3?^12VkX9{@m&zYE~!=mz7%tN#LTysZHM literal 0 HcmV?d00001 diff --git a/data/example/Heat_Nodes.xlsx b/data/example/Heat_Nodes.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..48044b879264e5304b572b96e9c950d4f902d80a GIT binary patch literal 11999 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 H+yDJPQ?Eni literal 0 HcmV?d00001 diff --git a/data/example/Heat_P2H_Technologies.xlsx b/data/example/Heat_P2H_Technologies.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..94c882251f7a071a708dd3e027c891f6387f1974 GIT binary patch literal 14179 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 Date: Fri, 23 Jan 2026 09:52:08 +0100 Subject: [PATCH 2/4] Add heat input data workflow --- ExcelWriter.py | 4 +-- TableDefinitions.xml | 33 +++++++++++++++--- data/example/Heat_Nodes.xlsx | Bin 11999 -> 7794 bytes data/example/Heat_P2H_Conversion_Factors.xlsx | Bin 18247 -> 14110 bytes data/example/Heat_P2H_Technologies.xlsx | Bin 14179 -> 7894 bytes 5 files changed, 31 insertions(+), 6 deletions(-) diff --git a/ExcelWriter.py b/ExcelWriter.py index f0aa25d..94256ad 100644 --- a/ExcelWriter.py +++ b/ExcelWriter.py @@ -319,7 +319,7 @@ def write_Heat_P2H_Technologies(self, dHeat_P2H_Technologies: pd.DataFrame, fold :return: None """ - self._write_Excel_from_definition(dHeat_P2H_Technologies, folder_path, "P2H_Technologies") + self._write_Excel_from_definition(dHeat_P2H_Technologies, folder_path, "Heat_P2H_Technologies") def write_Heat_P2H_Conversion_Factors(self, dHeat_P2H_Conversion_Factors: pd.DataFrame, folder_path: str) -> None: """ @@ -329,7 +329,7 @@ def write_Heat_P2H_Conversion_Factors(self, dHeat_P2H_Conversion_Factors: pd.Dat :return: None """ - self._write_Excel_from_definition(dHeat_P2H_Conversion_Factors, folder_path, "P2H_Conversion_Factors") + self._write_Excel_from_definition(dHeat_P2H_Conversion_Factors, folder_path, "Heat_P2H_Conversion_Factors") def write_Power_BusInfo(self, dPower_BusInfo: pd.DataFrame, folder_path: str) -> None: """ diff --git a/TableDefinitions.xml b/TableDefinitions.xml index 5516f58..f0a8daa 100644 --- a/TableDefinitions.xml +++ b/TableDefinitions.xml @@ -69,11 +69,28 @@ - + + v0.0.1 + Heat - P2H Conversion Factors + 30.0 + + + + + + + + + + + + + v0.0.1 Heat - P2H Technologies 60.0 + @@ -603,7 +620,7 @@ Installed Capacity Installed Capacity termal [MW_thermal] - 15.0 + 17.0 rightFloat2 @@ -974,8 +991,8 @@ Heating technology share Share of conversion technology at hn for dt [%, 0-1] - 20.0 - general + 24.0 + rightFloat2 Vmax @@ -1087,6 +1104,14 @@ 10.57 rightFloat2 + + + k + Conversion Efficiency at this representative time step k + [-] + 10.57 + rightFloat2 + i diff --git a/data/example/Heat_Nodes.xlsx b/data/example/Heat_Nodes.xlsx index 48044b879264e5304b572b96e9c950d4f902d80a..d2906c4e4596348692da570bb13c7ffae4e88732 100644 GIT binary patch literal 7794 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 literal 11999 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 H+yDJPQ?Eni diff --git a/data/example/Heat_P2H_Technologies.xlsx b/data/example/Heat_P2H_Technologies.xlsx index 94c882251f7a071a708dd3e027c891f6387f1974..7af9875d4062a9cbcbfb6e98d4e1e921d3293635 100644 GIT binary patch literal 7894 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 literal 14179 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 Date: Fri, 23 Jan 2026 14:29:07 +0100 Subject: [PATCH 3/4] Add Heat to CaseStudy Un-Comment Excel-Writer write to Case-Study Fix formatting (and alphabetical sorting) --- CaseStudy.py | 53 +++++++++++++++++++++++++++------- ExcelReader.py | 37 +++++++++++++----------- ExcelWriter.py | 38 ++++++++++++------------ TableDefinitions.xml | 6 ++-- data/example/Heat_Demand.xlsx | Bin 20975 -> 27013 bytes 5 files changed, 84 insertions(+), 50 deletions(-) diff --git a/CaseStudy.py b/CaseStudy.py index aaa676e..2c6eff7 100644 --- a/CaseStudy.py +++ b/CaseStudy.py @@ -16,15 +16,18 @@ class CaseStudy: # Lists of dataframes based on their dependencies - every table should only be present in one of these lists - rpk_dependent_dataframes: list[str] = ["dHeat_Demand", - "dPower_Demand", + rpk_dependent_dataframes: list[str] = ["dHeat_P2H_Conversion_Factors" + "dHeat_Demand", + "dPower_Demand", "dPower_Hindex", "dPower_ImportExport", "dPower_Inflows", "dPower_VRESProfiles"] rp_only_dependent_dataframes: list[str] = ["dPower_WeightsRP"] k_only_dependent_dataframes: list[str] = ["dPower_WeightsK"] - non_time_dependent_dataframes: list[str] = ["dPower_BusInfo", + non_time_dependent_dataframes: list[str] = ["dHeat_Nodes", + "dHeat_P2H_Technologies", + "dPower_BusInfo", "dPower_Network", "dPower_Storage", "dPower_ThermalGen", @@ -47,19 +50,22 @@ def __init__(self, global_parameters_file: str = "Global_Parameters.xlsx", dGlobal_Parameters: pd.DataFrame = None, global_scenarios_file: str = "Global_Scenarios.xlsx", dGlobal_Scenarios: pd.DataFrame = None, heat_demand_file: str = "Heat_Demand.xlsx", dHeat_Demand: pd.DataFrame = None, - power_parameters_file: str = "Power_Parameters.xlsx", dPower_Parameters: pd.DataFrame = None, + heat_nodes_file: str = "Heat_Nodes.xlsx", dHeat_Nodes: pd.DataFrame = None, + heat_p2h_conversion_factors_file: str = "Heat_P2H_Conversion_Factors.xlsx", dHeat_P2H_Conversion_Factors: pd.DataFrame = None, + heat_p2h_technologies_file: str = "Heat_P2H_Technologies.xlsx", dHeat_P2H_Technologies: pd.DataFrame = None, power_businfo_file: str = "Power_BusInfo.xlsx", dPower_BusInfo: pd.DataFrame = None, + power_demand_file: str = "Power_Demand.xlsx", dPower_Demand: pd.DataFrame = None, + power_hindex_file: str = "Power_Hindex.xlsx", dPower_Hindex: pd.DataFrame = None, + power_importexport_file: str = "Power_ImportExport.xlsx", dPower_ImportExport: pd.DataFrame = None, + power_inflows_file: str = "Power_Inflows.xlsx", dPower_Inflows: pd.DataFrame = None, power_network_file: str = "Power_Network.xlsx", dPower_Network: pd.DataFrame = None, + power_parameters_file: str = "Power_Parameters.xlsx", dPower_Parameters: pd.DataFrame = None, + power_storage_file: str = "Power_Storage.xlsx", dPower_Storage: pd.DataFrame = None, power_thermalgen_file: str = "Power_ThermalGen.xlsx", dPower_ThermalGen: pd.DataFrame = None, power_vres_file: str = "Power_VRES.xlsx", dPower_VRES: pd.DataFrame = None, - power_demand_file: str = "Power_Demand.xlsx", dPower_Demand: pd.DataFrame = None, - power_inflows_file: str = "Power_Inflows.xlsx", dPower_Inflows: pd.DataFrame = None, power_vresprofiles_file: str = "Power_VRESProfiles.xlsx", dPower_VRESProfiles: pd.DataFrame = None, - power_storage_file: str = "Power_Storage.xlsx", dPower_Storage: pd.DataFrame = None, - power_weightsrp_file: str = "Power_WeightsRP.xlsx", dPower_WeightsRP: pd.DataFrame = None, power_weightsk_file: str = "Power_WeightsK.xlsx", dPower_WeightsK: pd.DataFrame = None, - power_hindex_file: str = "Power_Hindex.xlsx", dPower_Hindex: pd.DataFrame = None, - power_importexport_file: str = "Power_ImportExport.xlsx", dPower_ImportExport: pd.DataFrame = None, + power_weightsrp_file: str = "Power_WeightsRP.xlsx", dPower_WeightsRP: pd.DataFrame = None, clip_method: str = "none", clip_value: float = 0): self.data_folder = str(data_folder) if str(data_folder).endswith("/") else str(data_folder) + "/" self.do_not_scale_units = do_not_scale_units @@ -137,6 +143,27 @@ def __init__(self, else: self.dHeat_Demand = dHeat_Demand + if self.dGlobal_Parameters["pEnableHeat"]: + self.heat_p2h_conversion_factors_file = heat_p2h_conversion_factors_file + if dHeat_P2H_Conversion_Factors is None: + tasks.append(("dHeat_P2H_Conversion_Factors", ExcelReader.get_Heat_P2H_Conversion_Factors, (self.data_folder + self.heat_p2h_conversion_factors_file,))) + else: + self.dHeat_P2H_Conversion_Factors = dHeat_P2H_Conversion_Factors + + if self.dGlobal_Parameters["pEnableHeat"]: + self.heat_nodes_file = heat_nodes_file + if dHeat_Nodes is None: + tasks.append(("dHeat_Nodes", ExcelReader.get_Heat_Nodes, (self.data_folder + self.heat_nodes_file,))) + else: + self.dHeat_Nodes = dHeat_Nodes + + if self.dGlobal_Parameters["pEnableHeat"]: + self.heat_p2h_technologies_file = heat_p2h_technologies_file + if dHeat_P2H_Technologies is None: + tasks.append(("dHeat_P2H_Technologies", ExcelReader.get_Heat_P2H_Technologies, (self.data_folder + self.heat_p2h_technologies_file,))) + else: + self.dHeat_P2H_Technologies = dHeat_P2H_Technologies + if self.dPower_Parameters["pEnableThermalGen"]: self.power_thermalgen_file = power_thermalgen_file if dPower_ThermalGen is None: @@ -301,6 +328,10 @@ def remove_scaling(self): def scale_dHeat_Demand(self): self.dHeat_Demand["value"] *= self.power_scaling_factor + def scale_dHeat_P2H_Technologies(self): + self.dHeat_P2H_Technologies["InstCap"] *= self.power_scaling_factor + self.dHeat_P2H_Technologies["ImpStoCap"] *= self.power_scaling_factor + def scale_dPower_Parameters(self): self.dPower_Parameters["pSBase"] *= self.power_scaling_factor self.dPower_Parameters["pENSCost"] *= self.cost_scaling_factor / self.power_scaling_factor @@ -395,7 +426,7 @@ def scale_dPower_ImportExport(self): def get_dGlobal_Parameters(self): file_path = self.data_folder + self.global_parameters_file - version_spec = "v0.1.0" + version_spec = "v0.1.1" fail_on_wrong_version = False try: diff --git a/ExcelReader.py b/ExcelReader.py index 481ed9b..de16fb2 100644 --- a/ExcelReader.py +++ b/ExcelReader.py @@ -144,21 +144,6 @@ def get_Global_Scenarios(excel_file_path: str, keep_excluded_entries: bool = Fal return dGlobal_Scenarios -def get_Heat_P2H_Conversion_Factors(excel_file_path: str, keep_excluded_entries: bool = False, fail_on_wrong_version: bool = False) -> pd.DataFrame: - """ - Read the dHeat_P2H_Conversion_Factors data from the Excel file. - :param excel_file_path: Path to the Excel file - :param keep_excluded_entries: Unused but kept for compatibility with other functions - :param fail_on_wrong_version: If True, raise an error if the version of the Excel file does not match the expected version - :return: dHeat_P2H_Conversion_Factors - """ - dHeat_P2H_Conversion_Factors = __read_pivoted_file(excel_file_path, "v0.0.1", ['rp', 'k', 'hn', 'dt', 'htec'], 'k', ['rp', 'hn', 'dt', 'htec', 'dataPackage', 'dataSource', 'id'], False, False, fail_on_wrong_version) - - if keep_excluded_entries: - printer.warning("'keep_excluded_entries' is set for 'dHeat_P2H_Conversion_Factors', although nothing is excluded anyway - please check if this is intended.") - - return dHeat_P2H_Conversion_Factors - def get_Heat_Demand(excel_file_path: str, keep_excluded_entries: bool = False, fail_on_wrong_version: bool = False) -> pd.DataFrame: """ @@ -175,6 +160,7 @@ def get_Heat_Demand(excel_file_path: str, keep_excluded_entries: bool = False, f return dHeat_Demand + def get_Heat_Nodes(excel_file_path: str, keep_excluded_entries: bool = False, fail_on_wrong_version: bool = False) -> pd.DataFrame: """ Read the dHeat_Node_Links data from the Excel file. @@ -183,11 +169,27 @@ def get_Heat_Nodes(excel_file_path: str, keep_excluded_entries: bool = False, fa :param fail_on_wrong_version: If True, raise an error if the version of the Excel file does not match the expected version :return: dHeat_Node_Links """ - dHeat_Node_Links = __read_non_pivoted_file(excel_file_path, "v0.0.1", ["i","hn"], True, keep_excluded_entries, fail_on_wrong_version) + dHeat_Node_Links = __read_non_pivoted_file(excel_file_path, "v0.0.1", ["i", "hn"], True, keep_excluded_entries, fail_on_wrong_version) return dHeat_Node_Links +def get_Heat_P2H_Conversion_Factors(excel_file_path: str, keep_excluded_entries: bool = False, fail_on_wrong_version: bool = False) -> pd.DataFrame: + """ + Read the dHeat_P2H_Conversion_Factors data from the Excel file. + :param excel_file_path: Path to the Excel file + :param keep_excluded_entries: Unused but kept for compatibility with other functions + :param fail_on_wrong_version: If True, raise an error if the version of the Excel file does not match the expected version + :return: dHeat_P2H_Conversion_Factors + """ + dHeat_P2H_Conversion_Factors = __read_pivoted_file(excel_file_path, "v0.0.1", ['rp', 'k', 'hn', 'dt', 'htec'], 'k', ['rp', 'hn', 'dt', 'htec', 'dataPackage', 'dataSource', 'id'], False, False, fail_on_wrong_version) + + if keep_excluded_entries: + printer.warning("'keep_excluded_entries' is set for 'dHeat_P2H_Conversion_Factors', although nothing is excluded anyway - please check if this is intended.") + + return dHeat_P2H_Conversion_Factors + + def get_Heat_P2H_Technologies(excel_file_path: str, keep_excluded_entries: bool = False, fail_on_wrong_version: bool = False) -> pd.DataFrame: """ Read the dHeat_P2H_Technologies data from the Excel file. @@ -196,10 +198,11 @@ def get_Heat_P2H_Technologies(excel_file_path: str, keep_excluded_entries: bool :param fail_on_wrong_version: If True, raise an error if the version of the Excel file does not match the expected version :return: dHeat_P2H_Technologies """ - dHeat_P2H_Technologies = __read_non_pivoted_file(excel_file_path, "v0.0.1", ["hn","dt","htec"], True, keep_excluded_entries, fail_on_wrong_version) + dHeat_P2H_Technologies = __read_non_pivoted_file(excel_file_path, "v0.0.1", ["hn", "dt", "htec"], False, keep_excluded_entries, fail_on_wrong_version) return dHeat_P2H_Technologies + def get_Power_BusInfo(excel_file_path: str, keep_excluded_entries: bool = False, fail_on_wrong_version: bool = False) -> pd.DataFrame: """ Read the dPower_BusInfo data from the Excel file. diff --git a/ExcelWriter.py b/ExcelWriter.py index 94256ad..663cf2d 100644 --- a/ExcelWriter.py +++ b/ExcelWriter.py @@ -564,29 +564,29 @@ def model_to_excel(model: pyomo.core.Model, target_path: str) -> None: printer.separator() combinations = [ - #conda env("Data_Packages", f"{args.caseStudyFolder}Data_Packages.xlsx", ExcelReader.get_Data_Packages, ew.write_Data_Packages), - #("Data_Sources", f"{args.caseStudyFolder}Data_Sources.xlsx", ExcelReader.get_Data_Sources, ew.write_Data_Sources), - #("Global_Scenarios", f"{args.caseStudyFolder}Global_Scenarios.xlsx", ExcelReader.get_Global_Scenarios, ew.write_Global_Scenarios), + ("Data_Packages", f"{args.caseStudyFolder}Data_Packages.xlsx", ExcelReader.get_Data_Packages, ew.write_Data_Packages), + ("Data_Sources", f"{args.caseStudyFolder}Data_Sources.xlsx", ExcelReader.get_Data_Sources, ew.write_Data_Sources), + ("Global_Scenarios", f"{args.caseStudyFolder}Global_Scenarios.xlsx", ExcelReader.get_Global_Scenarios, ew.write_Global_Scenarios), ("Heat_Demand", f"{args.caseStudyFolder}Heat_Demand.xlsx", ExcelReader.get_Heat_Demand, ew.write_Heat_Demand), ("Heat_Nodes", f"{args.caseStudyFolder}Heat_Nodes.xlsx", ExcelReader.get_Heat_Nodes, ew.write_Heat_Nodes), ("Heat_P2H_Technologies", f"{args.caseStudyFolder}Heat_P2H_Technologies.xlsx", ExcelReader.get_Heat_P2H_Technologies, ew.write_Heat_P2H_Technologies), ("Heat_P2H_Conversion_Factors", f"{args.caseStudyFolder}Heat_P2H_Conversion_Factors.xlsx", ExcelReader.get_Heat_P2H_Conversion_Factors, ew.write_Heat_P2H_Conversion_Factors), - # ("Power_BusInfo", f"{args.caseStudyFolder}Power_BusInfo.xlsx", ExcelReader.get_Power_BusInfo, ew.write_Power_BusInfo), - # ("Power_Demand", f"{args.caseStudyFolder}Power_Demand.xlsx", ExcelReader.get_Power_Demand, ew.write_Power_Demand), - # ("Power_Demand_KInRows", f"{args.caseStudyFolder}Power_Demand_KInRows.xlsx", ExcelReader.get_Power_Demand_KInRows, ew.write_Power_Demand_KInRows), - # ("Power_Hindex", f"{args.caseStudyFolder}Power_Hindex.xlsx", ExcelReader.get_Power_Hindex, ew.write_Power_Hindex), - # ("Power_ImportExport", f"{args.caseStudyFolder}Power_ImportExport.xlsx", ExcelReader.get_Power_ImportExport, ew.write_Power_ImportExport), - # ("Power_Inflows", f"{args.caseStudyFolder}Power_Inflows.xlsx", ExcelReader.get_Power_Inflows, ew.write_Power_Inflows), - # ("Power_Inflows_KInRows", f"{args.caseStudyFolder}Power_Inflows_KInRows.xlsx", ExcelReader.get_Power_Inflows_KInRows, ew.write_Power_Inflows_KInRows), - # ("Power_Network", f"{args.caseStudyFolder}Power_Network.xlsx", ExcelReader.get_Power_Network, ew.write_Power_Network), - # ("Power_Storage", f"{args.caseStudyFolder}Power_Storage.xlsx", ExcelReader.get_Power_Storage, ew.write_Power_Storage), - # ("Power_ThermalGen", f"{args.caseStudyFolder}Power_ThermalGen.xlsx", ExcelReader.get_Power_ThermalGen, ew.write_Power_ThermalGen), - # ("Power_VRES", f"{args.caseStudyFolder}Power_VRES.xlsx", ExcelReader.get_Power_VRES, ew.write_Power_VRES), - # ("Power_VRESProfiles", f"{args.caseStudyFolder}Power_VRESProfiles.xlsx", ExcelReader.get_Power_VRESProfiles, ew.write_Power_VRESProfiles), - # ("Power_VRESProfiles_KInRows", f"{args.caseStudyFolder}Power_VRESProfiles_KInRows.xlsx", ExcelReader.get_Power_VRESProfiles_KInRows, ew.write_Power_VRESProfiles_KInRows), - # ("Power_WeightsK", f"{args.caseStudyFolder}Power_WeightsK.xlsx", ExcelReader.get_Power_WeightsK, ew.write_Power_WeightsK), - # ("Power_WeightsRP", f"{args.caseStudyFolder}Power_WeightsRP.xlsx", ExcelReader.get_Power_WeightsRP, ew.write_Power_WeightsRP), - # ("Power_Wind_TechnicalDetails", f"{args.caseStudyFolder}Power_Wind_TechnicalDetails.xlsx", ExcelReader.get_Power_Wind_TechnicalDetails, ew.write_Power_Wind_TechnicalDetails) + ("Power_BusInfo", f"{args.caseStudyFolder}Power_BusInfo.xlsx", ExcelReader.get_Power_BusInfo, ew.write_Power_BusInfo), + ("Power_Demand", f"{args.caseStudyFolder}Power_Demand.xlsx", ExcelReader.get_Power_Demand, ew.write_Power_Demand), + ("Power_Demand_KInRows", f"{args.caseStudyFolder}Power_Demand_KInRows.xlsx", ExcelReader.get_Power_Demand_KInRows, ew.write_Power_Demand_KInRows), + ("Power_Hindex", f"{args.caseStudyFolder}Power_Hindex.xlsx", ExcelReader.get_Power_Hindex, ew.write_Power_Hindex), + ("Power_ImportExport", f"{args.caseStudyFolder}Power_ImportExport.xlsx", ExcelReader.get_Power_ImportExport, ew.write_Power_ImportExport), + ("Power_Inflows", f"{args.caseStudyFolder}Power_Inflows.xlsx", ExcelReader.get_Power_Inflows, ew.write_Power_Inflows), + ("Power_Inflows_KInRows", f"{args.caseStudyFolder}Power_Inflows_KInRows.xlsx", ExcelReader.get_Power_Inflows_KInRows, ew.write_Power_Inflows_KInRows), + ("Power_Network", f"{args.caseStudyFolder}Power_Network.xlsx", ExcelReader.get_Power_Network, ew.write_Power_Network), + ("Power_Storage", f"{args.caseStudyFolder}Power_Storage.xlsx", ExcelReader.get_Power_Storage, ew.write_Power_Storage), + ("Power_ThermalGen", f"{args.caseStudyFolder}Power_ThermalGen.xlsx", ExcelReader.get_Power_ThermalGen, ew.write_Power_ThermalGen), + ("Power_VRES", f"{args.caseStudyFolder}Power_VRES.xlsx", ExcelReader.get_Power_VRES, ew.write_Power_VRES), + ("Power_VRESProfiles", f"{args.caseStudyFolder}Power_VRESProfiles.xlsx", ExcelReader.get_Power_VRESProfiles, ew.write_Power_VRESProfiles), + ("Power_VRESProfiles_KInRows", f"{args.caseStudyFolder}Power_VRESProfiles_KInRows.xlsx", ExcelReader.get_Power_VRESProfiles_KInRows, ew.write_Power_VRESProfiles_KInRows), + ("Power_WeightsK", f"{args.caseStudyFolder}Power_WeightsK.xlsx", ExcelReader.get_Power_WeightsK, ew.write_Power_WeightsK), + ("Power_WeightsRP", f"{args.caseStudyFolder}Power_WeightsRP.xlsx", ExcelReader.get_Power_WeightsRP, ew.write_Power_WeightsRP), + ("Power_Wind_TechnicalDetails", f"{args.caseStudyFolder}Power_Wind_TechnicalDetails.xlsx", ExcelReader.get_Power_Wind_TechnicalDetails, ew.write_Power_Wind_TechnicalDetails) ] files_different = [] diff --git a/TableDefinitions.xml b/TableDefinitions.xml index f0a8daa..e3cea04 100644 --- a/TableDefinitions.xml +++ b/TableDefinitions.xml @@ -54,7 +54,7 @@ - + v0.0.1 Heat - Node Links 45.0 @@ -69,7 +69,7 @@ - + v0.0.1 Heat - P2H Conversion Factors 30.0 @@ -95,7 +95,7 @@ - + diff --git a/data/example/Heat_Demand.xlsx b/data/example/Heat_Demand.xlsx index a822aae26640748d34b63b4c3c75f763253bba5a..a9d8e90e057596306b406eec2bbec0d1db086a8f 100644 GIT binary patch literal 27013 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 literal 20975 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®NC_%KvC zu(45@Ue~V4_uRpst)ab4?iCPyFLeof-U3UZw7SICTtvjHkGqp>UKnNhk9x&{gNbOz z$;hI^kUZ^`Y;_`|hQo#l2kLe9f3Q`GJ-O^X&kBK*@)W4*MLB%2Haj))NRjo4Xarck zUeKO)7G@S@S^pwi+NE@)HS6wXh}S)uTJ9|HpBgn$13V>)zb~#bmi1f@5&*!T834eq zuS2^Mxc~JlZtz2+60G${?+FM~Sh_G>6##4_MP!!E>^UrJaXEagl8@HfZ@yoWYhz`( zlAh!-wZi)nLG|je(9iO%m_Qfp`Z1I5OTt#-ALl(VZ2j_g`}9~$AR$@CfBy*kPc{CZOzr#&^Nq$`NScE zcM|rQOr;jO{I$vQINm4^iNUqmwr`q8y}03cZbYI;W5zPwe6^HUaG_ZSBE1J~On0jP z1gSOVWNE!0zmI+zh@OA*fDyBTe1*e*dE9a~64|n)?I>svHvF=X&Qm6R0?e4J#G6{`@Q-fy7E zcLf`b2?&Q{IcY0X@dugxSid}VM~m&*2)s_;M1;+&QjoF+e@VY}4__Boj1TAEjuH$i3- z6Dd$B#^@Q~aGUDc>-pH^l}z`Ix7?Pe zGxdAe-O>0z5kQvVW$qGJtLfz3>okCMQoMkxiH7!exzs~_V-a=-3r#N9?8r%(yRjzJ zw$H25;U6ZW&BCJW5ElFrPCa^zw@pcJW4Ik?p@mM=1-koy=v;L-5Gl(8QHv$m{A?2%gN>t6I79_o?zV~o&dQa428m_jdvbuQg z_a)h=vl`ouUy3aFo=1g$JXV_{jmb$d@Ftd|R;^@ob2LPE5lfbhRcYLzYKmDd$m~jX z?b_IiA8Y6JU@$m9BE>4{q;mr~;ghH<-H*i>=Enq9&I#)f7japC9gKa>)e7sOq)bI6`ffE`WhFabWoPT3#=$UP&#~|crj2-lU^I+9i+6vQGFCcv>m650vKJ0 zh4@sdKPnkuM=mm2B|Pb9MHZqUF|0^VN83NPgKwOkhQ(}+N7pL%H<`!lD!#-yvHK|4 znNTUey6o~uu%YE8y5e|dJ+sx#b^)sCW=;M zl*?}<%B|BuLd$rHHK1UTceaam&#r9Ac3eymPC^N<+U?dD7b0FVGDwhnCf2T`h6kfm zqV1L^4*6oP;5RmVzxCSA*SH0TpERlo~kIxE^rAcdi$f1og8j?ykcr*H=^`WbdO(-{s z)9A$opG=JAoEFer#yaK}-K?D1HxI#e_o-N33xP&nNc>Ziycu0 zHZBUYs>qFb0erN)ut=OTz?*#G+-r(OIK$jQ3vO0%Q?!afb66mIEqP7pdh`%iJY%2j z+|*oDqEQxQY@Hzt_gQ}XhwCk2n4&z=@soYe_(8_)(Caf(do4j;&ZxjJB7Ur0Da^!x zh?oiR@4j{TiaNR>@Y(;niya}F&@%2A3jiR9I)6p~G>{{N6B?_Xz^CvZ{|`26gam}f zIzI^-BDjEmiO=6`b_iJrcWFOa5JW8MM=bxiXCq`G+|!(}h-)0N{NEi8AsgYedcu~k zMHtyX&aQ-ngj3-O;a%+`!jl=15K7p+PN3ZSzx6UgAYnH+0a6(J6~xcpKnNxjx)ZRc q;Su;>WRH-CP)kmDjEw+*e^3?^12VkX9{@m&zYE~!=mz7%tN#LTysZHM From 4f0c09dae3743033dab31c51458d725b3341c528 Mon Sep 17 00:00:00 2001 From: Simon Malacek <164174122+malacek@users.noreply.github.com> Date: Wed, 8 Apr 2026 16:07:07 +0200 Subject: [PATCH 4/4] Add pEnableHeat flag --- CaseStudy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CaseStudy.py b/CaseStudy.py index 2c6eff7..a99721e 100644 --- a/CaseStudy.py +++ b/CaseStudy.py @@ -446,7 +446,7 @@ def get_dGlobal_Parameters(self): dGlobal_Parameters = dGlobal_Parameters.drop(dGlobal_Parameters.columns[0], axis=1) dGlobal_Parameters = dGlobal_Parameters.set_index('Solver Options') - self.yesNo_to_bool(dGlobal_Parameters, ['pEnableRMIP']) + self.yesNo_to_bool(dGlobal_Parameters, ['pEnableRMIP', 'pEnableHeat']) # Transform to make it easier to access values dGlobal_Parameters = dGlobal_Parameters.drop(dGlobal_Parameters.columns[1:], axis=1) # Drop all columns but "Value" (rest is just for information in the Excel)