OGS
FlowAndTemperatureControl.h
Go to the documentation of this file.
1
11#pragma once
12
13#include <variant>
14
15#include "BaseLib/Error.h"
16#include "BuildingPowerCurves.h"
18
19namespace ProcessLib
20{
21namespace HeatTransportBHE
22{
23namespace BHE
24{
26{
27 double const flow_rate;
28 double const temperature;
29};
30
32 double power,
33 double heat_capacity,
34 double density,
35 double T_out,
36 double flow_rate_min,
37 double power_min)
38{
39 flow_rate = (std::abs(flow_rate) < flow_rate_min) ? 0.0 : flow_rate;
40
41 if (std::abs(power) < power_min)
42 {
43 return {flow_rate, T_out};
44 }
45
46 if (flow_rate == 0)
47 {
49 "BHE power {:0.2f} W with flow rate of 0 m3/s requested, "
50 "calculation not possible!",
51 power);
52 }
53 return {flow_rate, power / flow_rate / heat_capacity / density + T_out};
54};
55
57{
58 FlowAndTemperature operator()(double const /*T_out*/,
59 double const time) const
60 {
61 return {(std::abs(flow_rate) < flow_rate_min) ? 0.0 : flow_rate,
63 }
64 double flow_rate;
67 static constexpr bool is_power_bc = false;
68};
69
71{
72 FlowAndTemperature operator()(double const /*T_out*/,
73 double const time) const
74 {
75 double flow_rate = flow_rate_curve.getValue(time);
76 flow_rate = (std::abs(flow_rate) < flow_rate_min) ? 0.0 : flow_rate;
77 return {flow_rate, temperature_curve.getValue(time)};
78 }
82 static constexpr bool is_power_bc = false;
83};
84
86{
87 FlowAndTemperature operator()(double const T_out,
88 double const /*time*/) const
89 {
91 power,
93 density,
94 T_out,
96 power_min);
97 }
98 double flow_rate;
99 double power; // Value is expected to be in Watt.
101 double density;
103 double power_min;
104 static constexpr bool is_power_bc = true;
105};
106
108{
109 FlowAndTemperature operator()(double const T_out, double const time) const
110 {
111 double const flow_rate = flow_curve.getValue(time);
112
113 return check_power_and_flow_rate(flow_rate,
114 power,
116 density,
117 T_out,
119 power_min);
120 }
122
123 double power; // Value is expected to be in Watt.
125 double density;
127 double power_min;
128 static constexpr bool is_power_bc = true;
129};
130
132{
133 FlowAndTemperature operator()(double const T_out, double const time) const
134 {
135 double const power = power_curve.getValue(time);
136
138 power,
140 density,
141 T_out,
143 power_min);
144 }
146
147 double flow_rate;
149 double density;
151 double power_min;
152 static constexpr bool is_power_bc = true;
153};
154
156{
157 FlowAndTemperature operator()(double const T_out, double const time) const
158 {
159 double const power = power_curve.getValue(time);
160 double const flow_rate = flow_curve.getValue(time);
161
162 return check_power_and_flow_rate(flow_rate,
163 power,
165 density,
166 T_out,
168 power_min);
169 }
172
174 double density;
176 double power_min;
177 static constexpr bool is_power_bc = true;
178};
179
181{
182 FlowAndTemperature operator()(double const T_out, double const time) const
183 {
184 double const power_building =
186 double const cop = building_power_curves.cop_curve.getValue(T_out);
187
188 double const power = power_building - power_building / cop;
189
191 power,
193 density,
194 T_out,
196 power_min);
197 }
199
200 double flow_rate;
202 double density;
204 double power_min;
205 static constexpr bool is_power_bc = true;
206};
207
209{
210 FlowAndTemperature operator()(double const T_out, double const time) const
211 {
212 double const power_heating =
214 double const cop_heating =
216
217 double const power_hot_water =
219 double const cop_hot_water =
221
222 double const power_cooling =
224 double const cop_cooling =
226
227 double const flow_rate = flow_curve.getValue(time);
228
229 double const power = power_heating - power_heating / cop_heating +
230 power_hot_water - power_hot_water / cop_hot_water +
231 power_cooling - power_cooling / cop_cooling;
232
233 return check_power_and_flow_rate(flow_rate,
234 power,
236 density,
237 T_out,
239 power_min);
240 }
245
247 double density;
249 double power_min;
250 static constexpr bool is_power_bc = true;
251};
252
254{
255 FlowAndTemperature operator()(double const T_out, double const time) const
256 {
257 double const power_heating =
259 double const cop_heating =
261
262 double const power_hot_water =
264 double const cop_hot_water =
266
267 double const power_cooling = cooling_power.getValue(time);
268
269 double const flow_rate = flow_curve.getValue(time);
270
271 double const power = power_heating - power_heating / cop_heating +
272 power_hot_water - power_hot_water / cop_hot_water +
273 power_cooling;
274
275 return check_power_and_flow_rate(flow_rate,
276 power,
278 density,
279 T_out,
281 power_min);
282 }
287
289 double density;
291 double power_min;
292 static constexpr bool is_power_bc = true;
293};
294
296{
297 FlowAndTemperature operator()(double const T_out, double const time) const
298 {
299 double const power_heating =
301 double const cop_heating =
303
304 double const power_hot_water =
306 double const cop_hot_water =
308
309 double const flow_rate = flow_curve.getValue(time);
310
311 double const power = power_heating - power_heating / cop_heating +
312 power_hot_water - power_hot_water / cop_hot_water;
313
314 return check_power_and_flow_rate(flow_rate,
315 power,
317 density,
318 T_out,
320 power_min);
321 }
325
327 double density;
329 double power_min;
330 static constexpr bool is_power_bc = true;
331};
332
334{
335 FlowAndTemperature operator()(double const T_out, double const time) const
336 {
337 double const power_heating =
339 double const cop_heating =
341
342 double const power_cooling =
344 double const cop_cooling =
346
347 double const flow_rate = flow_curve.getValue(time);
348
349 double const power = power_heating - power_heating / cop_heating +
350 power_cooling - power_cooling / cop_cooling;
351
352 return check_power_and_flow_rate(flow_rate,
353 power,
355 density,
356 T_out,
358 power_min);
359 }
363
365 double density;
367 double power_min;
368 static constexpr bool is_power_bc = true;
369};
370
372{
373 FlowAndTemperature operator()(double const T_out, double const time) const
374 {
375 double const power_heating =
377 double const cop_heating =
379
380 double const power_cooling = cooling_power.getValue(time);
381
382 double const flow_rate = flow_curve.getValue(time);
383
384 double const power =
385 power_heating - power_heating / cop_heating + power_cooling;
386
387 return check_power_and_flow_rate(flow_rate,
388 power,
390 density,
391 T_out,
393 power_min);
394 }
398
400 double density;
402 double power_min;
403 static constexpr bool is_power_bc = true;
404};
405
407{
408 FlowAndTemperature operator()(double const T_out, double const time) const
409 {
410 double const power_heating =
412 double const cop_heating =
414
415 double const flow_rate = flow_curve.getValue(time);
416
417 double const power = power_heating - power_heating / cop_heating;
418
419 return check_power_and_flow_rate(flow_rate,
420 power,
422 density,
423 T_out,
425 power_min);
426 }
429
431 double density;
433 double power_min;
434 static constexpr bool is_power_bc = true;
435};
436
438{
439 FlowAndTemperature operator()(double const T_out, double const time) const
440 {
441 double const power_cooling =
443 double const cop_cooling =
445
446 double const flow_rate = flow_curve.getValue(time);
447
448 double const power = power_cooling - power_cooling / cop_cooling;
449
450 return check_power_and_flow_rate(flow_rate,
451 power,
453 density,
454 T_out,
456 power_min);
457 }
460
462 double density;
464 double power_min;
465 static constexpr bool is_power_bc = true;
466};
467
469 std::variant<TemperatureCurveConstantFlow,
483} // namespace BHE
484} // namespace HeatTransportBHE
485} // namespace ProcessLib
#define OGS_FATAL(...)
Definition Error.h:26
Definition of the PiecewiseLinearInterpolation class.
double getValue(double pnt_to_interpolate) const
Calculates the interpolation value.
std::variant< TemperatureCurveConstantFlow, TemperatureCurveFlowCurve, FixedPowerConstantFlow, FixedPowerFlowCurve, PowerCurveConstantFlow, PowerCurveFlowCurve, BuildingPowerCurveConstantFlow, BuildingPowerCurveHotWaterCurveActiveCoolingCurveFlowCurve, BuildingPowerCurveHotWaterCurvePassiveCoolingCurveFlowCurve, BuildingPowerCurveHotWaterCurveFlowCurve, BuildingPowerCurveActiveCoolingCurveFlowCurve, BuildingPowerCurvePassiveCoolingCurveFlowCurve, BuildingPowerCurveFlowCurve, ActiveCoolingCurveFlowCurve > FlowAndTemperatureControl
FlowAndTemperature check_power_and_flow_rate(double flow_rate, double power, double heat_capacity, double density, double T_out, double flow_rate_min, double power_min)
FlowAndTemperature operator()(double const T_out, double const time) const
FlowAndTemperature operator()(double const T_out, double const time) const
FlowAndTemperature operator()(double const T_out, double const time) const
FlowAndTemperature operator()(double const T_out, double const time) const
FlowAndTemperature operator()(double const T_out, double const time) const
FlowAndTemperature operator()(double const T_out, double const time) const
MathLib::PiecewiseLinearInterpolation const & cop_curve
MathLib::PiecewiseLinearInterpolation const & power_curve
FlowAndTemperature operator()(double const T_out, double const) const
MathLib::PiecewiseLinearInterpolation const & flow_curve
FlowAndTemperature operator()(double const T_out, double const time) const
FlowAndTemperature operator()(double const T_out, double const time) const
MathLib::PiecewiseLinearInterpolation const & power_curve
MathLib::PiecewiseLinearInterpolation const & power_curve
FlowAndTemperature operator()(double const T_out, double const time) const
MathLib::PiecewiseLinearInterpolation const & flow_curve
FlowAndTemperature operator()(double const, double const time) const
MathLib::PiecewiseLinearInterpolation const & flow_rate_curve
MathLib::PiecewiseLinearInterpolation const & temperature_curve
FlowAndTemperature operator()(double const, double const time) const