OGS
CreateFlowAndTemperatureControl.cpp
Go to the documentation of this file.
1 
12 
13 #include "BaseLib/Algorithm.h"
14 #include "BaseLib/ConfigTree.h"
15 #include "BuildingPowerCurves.h"
17 #include "RefrigerantProperties.h"
18 
19 namespace ProcessLib
20 {
21 namespace HeatTransportBHE
22 {
23 namespace BHE
24 {
26  BaseLib::ConfigTree const& config,
27  std::map<std::string,
28  std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
29  curves,
30  RefrigerantProperties const& refrigerant)
31 {
33  auto const type = config.getConfigParameter<std::string>("type");
34  if (type == "TemperatureCurveConstantFlow")
35  {
37  auto const flow_rate = config.getConfigParameter<double>("flow_rate");
38 
39  auto const& temperature_curve = *BaseLib::getOrError(
40  curves,
42  config.getConfigParameter<std::string>("temperature_curve"),
43  "Required temperature curve not found.");
44 
45  return TemperatureCurveConstantFlow{flow_rate, temperature_curve};
46  }
47  if (type == "TemperatureCurveFlowCurve")
48  {
49  auto const& flow_rate_curve = *BaseLib::getOrError(
50  curves,
52  config.getConfigParameter<std::string>("flow_rate_curve"),
53  "Required flow curve not found.");
54 
55  auto const& temperature_curve = *BaseLib::getOrError(
56  curves,
58  config.getConfigParameter<std::string>("temperature_curve"),
59  "Required temperature curve not found.");
60 
61  return TemperatureCurveFlowCurve{flow_rate_curve, temperature_curve};
62  }
63  if (type == "FixedPowerConstantFlow")
64  {
66  auto const power = config.getConfigParameter<double>("power");
67 
69  auto const flow_rate = config.getConfigParameter<double>("flow_rate");
70  return FixedPowerConstantFlow{flow_rate, power,
71  refrigerant.specific_heat_capacity,
72  refrigerant.density};
73  }
74 
75  if (type == "FixedPowerFlowCurve")
76  {
77  auto const& flow_rate_curve = *BaseLib::getOrError(
78  curves,
80  config.getConfigParameter<std::string>("flow_rate_curve"),
81  "Required flow rate curve not found.");
82 
84  auto const power = config.getConfigParameter<double>("power");
85 
86  return FixedPowerFlowCurve{flow_rate_curve, power,
87  refrigerant.specific_heat_capacity,
88  refrigerant.density};
89  }
90 
91  if (type == "PowerCurveConstantFlow")
92  {
93  auto const& power_curve = *BaseLib::getOrError(
94  curves,
96  config.getConfigParameter<std::string>("power_curve"),
97  "Required power curve not found.");
98 
100  auto const flow_rate = config.getConfigParameter<double>("flow_rate");
101 
102  return PowerCurveConstantFlow{power_curve, flow_rate,
103  refrigerant.specific_heat_capacity,
104  refrigerant.density};
105  }
106 
107  if (type == "BuildingPowerCurveConstantFlow")
108  {
109  auto const& power_curve = *BaseLib::getOrError(
110  curves,
112  config.getConfigParameter<std::string>("power_curve"),
113  "Required power curve not found.");
114 
115  auto const& cop_heating_curve = *BaseLib::getOrError(
116  curves,
118  config.getConfigParameter<std::string>("cop_heating_curve"),
119  "Required power curve not found.");
120 
121  BuildingPowerCurves const building_power_curves{power_curve,
122  cop_heating_curve};
123 
125  auto const flow_rate = config.getConfigParameter<double>("flow_rate");
126 
128  building_power_curves, flow_rate,
129  refrigerant.specific_heat_capacity, refrigerant.density};
130  }
131  OGS_FATAL("FlowAndTemperatureControl type '{:s}' is not implemented.",
132  type);
133 }
134 } // namespace BHE
135 } // namespace HeatTransportBHE
136 } // namespace ProcessLib
#define OGS_FATAL(...)
Definition: Error.h:26
Definition of the PiecewiseLinearInterpolation class.
T getConfigParameter(std::string const &param) const
Map::mapped_type & getOrError(Map &map, Key const &key, std::string const &error_message)
Definition: Algorithm.h:147
FlowAndTemperatureControl createFlowAndTemperatureControl(BaseLib::ConfigTree const &config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation >> const &curves, RefrigerantProperties const &refrigerant)
std::variant< TemperatureCurveConstantFlow, TemperatureCurveFlowCurve, FixedPowerConstantFlow, FixedPowerFlowCurve, PowerCurveConstantFlow, BuildingPowerCurveConstantFlow > FlowAndTemperatureControl