TransFlow  0.1.0
A transient pipeline flow simulation library
boundaryconditions.hpp
1 #pragma once
2 
3 #include <ostream>
4 #include <vector>
5 #include <string>
6 #include <armadillo>
7 
8 #include "composition.hpp"
9 
10 class Pipeline;
11 
28 {
29 public:
34 
45  explicit BoundaryConditions(
46  const arma::mat& boundaryConditionMat,
49 
63  const double inletFlow,
64  const double outletFlow,
65  const double inletPressure,
66  const double outletPressure,
67  const double inletTemperature,
68  const double outletTemperature,
71 
79  explicit BoundaryConditions(
80  const Pipeline& pipeline,
81  const std::vector<std::string>& boundarySettings = {"inlet", "outlet", "inlet"});
82 
90  void setBoundarySettings(const std::vector<std::string>& strings);
91 
93  arma::uword nActiveBoundaryConditions() const;
94 
95  // getters
96  inline const auto& inletFlow() const { return m_inletFlow; }
97  inline const auto& outletFlow() const { return m_outletFlow; }
98 
99  inline const auto& inletPressure() const { return m_inletPressure; }
100  inline const auto& outletPressure() const { return m_outletPressure; }
101 
102  inline const auto& inletTemperature() const { return m_inletTemperature; }
103  inline const auto& outletTemperature() const { return m_outletTemperature; }
104 
105  inline const Composition& inletComposition() const { return m_inletComposition; }
106  inline const Composition& outletComposition() const { return m_outletComposition; }
107 
108  // setters
109  inline auto& inletFlow() { return m_inletFlow; }
110  inline auto& outletFlow() { return m_outletFlow; }
111 
112  inline auto& inletPressure() { return m_inletPressure; }
113  inline auto& outletPressure() { return m_outletPressure; }
114 
115  inline auto& inletTemperature() { return m_inletTemperature; }
116  inline auto& outletTemperature() { return m_outletTemperature; }
117 
120 
125  inline const auto& inlet(const arma::uword i) const
126  {
127  if (i == 0)
128  return inletFlow();
129  else if (i == 1)
130  return inletPressure();
131  else if (i == 2)
132  return inletTemperature();
133  else
134  throw std::runtime_error("invalid index i");
135  }
136 
141  inline const auto& outlet(const arma::uword i) const
142  {
143  if (i == 0)
144  return outletFlow();
145  else if (i == 1)
146  return outletPressure();
147  else if (i == 2)
148  return outletTemperature();
149  else
150  throw std::runtime_error("invalid index i");
151  }
152 
157  friend std::ostream& operator << (std::ostream &out, const BoundaryConditions& c);
158 
166  {
167  public:
168  friend class BoundaryConditions;
169 
175  SingleCondition(const double value, const bool active):
176  m_value(value),
177  m_isActive(active)
178  {}
179 
181  inline operator double() const { return m_value; }
182 
184  inline operator double() { return m_value; }
185 
187  double value() const { return m_value; }
188 
190  double value() { return m_value; }
191 
193  bool isActive() const { return m_isActive; }
194 
196  bool isActive() { return m_isActive; }
197 
198  private:
200  void setActive(const bool active) { m_isActive = active; }
201 
202  double m_value;
203  bool m_isActive;
204  };
205 
227 
228 private:
235 
238 
240  void setBoundarySettings(const arma::uword i, const std::string& setting)
241  {
242  if (setting == "none")
243  {
244  this->inlet(i).setActive(false);
245  this->outlet(i).setActive(false);
246  }
247  else if (setting == "inlet")
248  {
249  this->inlet(i).setActive(true);
250  this->outlet(i).setActive(false);
251  }
252  else if (setting == "outlet")
253  {
254  this->inlet(i).setActive(false);
255  this->outlet(i).setActive(true);
256  }
257  else if (setting == "both")
258  {
259  this->inlet(i).setActive(true);
260  this->outlet(i).setActive(true);
261  }
262  else
263  {
264  throw std::runtime_error("invalid setting \"" + setting + "\"");
265  }
266  }
267 
272  inline SingleCondition& inlet(const arma::uword i)
273  {
274  if (i == 0)
275  return inletFlow();
276  else if (i == 1)
277  return inletPressure();
278  else if (i == 2)
279  return inletTemperature();
280  else
281  throw std::runtime_error("invalid index i");
282  }
283 
288  inline SingleCondition& outlet(const arma::uword i)
289  {
290  if (i == 0)
291  return outletFlow();
292  else if (i == 1)
293  return outletPressure();
294  else if (i == 2)
295  return outletTemperature();
296  else
297  throw std::runtime_error("invalid index i");
298  }
299 };
300 
306 {
307 public:
314  const arma::uword timestamp,
315  const BoundaryConditions& boundaryConditions):
316  BoundaryConditions(boundaryConditions),
318  {}
319 
321  arma::uword timestamp() const { return m_timestamp; }
322 
323 private:
324  arma::uword m_timestamp;
325 };
326 
BoundaryConditions::outlet
const auto & outlet(const arma::uword i) const
Definition: boundaryconditions.hpp:141
BoundaryConditions::inletFlow
auto & inletFlow()
Get inlet flow [kg/s].
Definition: boundaryconditions.hpp:109
BoundaryConditions::outletTemperature
auto & outletTemperature()
Get outlet temperature [k].
Definition: boundaryconditions.hpp:116
BoundaryConditions::SingleCondition::m_isActive
bool m_isActive
If the condition is active or not.
Definition: boundaryconditions.hpp:203
BoundaryConditions::SingleCondition::isActive
bool isActive()
If the condition is active or not.
Definition: boundaryconditions.hpp:196
BoundaryConditions::m_outletTemperature
SingleCondition m_outletTemperature
Outlet temperature [K].
Definition: boundaryconditions.hpp:234
BoundaryConditions::BoundaryConditions
BoundaryConditions()
BoundaryConditions with no properties set.
BoundaryConditions::m_outletPressure
SingleCondition m_outletPressure
Outlet presure [Pa].
Definition: boundaryconditions.hpp:233
BoundaryConditions::SingleCondition::setActive
void setActive(const bool active)
Set the active state of the condition.
Definition: boundaryconditions.hpp:200
BoundaryConditions::m_inletTemperature
SingleCondition m_inletTemperature
Inlet temperature [K].
Definition: boundaryconditions.hpp:231
BoundaryConditions::inletPressure
const auto & inletPressure() const
Get inlet pressure [Pa].
Definition: boundaryconditions.hpp:99
BoundaryConditions::m_outletComposition
Composition m_outletComposition
Outlet Composition [fraction].
Definition: boundaryconditions.hpp:237
BoundaryConditions::SingleCondition::isActive
bool isActive() const
If the condition is active or not.
Definition: boundaryconditions.hpp:193
BoundaryConditions::inletComposition
const Composition & inletComposition() const
Get inlet Composition.
Definition: boundaryconditions.hpp:105
Pipeline
Definition: pipeline.hpp:16
BoundaryConditions::SingleCondition::m_value
double m_value
The value at the boundary.
Definition: boundaryconditions.hpp:202
TimeStep::TimeStep
TimeStep(const arma::uword timestamp, const BoundaryConditions &boundaryConditions)
Construct from timestamp and BoundaryConditions instance.
Definition: boundaryconditions.hpp:313
BoundaryConditions::SingleCondition::value
double value()
Get the value.
Definition: boundaryconditions.hpp:190
BoundaryConditions::inletFlow
const auto & inletFlow() const
Get inlet flow [kg/s].
Definition: boundaryconditions.hpp:96
Composition::defaultComposition
static const Composition defaultComposition
Default composition.
Definition: composition.hpp:81
BoundaryConditions::outletPressure
auto & outletPressure()
Get outlet pressure [Pa].
Definition: boundaryconditions.hpp:113
BoundaryConditions::outletFlow
const auto & outletFlow() const
Get outlet flow [kg/s].
Definition: boundaryconditions.hpp:97
BoundaryConditions::outletComposition
const Composition & outletComposition() const
Get outlet Composition.
Definition: boundaryconditions.hpp:106
BoundaryConditions::outlet
SingleCondition & outlet(const arma::uword i)
Definition: boundaryconditions.hpp:288
BoundaryConditions::setBoundarySettings
void setBoundarySettings(const std::vector< std::string > &strings)
Set boundary settings via vector of string, or brace-init-list like {"inlet", "outlet",...
BoundaryConditions::inlet
const auto & inlet(const arma::uword i) const
Definition: boundaryconditions.hpp:125
TimeStep::m_timestamp
arma::uword m_timestamp
Timestamp [s].
Definition: boundaryconditions.hpp:324
BoundaryConditions::m_inletPressure
SingleCondition m_inletPressure
Inlet pressure [Pa].
Definition: boundaryconditions.hpp:230
BoundaryConditions::inletComposition
Composition & inletComposition()
Inlet Composition setter.
Definition: boundaryconditions.hpp:118
BoundaryConditions::inlet
SingleCondition & inlet(const arma::uword i)
Definition: boundaryconditions.hpp:272
BoundaryConditions::inletTemperature
auto & inletTemperature()
Get inlet temperature [K].
Definition: boundaryconditions.hpp:115
TimeStep
The TimeStep class is a subclass of BoundaryConditions with an extra member to store the timestamp of...
Definition: boundaryconditions.hpp:305
BoundaryConditions::inletTemperature
const auto & inletTemperature() const
Get inlet temperature [K].
Definition: boundaryconditions.hpp:102
BoundaryConditions::setBoundarySettings
void setBoundarySettings(const arma::uword i, const std::string &setting)
Set a single boundary setting (private)
Definition: boundaryconditions.hpp:240
BoundaryConditions::m_inletComposition
Composition m_inletComposition
Inlet Composition [fraction].
Definition: boundaryconditions.hpp:236
BoundaryConditions::outletFlow
auto & outletFlow()
Get outlet flow [kg/s].
Definition: boundaryconditions.hpp:110
BoundaryConditions::outletComposition
Composition & outletComposition()
Outlet Composition setter.
Definition: boundaryconditions.hpp:119
BoundaryConditions::inletPressure
auto & inletPressure()
Get inlet pressure [Pa].
Definition: boundaryconditions.hpp:112
Composition
The Composition class is a simple container class for the composition of natural gas....
Definition: composition.hpp:17
BoundaryConditions::operator<<
friend std::ostream & operator<<(std::ostream &out, const BoundaryConditions &c)
Overload the ostream::operator<< so we can do "cout << bc" and get nice print of the boundary conditi...
BoundaryConditions::m_outletFlow
SingleCondition m_outletFlow
Outlet flow [kg/s].
Definition: boundaryconditions.hpp:232
BoundaryConditions::outletTemperature
const auto & outletTemperature() const
Get outlet temperature [k].
Definition: boundaryconditions.hpp:103
BoundaryConditions::SingleCondition::SingleCondition
SingleCondition(const double value, const bool active)
Construct from value and isActive bool.
Definition: boundaryconditions.hpp:175
BoundaryConditions::SingleCondition::value
double value() const
Get the value.
Definition: boundaryconditions.hpp:187
BoundaryConditions::outletPressure
const auto & outletPressure() const
Get outlet pressure [Pa].
Definition: boundaryconditions.hpp:100
BoundaryConditions::m_inletFlow
SingleCondition m_inletFlow
Inlet flow [kg/s].
Definition: boundaryconditions.hpp:229
BoundaryConditions
The BoundaryConditions class is a container for the boundary conditions at the inlet and outlet of a ...
Definition: boundaryconditions.hpp:27
BoundaryConditions::nActiveBoundaryConditions
arma::uword nActiveBoundaryConditions() const
Returns the number of active boundary conditions.
BoundaryConditions::SingleCondition
The SingleCondition class is used to store a single boundary condition (like flow,...
Definition: boundaryconditions.hpp:165
TimeStep::timestamp
arma::uword timestamp() const
Get (copy of) timestamp.
Definition: boundaryconditions.hpp:321