Coverage for bim2sim/plugins/PluginHKESim/test/unit/kernel/task/test_export.py: 0%
99 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-12 17:09 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-12 17:09 +0000
1import tempfile
2import unittest
4from bim2sim.elements.aggregation.hvac_aggregations import \
5 ConsumerHeatingDistributorModule
6from bim2sim.elements.mapping.units import ureg
7from bim2sim.kernel.decision.decisionhandler import DebugDecisionHandler
8from bim2sim.plugins.PluginHKESim.bim2sim_hkesim import LoadLibrariesHKESim
9from test.unit.tasks.hvac.test_export import TestStandardLibraryExports
12class TestHKESimExport(TestStandardLibraryExports):
14 @classmethod
15 def setUpClass(cls) -> None:
16 super().setUpClass()
17 # Load libraries as these are required for export
18 lib_hkesim = LoadLibrariesHKESim(cls.playground)
19 cls.loaded_libs = lib_hkesim.run()[0]
21 def test_boiler_export(self):
22 graph = self.helper.get_simple_boiler()
23 answers = ()
24 reads = (self.loaded_libs, graph)
25 modelica_model = self.run_task(answers, reads)
26 parameters = [('rated_power', 'Q_nom'),
27 ('return_temperature', 'T_set')]
28 expected_units = [ureg.watt, ureg.kelvin]
29 self.run_parameter_test(graph, modelica_model, parameters,
30 expected_units)
32 def test_radiator_export(self):
33 graph = self.helper.get_simple_radiator()
34 answers = ()
35 reads = (self.loaded_libs, graph)
36 modelica_model = self.run_task(answers, reads)
37 parameters = [('rated_power', 'Q_flow_nominal'),
38 ('return_temperature', 'Tout_max')]
39 expected_units = [ureg.watt, ureg.kelvin]
40 self.run_parameter_test(graph, modelica_model, parameters,
41 expected_units)
43 def test_pump_export(self):
44 graph, _ = self.helper.get_simple_pump()
45 answers = ()
46 reads = (self.loaded_libs, graph)
47 modelica_model = self.run_task(answers, reads)
48 parameters = [('rated_height', 'head_set'),
49 ('rated_volume_flow', 'Vflow_set'),
50 ('rated_power', 'P_nom')]
51 expected_units = [ureg.meter, ureg.meter ** 3 / ureg.hour, ureg.watt]
52 self.run_parameter_test(graph, modelica_model, parameters,
53 expected_units)
55 @unittest.skip
56 def test_three_way_valve_export(self):
57 # TODO: there are no parameters to test for
58 raise NotImplementedError
60 def test_consumer_heating_distributor_module_export(self):
61 # Set up the test graph and model
62 graph = self.helper.get_simple_consumer_heating_distributor_module()
63 answers = ()
64 reads = (self.loaded_libs, graph)
65 modelica_model = self.run_task(answers, reads)
66 # Get the ConsumerHeatingDistributorModule element
67 element = next(element for element in graph.elements
68 if isinstance(element,
69 ConsumerHeatingDistributorModule))
71 # Get parameter values from element
72 flow_temp_0 = element.flow_temperature[0].magnitude
73 return_temp_0 = element.return_temperature[0].magnitude
74 flow_temp_1 = element.flow_temperature[1].magnitude
75 return_temp_1 = element.return_temperature[1].magnitude
76 rated_power_0 = element.rated_power[0].to(ureg.watt).magnitude
77 rated_power_1 = element.rated_power[1].to(ureg.watt).magnitude
79 # Define the expected parameter strings in modelica model code
80 expected_strings = [
81 f"Tconsumer={{{flow_temp_0},{return_temp_0}}}",
82 f"Tconsumer1={{{flow_temp_0},{return_temp_0}}}",
83 f"Tconsumer2={{{flow_temp_1},{return_temp_1}}}",
84 f"c1Qflow_nom={rated_power_0}",
85 f"c2Qflow_nom={rated_power_1}",
86 "useHydraulicSeparator=false",
87 "c1TControl=false",
88 "c2TControl=false",
89 "c1OpenEnd=false",
90 "c1OpenEnd=false",
91 "isConsumer2=true"]
93 # Assert that each expected string is in the modelica_model code
94 for expected_string in expected_strings:
95 self.assertIn(expected_string, modelica_model[0].code())
97 def test_boiler_module_export(self):
98 graph = self.helper.get_simple_generator_one_fluid()
99 answers = ()
100 reads = (self.loaded_libs, graph)
101 modelica_model = self.run_task(answers, reads)
102 element = graph.elements[0]
103 rated_power = element.rated_power.to(ureg.watt).magnitude
104 flow_temp = element.flow_temperature.magnitude
105 return_temp = element.return_temperature.magnitude
106 expected_strings = [
107 f"Theating={{{flow_temp},{return_temp}}}",
108 f"Qflow_nom={rated_power}",
109 ]
110 for expected_string in expected_strings:
111 self.assertIn(expected_string, modelica_model[0].code())
113 def test_heat_pump_export(self):
114 graph = self.helper.get_simple_heat_pump()
115 answers = ()
116 reads = (self.loaded_libs, graph)
117 modelica_model = self.run_task(answers, reads)
118 parameters = [('rated_power', 'Qcon_nom')]
119 expected_units = [ureg.watt]
120 self.run_parameter_test(graph, modelica_model, parameters,
121 expected_units)
123 def test_chiller_export(self):
124 graph = self.helper.get_simple_chiller()
125 answers = ()
126 reads = (self.loaded_libs, graph)
127 modelica_model = self.run_task(answers, reads)
128 parameters = [('rated_power', 'Qev_nom'),
129 ('nominal_COP', 'EER_nom')]
130 expected_units = [ureg.watt, ureg.dimensionless]
131 self.run_parameter_test(graph, modelica_model, parameters,
132 expected_units)
134 def test_chp_export(self):
135 graph = self.helper.get_simple_chp()
136 answers = ()
137 reads = (self.loaded_libs, graph)
138 modelica_model = self.run_task(answers, reads)
139 parameters = [('rated_power', 'P_nom')]
140 expected_units = [ureg.watt]
141 self.run_parameter_test(graph, modelica_model, parameters,
142 expected_units)
144 def test_cooling_tower_export(self):
145 graph = self.helper.get_simple_cooling_tower()
146 answers = ()
147 reads = (self.loaded_libs, graph)
148 modelica_model = self.run_task(answers, reads)
149 parameters = [('rated_power', 'Qflow_nom')]
150 expected_units = [ureg.watt]
151 self.run_parameter_test(graph, modelica_model, parameters,
152 expected_units)