21namespace HeatTransportBHE
26 std::optional<BaseLib::ConfigTree>
const& config,
28 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
const&
34 config->getConfigParameter<std::string>(
"power_curve"),
35 "Required power curve not found.");
40 config->getConfigParameter<std::string>(
"cop_curve"),
41 "Required cop curve not found.");
47 std::optional<BaseLib::ConfigTree>
const& cooling_config,
49 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
const&
53 cooling_config->getConfigParameter<
bool>(
"active",
false))
62 cooling_config->getConfigParameter<std::string>(
"power_curve"),
63 "Required cooling power curve not found."));
73 double const flow_rate_min,
74 double const power_min)
76 if (std::holds_alternative<BuildingPowerCurves>(cooling))
83 std::get<BuildingPowerCurves>(cooling),
98 std::reference_wrapper<MathLib::PiecewiseLinearInterpolation>>(
115 double const flow_rate_min,
116 double const power_min)
118 if (std::holds_alternative<BuildingPowerCurves>(cooling))
121 std::in_place_type<BuildingPowerCurveActiveCoolingCurveFlowCurve>,
123 std::get<BuildingPowerCurves>(cooling),
133 std::in_place_type<BuildingPowerCurvePassiveCoolingCurveFlowCurve>,
136 std::reference_wrapper<MathLib::PiecewiseLinearInterpolation>>(
153 double const flow_rate_min,
154 double const power_min)
156 if (std::holds_alternative<BuildingPowerCurves>(cooling))
159 std::in_place_type<BuildingPowerCurveActiveCoolingCurveFlowCurve>,
161 std::get<BuildingPowerCurves>(cooling),
171 std::in_place_type<BuildingPowerCurvePassiveCoolingCurveFlowCurve>,
174 std::reference_wrapper<MathLib::PiecewiseLinearInterpolation>>(
191 double const flow_rate_min,
192 double const power_min)
194 if (std::holds_alternative<BuildingPowerCurves>(cooling))
197 std::in_place_type<ActiveCoolingCurveFlowCurve>,
198 std::get<BuildingPowerCurves>(cooling),
208 std::in_place_type<PowerCurveFlowCurve>,
210 std::reference_wrapper<MathLib::PiecewiseLinearInterpolation>>(
231const std::map<std::tuple<bool, bool, bool>,
236 {{
true,
true,
false},
237 [](
auto const& heating,
auto const& hot_water,
auto const& ,
238 auto const& flow_rate_curve,
auto const& refrigerant,
239 auto const flow_rate_min,
auto const power_min)
242 std::in_place_type<BuildingPowerCurveHotWaterCurveFlowCurve>,
246 refrigerant.specific_heat_capacity,
253 {{
true,
false,
false},
254 [](
auto const& heating,
auto const& ,
255 auto const& ,
auto const& flow_rate_curve,
256 auto const& refrigerant,
auto const flow_rate_min,
257 auto const power_min)
260 std::in_place_type<BuildingPowerCurveFlowCurve>,
263 refrigerant.specific_heat_capacity,
268 {{
false,
true,
false},
269 [](
auto const& ,
auto const& hot_water,
270 auto const& ,
auto const& flow_rate_curve,
271 auto const& refrigerant,
auto const flow_rate_min,
272 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 ==
"AdvancedBuildingPowerCurvesFlowCurve")
466 auto const& heating_config =
472 auto const& hot_water_config =
478 auto const& cooling_config =
487 "Required flow rate curve not found.");
498 OGS_FATAL(
"FlowAndTemperatureControl type '{:s}' is not implemented.",
Definition of the PiecewiseLinearInterpolation class.
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 createCooling(BuildingPowerCurves const &, BuildingPowerCurves const &, 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 createHeatingHotWaterCooling(BuildingPowerCurves const &heating, BuildingPowerCurves const &hot_water, CoolingVariant const &cooling, MathLib::PiecewiseLinearInterpolation const &flow_rate_curve, RefrigerantProperties const &refrigerant, double const flow_rate_min, double const power_min)
FlowAndTemperatureControl createHotWaterCooling(BuildingPowerCurves const &, BuildingPowerCurves const &hot_water, CoolingVariant const &cooling, MathLib::PiecewiseLinearInterpolation const &flow_rate_curve, RefrigerantProperties const &refrigerant, double const flow_rate_min, double const power_min)
FlowAndTemperatureControl createHeatingCooling(BuildingPowerCurves const &heating, BuildingPowerCurves const &, 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)
BuildingPowerCurves createBuildingPowerCurvesStruct(std::optional< BaseLib::ConfigTree > const &config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
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)
std::function< FlowAndTemperatureControl( BuildingPowerCurves const &, BuildingPowerCurves const &, CoolingVariant const &, MathLib::PiecewiseLinearInterpolation const &, RefrigerantProperties const &, double const, double const)> FactoryAdvancedBuildingCurvesFlowCurve
double const specific_heat_capacity