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."));
68 std::optional<BuildingPowerCurves>
const& heating,
69 std::optional<BuildingPowerCurves>
const& hot_water,
70 std::optional<CoolingVariant>
const& cooling,
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>>(
110 std::optional<BuildingPowerCurves>
const& heating,
111 std::optional<BuildingPowerCurves>
const& ,
112 std::optional<CoolingVariant>
const& cooling,
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>>(
148 std::optional<BuildingPowerCurves>
const& ,
149 std::optional<BuildingPowerCurves>
const& hot_water,
150 std::optional<CoolingVariant>
const& cooling,
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>>(
186 std::optional<BuildingPowerCurves>
const& ,
187 std::optional<BuildingPowerCurves>
const& ,
188 std::optional<CoolingVariant>
const& cooling,
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>>(
223 std::optional<BuildingPowerCurves>,
224 std::optional<BuildingPowerCurves>,
225 std::optional<CoolingVariant>,
231const std::map<std::tuple<bool, bool, bool>,
236 {{
true,
true,
false},
237 [](std::optional<BuildingPowerCurves>
const& heating,
238 std::optional<BuildingPowerCurves>
const& hot_water,
239 std::optional<CoolingVariant>
const& ,
240 auto const& flow_rate_curve,
auto const& refrigerant,
241 auto const flow_rate_min,
auto const power_min)
244 std::in_place_type<BuildingPowerCurveHotWaterCurveFlowCurve>,
248 refrigerant.specific_heat_capacity,
255 {{
true,
false,
false},
256 [](std::optional<BuildingPowerCurves>
const& heating,
257 std::optional<BuildingPowerCurves>
const& ,
258 std::optional<CoolingVariant>
const& ,
259 auto const& flow_rate_curve,
auto const& refrigerant,
260 auto const flow_rate_min,
auto const power_min)
263 std::in_place_type<BuildingPowerCurveFlowCurve>,
266 refrigerant.specific_heat_capacity,
271 {{
false,
true,
false},
272 [](std::optional<BuildingPowerCurves>
const& ,
273 std::optional<BuildingPowerCurves>
const& hot_water,
274 std::optional<CoolingVariant>
const& ,
275 auto const& flow_rate_curve,
auto const& refrigerant,
276 auto const flow_rate_min,
auto const power_min)
279 std::in_place_type<BuildingPowerCurveFlowCurve>,
282 refrigerant.specific_heat_capacity,
290 std::optional<BaseLib::ConfigTree>
const& heating_config,
291 std::optional<BaseLib::ConfigTree>
const& hot_water_config,
292 std::optional<BaseLib::ConfigTree>
const& cooling_config,
293 std::map<std::string,
294 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
const&
298 double const flow_rate_min,
299 double const power_min)
301 std::optional<BuildingPowerCurves> building_heating_curves;
302 std::optional<BuildingPowerCurves> building_hot_water_curves;
303 std::optional<CoolingVariant> building_cooling_curves;
305 bool heating =
false;
306 bool hot_water =
false;
307 bool cooling =
false;
311 building_heating_curves.emplace(
315 if (hot_water_config)
317 building_hot_water_curves.emplace(
323 building_cooling_curves.emplace(
327 auto key = std::make_tuple(heating, hot_water, cooling);
332 "AdvancedBuildingPowerCurvesFlowCurve combination is not "
334 auto factory = it->second;
336 return factory(building_heating_curves,
337 building_hot_water_curves,
338 building_cooling_curves,
346 std::map<std::string,
347 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
const&
354 auto const flow_rate_min =
359 if (type ==
"TemperatureCurveConstantFlow")
368 "Required temperature curve not found.");
373 if (type ==
"TemperatureCurveFlowCurve")
379 "Required flow curve not found.");
385 "Required temperature curve not found.");
390 if (type ==
"FixedPowerConstantFlow")
406 if (type ==
"FixedPowerFlowCurve")
412 "Required flow rate curve not found.");
425 if (type ==
"PowerCurveConstantFlow")
431 "Required power curve not found.");
444 if (type ==
"PowerCurveFlowCurve")
450 "Required power curve not found.");
456 "Required flow rate curve not found.");
466 if (type ==
"AdvancedBuildingPowerCurvesFlowCurve")
470 auto const& heating_config =
476 auto const& hot_water_config =
482 auto const& cooling_config =
491 "Required flow rate curve not found.");
502 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 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