TransFlow  0.1.0
A transient pipeline flow simulation library
timeseries.hpp
1 #pragma once
2 
3 #include <iostream>
4 #include <vector>
5 #include <string>
6 #include <armadillo>
7 
8 #include "composition.hpp"
9 
10 class Pipeline;
11 class BoundaryConditions;
12 class TimeStep;
13 
30 {
31 public:
38  TimeSeries(const arma::uword nSteps, const arma::uword dt = 60);
39 
44  TimeSeries(const arma::uvec& timestamps);
45 
54  TimeSeries(
55  const Pipeline& pipeline,
56  const arma::uword nSteps,
57  const arma::uword dt = 60,
58  const std::vector<std::string>& boundarySettings = {"inlet", "outlet", "inlet"});
59 
69  TimeSeries(
70  const std::string& filename,
71  const std::vector<std::string>& boundarySettings = {"inlet", "outlet", "inlet"});
72 
83  TimeSeries(
84  const std::string& filename,
85  arma::uword lastRow,
86  const std::vector<std::string>& boundarySettings = {"inlet", "outlet", "inlet"});
87 
119  TimeSeries(
120  const std::string& filename,
121  arma::uword firstRow,
122  arma::uword lastRow,
123  const std::vector<std::string>& boundarySettings = {"inlet", "outlet", "inlet"});
124 
154  TimeSeries(
155  const arma::mat& data,
156  const std::vector<std::string>& boundarySettings = {"inlet", "outlet", "inlet"});
157 
163  TimeSeries(
164  const arma::uvec& timestamps,
165  const std::vector<BoundaryConditions>& boundaryConditions);
166 
172  TimeSeries(
173  const arma::uword dt,
174  const std::vector<BoundaryConditions>& boundaryConditions);
175 
183  void setBoundarySettings(const std::vector<std::string> settings);
184 
185  void save(const std::string& filename);
186 
187  // getters
189  const auto& timestamps() const { return m_timestamps; }
191  const std::vector<Composition>& inletComposition() const { return m_inletComposition; }
193  const std::vector<Composition>& outletComposition() const { return m_outletComposition; }
194 
195  const auto& inletFlow() const { return m_inletFlow; }
196  const auto& inletPressure() const { return m_inletPressure; }
197  const auto& inletTemperature() const { return m_inletTemperature; }
198  const auto& outletFlow() const { return m_outletFlow; }
199  const auto& outletPressure() const { return m_outletPressure; }
200  const auto& outletTemperature() const { return m_outletTemperature; }
201 
202  // getters/setters
204  auto& timestamps() { return m_timestamps; }
206  std::vector<Composition>& inletComposition() { return m_inletComposition; }
208  std::vector<Composition>& outletComposition() { return m_outletComposition; }
209 
210  auto& inletFlow() { return m_inletFlow; }
211  auto& inletPressure() { return m_inletPressure; }
213  auto& outletFlow() { return m_outletFlow; }
214  auto& outletPressure() { return m_outletPressure; }
216 
219  operator std::vector<TimeStep>() const;
220 
222  TimeStep at(std::size_t pos) const;
223 
225  arma::uword size() const { return m_timestamps.n_rows; }
226 
229  class Series
230  {
231  public:
232  friend class TimeSeries;
233 
238  Series(const bool active=false):
239  m_isActive(active)
240  {}
241 
247  Series(const arma::vec& value):
248  m_isActive(true),
249  m_vec(value)
250  {}
251 
257  Series(const arma::vec& value, const bool active):
258  m_isActive(active),
259  m_vec(value)
260  {}
261 
263  void set(const arma::vec& value)
264  {
265  m_isActive = true;
266  m_vec = value;
267  }
268 
270  void set(const arma::vec& value, const bool active)
271  {
272  m_isActive = active;
273  m_vec = value;
274  }
275 
277  void fill(const double value)
278  {
279  m_isActive = true;
280  m_vec.fill(value);
281  }
282 
284  void setActive(const bool active)
285  {
286  m_isActive = active;
287  }
288 
289  // copy assignment operator
301  Series& operator= (const arma::vec& value)
302  {
303  m_vec = value;
304  m_isActive = true;
305 
306  return *this;
307  }
308 
310  double operator()(const arma::uword i) const { return m_vec(i); }
311 
313  arma::uword size() const { return m_vec.n_elem; }
314 
316  bool isActive() const { return m_isActive; }
317 
319  bool isActive() { return m_isActive; }
320 
322  const arma::vec& vec() const { return m_vec; }
323 
324  private:
326  arma::vec& vec() { return m_vec; }
327 
329  bool m_isActive = false;
330 
332  arma::vec m_vec; // not initialized
333  };
334 
335 private:
336  arma::uvec m_timestamps;
337 
344 
345  std::vector<Composition> m_inletComposition;
346  std::vector<Composition> m_outletComposition;
347 
352  void loadFromMatrix(const arma::mat& bc);
353 };
TimeSeries::inletPressure
auto & inletPressure()
Get (ref) inlet pressure.
Definition: timeseries.hpp:211
TimeSeries::m_inletFlow
Series m_inletFlow
Inlet flow [kg/s].
Definition: timeseries.hpp:338
TimeSeries::outletFlow
const auto & outletFlow() const
Get (const ref) outlet flow.
Definition: timeseries.hpp:198
TimeSeries::Series::Series
Series(const arma::vec &value)
Construct from arma::vec. Active by default. Allows implicit conversion from arma::vec to Series.
Definition: timeseries.hpp:247
TimeSeries::outletTemperature
auto & outletTemperature()
Get (ref) outlet temperature.
Definition: timeseries.hpp:215
TimeSeries::m_outletTemperature
Series m_outletTemperature
Outlet temperature [K].
Definition: timeseries.hpp:343
TimeSeries::TimeSeries
TimeSeries(const arma::uword nSteps, const arma::uword dt=60)
Construct time series with a given number of steps, and a fixed time step.
TimeSeries::outletPressure
auto & outletPressure()
Get (ref) outlet pressure.
Definition: timeseries.hpp:214
TimeSeries::at
TimeStep at(std::size_t pos) const
std::vector-like at(i) getter
TimeSeries::m_inletTemperature
Series m_inletTemperature
Inlet temperature [K].
Definition: timeseries.hpp:340
TimeSeries::m_outletComposition
std::vector< Composition > m_outletComposition
Outlet composition [fraction].
Definition: timeseries.hpp:346
Pipeline
Definition: pipeline.hpp:16
TimeSeries::Series
Definition: timeseries.hpp:229
TimeSeries::inletFlow
auto & inletFlow()
Get (ref) inlet flow.
Definition: timeseries.hpp:210
TimeSeries::Series::m_isActive
bool m_isActive
If the Series is an active boundary condition.
Definition: timeseries.hpp:329
TimeSeries::Series::isActive
bool isActive() const
If the Series is an active boundary condition.
Definition: timeseries.hpp:316
TimeSeries::Series::set
void set(const arma::vec &value)
Set new value. Makes it an active boundary condition.
Definition: timeseries.hpp:263
TimeSeries::Series::Series
Series(const arma::vec &value, const bool active)
Construct from arma::vec and bool active.
Definition: timeseries.hpp:257
TimeSeries::Series::fill
void fill(const double value)
Armadillo-like fill. Fills member vector with value, and sets it active.
Definition: timeseries.hpp:277
TimeSeries::Series::set
void set(const arma::vec &value, const bool active)
Set new value and active status.
Definition: timeseries.hpp:270
TimeSeries::inletFlow
const auto & inletFlow() const
Get (const ref) inlet flow.
Definition: timeseries.hpp:195
TimeSeries::outletTemperature
const auto & outletTemperature() const
Get (const ref) outlet temperature.
Definition: timeseries.hpp:200
TimeSeries::Series::setActive
void setActive(const bool active)
Set the active/inactive property.
Definition: timeseries.hpp:284
TimeSeries::m_timestamps
arma::uvec m_timestamps
Timestamps [s].
Definition: timeseries.hpp:336
TimeSeries::Series::m_vec
arma::vec m_vec
The value of the Series.
Definition: timeseries.hpp:332
TimeSeries::outletPressure
const auto & outletPressure() const
Get (const ref) outlet pressure.
Definition: timeseries.hpp:199
TimeSeries::Series::vec
const arma::vec & vec() const
Get (const ref) member arma::vec m_vec.
Definition: timeseries.hpp:322
TimeStep
The TimeStep class is a subclass of BoundaryConditions with an extra member to store the timestamp of...
Definition: boundaryconditions.hpp:305
TimeSeries::timestamps
auto & timestamps()
Get (ref) timestamps.
Definition: timeseries.hpp:204
TimeSeries::Series::vec
arma::vec & vec()
Get (non-const ref) member arma::vec m_vec (private)
Definition: timeseries.hpp:326
TimeSeries::outletFlow
auto & outletFlow()
Get (ref) outlet flow.
Definition: timeseries.hpp:213
TimeSeries::inletTemperature
const auto & inletTemperature() const
Get (const ref) inlet temperature.
Definition: timeseries.hpp:197
TimeSeries::m_outletFlow
Series m_outletFlow
Outlet flow [kg/s].
Definition: timeseries.hpp:341
TimeSeries::setBoundarySettings
void setBoundarySettings(const std::vector< std::string > settings)
Set boundary settings via vector of string, or brace-init-list like {"inlet", "outlet",...
TimeSeries::timestamps
const auto & timestamps() const
Get (const ref) timestamps.
Definition: timeseries.hpp:189
TimeSeries::outletComposition
const std::vector< Composition > & outletComposition() const
Get (const ref) outlet composition.
Definition: timeseries.hpp:193
TimeSeries::Series::isActive
bool isActive()
If the Series is an active boundary condition.
Definition: timeseries.hpp:319
TimeSeries::loadFromMatrix
void loadFromMatrix(const arma::mat &bc)
Load boundary conditions from matrix (private)
TimeSeries::inletComposition
const std::vector< Composition > & inletComposition() const
Get (const ref) inlet composition.
Definition: timeseries.hpp:191
TimeSeries::inletTemperature
auto & inletTemperature()
Get (ref) inlet temperature.
Definition: timeseries.hpp:212
TimeSeries::m_outletPressure
Series m_outletPressure
Outlet pressure [Pa].
Definition: timeseries.hpp:342
TimeSeries::Series::operator=
Series & operator=(const arma::vec &value)
Copy assignment operator from arma::vec. Sets it active.
Definition: timeseries.hpp:301
TimeSeries
The TimeSeries class is used to store the boundary conditions for several time steps.
Definition: timeseries.hpp:29
BoundaryConditions
The BoundaryConditions class is a container for the boundary conditions at the inlet and outlet of a ...
Definition: boundaryconditions.hpp:27
TimeSeries::m_inletPressure
Series m_inletPressure
Inlet pressure [Pa].
Definition: timeseries.hpp:339
TimeSeries::m_inletComposition
std::vector< Composition > m_inletComposition
Inlet composition [fraction].
Definition: timeseries.hpp:345
TimeSeries::Series::Series
Series(const bool active=false)
Default construct. Not active by default.
Definition: timeseries.hpp:238
TimeSeries::Series::size
arma::uword size() const
Get the size of the member arma::vec.
Definition: timeseries.hpp:313
TimeSeries::Series::operator()
double operator()(const arma::uword i) const
Get element by index.
Definition: timeseries.hpp:310
TimeSeries::inletComposition
std::vector< Composition > & inletComposition()
Get (ref) inlet composition.
Definition: timeseries.hpp:206
TimeSeries::inletPressure
const auto & inletPressure() const
Get (const ref) inlet pressure.
Definition: timeseries.hpp:196
TimeSeries::size
arma::uword size() const
Get size (number of grid points).
Definition: timeseries.hpp:225
TimeSeries::outletComposition
std::vector< Composition > & outletComposition()
Get (ref) outlet composition.
Definition: timeseries.hpp:208