19 std::optional<BaseLib::ConfigTree>
const& config,
21 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
const&
28 config->getConfigParameter<std::string>(
"power_curve"),
29 "Required power curve not found.");
36 config->getConfigParameter<std::string>(
"cop_curve"),
37 "Required cop curve not found.");
43 std::optional<BaseLib::ConfigTree>
const& cooling_config,
45 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
const&
49 cooling_config->getConfigParameter<
bool>(
"active",
false))
58 cooling_config->getConfigParameter<std::string>(
"power_curve"),
59 "Required cooling power curve not found."));
64 std::optional<BuildingPowerCurves>
const& heating,
65 std::optional<BuildingPowerCurves>
const& hot_water,
66 std::optional<CoolingVariant>
const& cooling,
69 double const flow_rate_min,
70 double const power_min)
72 if (std::holds_alternative<BuildingPowerCurves>(*cooling))
79 std::get<BuildingPowerCurves>(*cooling),
94 std::reference_wrapper<MathLib::PiecewiseLinearInterpolation>>(
106 std::optional<BuildingPowerCurves>
const& heating,
107 std::optional<BuildingPowerCurves>
const& ,
108 std::optional<CoolingVariant>
const& cooling,
111 double const flow_rate_min,
112 double const power_min)
114 if (std::holds_alternative<BuildingPowerCurves>(*cooling))
117 std::in_place_type<BuildingPowerCurveActiveCoolingCurveFlowCurve>,
119 std::get<BuildingPowerCurves>(*cooling),
129 std::in_place_type<BuildingPowerCurvePassiveCoolingCurveFlowCurve>,
132 std::reference_wrapper<MathLib::PiecewiseLinearInterpolation>>(
144 std::optional<BuildingPowerCurves>
const& ,
145 std::optional<BuildingPowerCurves>
const& hot_water,
146 std::optional<CoolingVariant>
const& cooling,
149 double const flow_rate_min,
150 double const power_min)
152 if (std::holds_alternative<BuildingPowerCurves>(*cooling))
155 std::in_place_type<BuildingPowerCurveActiveCoolingCurveFlowCurve>,
157 std::get<BuildingPowerCurves>(*cooling),
167 std::in_place_type<BuildingPowerCurvePassiveCoolingCurveFlowCurve>,
170 std::reference_wrapper<MathLib::PiecewiseLinearInterpolation>>(
182 std::optional<BuildingPowerCurves>
const& ,
183 std::optional<BuildingPowerCurves>
const& ,
184 std::optional<CoolingVariant>
const& cooling,
187 double const flow_rate_min,
188 double const power_min)
190 if (std::holds_alternative<BuildingPowerCurves>(*cooling))
193 std::in_place_type<ActiveCoolingCurveFlowCurve>,
194 std::get<BuildingPowerCurves>(*cooling),
204 std::in_place_type<PowerCurveFlowCurve>,
206 std::reference_wrapper<MathLib::PiecewiseLinearInterpolation>>(
219 std::optional<BuildingPowerCurves>,
220 std::optional<BuildingPowerCurves>,
221 std::optional<CoolingVariant>,
227const std::map<std::tuple<bool, bool, bool>,
232 {{
true,
true,
false},
233 [](std::optional<BuildingPowerCurves>
const& heating,
234 std::optional<BuildingPowerCurves>
const& hot_water,
235 std::optional<CoolingVariant>
const& ,
236 auto const& flow_rate_curve,
auto const& refrigerant,
237 auto const flow_rate_min,
auto const power_min)
240 std::in_place_type<BuildingPowerCurveHotWaterCurveFlowCurve>,
244 refrigerant.specific_heat_capacity,
251 {{
true,
false,
false},
252 [](std::optional<BuildingPowerCurves>
const& heating,
253 std::optional<BuildingPowerCurves>
const& ,
254 std::optional<CoolingVariant>
const& ,
255 auto const& flow_rate_curve,
auto const& refrigerant,
256 auto const flow_rate_min,
auto const power_min)
259 std::in_place_type<BuildingPowerCurveFlowCurve>,
262 refrigerant.specific_heat_capacity,
267 {{
false,
true,
false},
268 [](std::optional<BuildingPowerCurves>
const& ,
269 std::optional<BuildingPowerCurves>
const& hot_water,
270 std::optional<CoolingVariant>
const& ,
271 auto const& flow_rate_curve,
auto const& refrigerant,
272 auto const flow_rate_min,
auto const power_min)
275 std::in_place_type<BuildingPowerCurveFlowCurve>,
278 refrigerant.specific_heat_capacity,
286 std::optional<BaseLib::ConfigTree>
const& heating_config,
287 std::optional<BaseLib::ConfigTree>
const& hot_water_config,
288 std::optional<BaseLib::ConfigTree>
const& cooling_config,
289 std::map<std::string,
290 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
const&
294 double const flow_rate_min,
295 double const power_min)
297 std::optional<BuildingPowerCurves> building_heating_curves;
298 std::optional<BuildingPowerCurves> building_hot_water_curves;
299 std::optional<CoolingVariant> building_cooling_curves;
301 bool heating =
false;
302 bool hot_water =
false;
303 bool cooling =
false;
307 building_heating_curves.emplace(
311 if (hot_water_config)
313 building_hot_water_curves.emplace(
319 building_cooling_curves.emplace(
323 auto key = std::make_tuple(heating, hot_water, cooling);
328 "AdvancedBuildingPowerCurvesFlowCurve combination is not "
330 auto factory = it->second;
332 return factory(building_heating_curves,
333 building_hot_water_curves,
334 building_cooling_curves,
342 std::map<std::string,
343 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
const&
350 auto const flow_rate_min =
355 if (type ==
"TemperatureCurveConstantFlow")
364 "Required temperature curve not found.");
369 if (type ==
"TemperatureCurveFlowCurve")
375 "Required flow curve not found.");
381 "Required temperature curve not found.");
386 if (type ==
"FixedPowerConstantFlow")
402 if (type ==
"FixedPowerFlowCurve")
408 "Required flow rate curve not found.");
421 if (type ==
"PowerCurveConstantFlow")
427 "Required power curve not found.");
440 if (type ==
"PowerCurveFlowCurve")
446 "Required power curve not found.");
452 "Required flow rate curve not found.");
462 if (type ==
"BuildingPowerCurveConstantFlow")
468 "Required power curve not found.");
474 "Required power curve not found.");
483 building_power_curves,
491 if (type ==
"AdvancedBuildingPowerCurvesFlowCurve")
495 auto const& heating_config =
501 auto const& hot_water_config =
507 auto const& cooling_config =
516 "Required flow rate curve not found.");
527 OGS_FATAL(
"FlowAndTemperatureControl type '{:s}' is not implemented.",
std::optional< ConfigTree > getConfigSubtreeOptional(std::string const &root) const
T getConfigParameter(std::string const ¶m) const
OGS_NO_DANGLING Map::mapped_type & getOrError(Map &map, Key const &key, std::string const &error_message)
const std::map< std::tuple< bool, bool, bool >, FactoryAdvancedBuildingCurvesFlowCurve > advancedBuildingPowerCurvesFlowCurve
FlowAndTemperatureControl createHotWaterCooling(std::optional< BuildingPowerCurves > const &, std::optional< BuildingPowerCurves > const &hot_water, std::optional< CoolingVariant > const &cooling, MathLib::PiecewiseLinearInterpolation const &flow_rate_curve, RefrigerantProperties const &refrigerant, double const flow_rate_min, double const power_min)
std::variant< TemperatureCurveConstantFlow, TemperatureCurveFlowCurve, FixedPowerConstantFlow, FixedPowerFlowCurve, PowerCurveConstantFlow, PowerCurveFlowCurve, BuildingPowerCurveConstantFlow, BuildingPowerCurveHotWaterCurveActiveCoolingCurveFlowCurve, BuildingPowerCurveHotWaterCurvePassiveCoolingCurveFlowCurve, BuildingPowerCurveHotWaterCurveFlowCurve, BuildingPowerCurveActiveCoolingCurveFlowCurve, BuildingPowerCurvePassiveCoolingCurveFlowCurve, BuildingPowerCurveFlowCurve, ActiveCoolingCurveFlowCurve > FlowAndTemperatureControl
FlowAndTemperatureControl createCooling(std::optional< BuildingPowerCurves > const &, std::optional< BuildingPowerCurves > const &, std::optional< CoolingVariant > const &cooling, MathLib::PiecewiseLinearInterpolation const &flow_rate_curve, RefrigerantProperties const &refrigerant, double const flow_rate_min, double const power_min)
FlowAndTemperatureControl createAdvancedBuildingPowerCurvesFlowCurve(std::optional< BaseLib::ConfigTree > const &heating_config, std::optional< BaseLib::ConfigTree > const &hot_water_config, std::optional< BaseLib::ConfigTree > const &cooling_config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves, MathLib::PiecewiseLinearInterpolation const &flow_rate_curve, RefrigerantProperties const &refrigerant, double const flow_rate_min, double const power_min)
FlowAndTemperatureControl createFlowAndTemperatureControl(BaseLib::ConfigTree const &config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves, RefrigerantProperties const &refrigerant)
std::function< FlowAndTemperatureControl( std::optional< BuildingPowerCurves >, std::optional< BuildingPowerCurves >, std::optional< CoolingVariant >, MathLib::PiecewiseLinearInterpolation const &, RefrigerantProperties const &, double const, double const)> FactoryAdvancedBuildingCurvesFlowCurve
FlowAndTemperatureControl createHeatingHotWaterCooling(std::optional< BuildingPowerCurves > const &heating, std::optional< BuildingPowerCurves > const &hot_water, std::optional< CoolingVariant > const &cooling, MathLib::PiecewiseLinearInterpolation const &flow_rate_curve, RefrigerantProperties const &refrigerant, double const flow_rate_min, double const power_min)
BuildingPowerCurves createBuildingPowerCurvesStruct(std::optional< BaseLib::ConfigTree > const &config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
FlowAndTemperatureControl createHeatingCooling(std::optional< BuildingPowerCurves > const &heating, std::optional< BuildingPowerCurves > const &, std::optional< CoolingVariant > const &cooling, MathLib::PiecewiseLinearInterpolation const &flow_rate_curve, RefrigerantProperties const &refrigerant, double const flow_rate_min, double const power_min)
std::variant< BuildingPowerCurves, std::reference_wrapper< MathLib::PiecewiseLinearInterpolation > > CoolingVariant
CoolingVariant createCoolingVariant(std::optional< BaseLib::ConfigTree > const &cooling_config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
double const specific_heat_capacity