TransFlow  0.1.0
A transient pipeline flow simulation library
pipeline.hpp
1 #pragma once
2 
3 #include <armadillo>
4 
5 #include <vector>
6 
7 #include "composition.hpp"
8 #include "heattransfer/pipewall.hpp"
9 #include "heattransfer/burialmedium.hpp"
10 #include "heattransfer/ambientfluid.hpp"
11 #include "heattransfer/heattransferbase.hpp"
12 #include "advection/batchtrackingstate.hpp"
13 
14 class BoundaryConditions;
15 
16 class Pipeline
17 {
18 public:
20  class State
21  {
22  public:
23  friend class Pipeline;
24 
25  State(
26  const arma::vec& gridPoints,
27  const arma::vec& pressure,
28  const arma::vec& temperature,
29  const arma::vec& flow,
30  const std::vector<Composition>& composition);
31 
32  State(
33  const arma::vec& gridPoints,
34  const arma::vec& pressure,
35  const arma::vec& temperature,
36  const arma::vec& flow,
37  const Composition& composition = Composition::defaultComposition);
38 
39  // getters
40  // main/governing properties
41  const arma::vec& flow() const { return m_flow; }
42  const arma::vec& pressure() const { return m_pressure; }
43  const arma::vec& temperature() const { return m_temperature; }
44  const std::vector<Composition>& composition() const { return m_composition; }
45 
46  // derived properties
47  const arma::vec& heatCapacityConstantVolume() const { return m_heatCapacityConstantVolume; }
48  const arma::vec& heatCapacityConstantPressure() const { return m_heatCapacityConstantPressure; }
49  const arma::vec& density() const { return m_density; }
50  const arma::vec& viscosity() const { return m_viscosity; }
51  const arma::vec& specificGasConstant() const { return m_specificGasConstant; }
52  const arma::vec& molarMass() const { return m_molarMass; }
53 
54  const arma::vec& compressibilityFactor() const { return m_compressibilityFactor; }
55  const arma::vec& dZdtAtConstantPressure() const { return m_temperatureDerivativeConstantPressure; }
56  const arma::vec& dZdpAtConstantTemperature() const { return m_pressureDerivativeConstantTemperature; }
57  const arma::vec& dZdtAtConstantDensity() const { return m_temperatureDerivativeConstantDensity; }
58 
59  const arma::vec& velocity() const { return m_velocity; }
60  const arma::vec& frictionFactor() const { return m_frictionFactor; }
61  const arma::vec& reynoldsNumber() const { return m_reynoldsNumber; }
62 
63  const arma::vec& ambientTemperature() const { return m_ambientTemperature; }
64  const arma::vec& heatFlow() const { return m_heatFlow; }
65 
66 // const std::vector<HeatTransferState>& heatTransferState() const { return m_heatTransferState; }
67 // const BatchTrackingState& batchTrackingState() const { return m_batchTrackingState; }
68 // bool batchTrackingIsInitialized() const { return m_batchTrackingIsInitialized; }
69 
70 // // setters
71 // // main/governing properties
72 // arma::vec& flow() { return m_flow; }
73 // arma::vec& pressure() { return m_pressure; }
74 // arma::vec& temperature() { return m_temperature; }
75 // std::vector<Composition>& composition();
76 
77 // // derived properties
78 // arma::vec& heatCapacityConstantVolume() { return m_heatCapacityConstantVolume; }
79 // arma::vec& heatCapacityConstantPressure() { return m_heatCapacityConstantPressure; }
80 // arma::vec& density() { return m_density; }
81 // arma::vec& viscosity() { return m_viscosity; }
82 // arma::vec& specificGasConstant() { return m_specificGasConstant; }
83 // arma::vec& molarMass() { return m_molarMass; }
84 
85 // arma::vec& compressibilityFactor() { return m_compressibilityFactor; }
86 // arma::vec& dZdtAtConstantPressure() { return m_temperatureDerivativeConstantPressure; }
87 // arma::vec& dZdpAtConstantTemperature() { return m_pressureDerivativeConstantTemperature; }
88 // arma::vec& dZdtAtConstantDensity() { return m_temperatureDerivativeConstantDensity; }
89 
90 // arma::vec& velocity() { return m_velocity; }
91 // arma::vec& frictionFactor() { return m_frictionFactor; }
92 // arma::vec& reynoldsNumber() { return m_reynoldsNumber; }
93 
94 // arma::vec& ambientTemperature() { return m_ambientTemperature; }
95 // arma::vec& heatFlow() { return m_heatFlow; }
96 
97 // std::vector<HeatTransferState>& heatTransferState() { return m_heatTransferState; }
98 // BatchTrackingState& batchTrackingState() { return m_batchTrackingState; }
99 // bool& batchTrackingIsInitialized() { return m_batchTrackingIsInitialized; }
100 
110  friend std::ostream& operator << (std::ostream &out, const State& c);
111 
112  protected:
113  State(const arma::vec& gridPoints);
114 
115  // input/governing properties
116  arma::vec m_flow;
117  arma::vec m_pressure;
118  arma::vec m_temperature;
119  std::vector<Composition> m_composition;
120 
121  // output/derived properties
124  arma::vec m_density;
125  arma::vec m_viscosity;
127  arma::vec m_molarMass;
128 
142 
143  arma::vec m_velocity;
144  arma::vec m_frictionFactor;
145  arma::vec m_reynoldsNumber;
146 
148  arma::vec m_heatFlow;
149 
150  std::vector<HeatTransferState> m_heatTransferState;
152 
155  };
157 
163  Pipeline(const arma::uword nGridPoints = 100, const double length = 100e3);
164 
165  arma::uword size() const { return m_gridPoints.n_elem; }
166 
169 
171  void enableBatchTracking();
172 
175 
178  void setLength(const double length);
179 
180  arma::uword timestamp() const { return m_timestamp; }
181  arma::uword& timestamp() { return m_timestamp; }
182 
183  const Pipeline::State& state() const { return m_state; }
184 
185  // getters
186  // constants
187  double length() const { return m_length; }
188  const arma::vec& gridPoints() const { return m_gridPoints; }
189  const arma::vec& diameter() const { return m_diameter; }
190  const arma::vec& height() const { return m_height; }
191  const arma::vec& elevation() const { return m_height; }
192  const arma::vec& roughness() const { return m_roughness; }
193 
194  const arma::vec& burialDepth() const { return m_burialDepth; }
195  const std::vector<PipeWall>& pipeWall() const { return m_pipeWall; }
196  const std::vector<BurialMedium>& burialMedium() const { return m_burialMedium; }
197  const std::vector<AmbientFluid>& ambientFluid() const { return m_ambientFluid; }
198 
199  // main/governing properties
200  const arma::vec& flow() const { return prop().m_flow; }
201  const arma::vec& pressure() const { return prop().m_pressure; }
202  const arma::vec& temperature() const { return prop().m_temperature; }
203  const std::vector<Composition>& composition() const { return prop().m_composition; }
204 
205  // derived properties
206  const arma::vec& heatCapacityConstantVolume() const { return prop().m_heatCapacityConstantVolume; }
207  const arma::vec& heatCapacityConstantPressure() const { return prop().m_heatCapacityConstantPressure; }
208  const arma::vec& density() const { return prop().m_density; }
209  const arma::vec& viscosity() const { return prop().m_viscosity; }
210  const arma::vec& specificGasConstant() const { return prop().m_specificGasConstant; }
211  const arma::vec& molarMass() const { return prop().m_molarMass; }
212 
213  const arma::vec& compressibilityFactor() const { return prop().m_compressibilityFactor; }
214  const arma::vec& dZdtAtConstantPressure() const { return prop().m_temperatureDerivativeConstantPressure; }
215  const arma::vec& dZdpAtConstantTemperature() const { return prop().m_pressureDerivativeConstantTemperature; }
216  const arma::vec& dZdtAtConstantDensity() const { return prop().m_temperatureDerivativeConstantDensity; }
217 
218  const arma::vec& velocity() const { return prop().m_velocity; }
219  const arma::vec& frictionFactor() const { return prop().m_frictionFactor; }
220  const arma::vec& reynoldsNumber() const { return prop().m_reynoldsNumber; }
221 
222  const arma::vec& ambientTemperature() const { return prop().m_ambientTemperature; }
223  const arma::vec& heatFlow() const { return prop().m_heatFlow; }
224 
225  const std::vector<HeatTransferState>& heatTransferState() const { return prop().m_heatTransferState; }
226  bool heatTransferIsInitialized() const { return prop().m_heatTransferIsInitialized; }
227 
228  const BatchTrackingState& batchTrackingState() const { return prop().m_batchTrackingState; }
229  bool batchTrackingIsInitialized() const { return prop().m_batchTrackingIsInitialized; }
230 
231  // settings
232  bool constantComposition() const { return m_constantComposition; }
233 
234  // helpers
236  const arma::vec& inletComposition() const;
238  const arma::vec& outletComposition() const;
239 
240  // setters
241  // constants
242  arma::vec& gridPoints() { return m_gridPoints; }
243  arma::vec& diameter() { return m_diameter; }
244  arma::vec& height() { return m_height; }
245  arma::vec& elevation() { return m_height; }
246  arma::vec& roughness() { return m_roughness; }
247 
248  arma::vec& burialDepth() { return m_burialDepth; }
249  std::vector<PipeWall>& pipeWall() { return m_pipeWall; }
250  std::vector<BurialMedium>& burialMedium() { return m_burialMedium; }
251  std::vector<AmbientFluid>& ambientFluid() { return m_ambientFluid; }
252 
253  // main/governing properties
254  arma::vec& flow() { return prop().m_flow; }
255  arma::vec& pressure() { return prop().m_pressure; }
256  arma::vec& temperature() { return prop().m_temperature; }
257 
258  // derived properties
259  arma::vec& heatCapacityConstantVolume() { return prop().m_heatCapacityConstantVolume; }
260  arma::vec& heatCapacityConstantPressure() { return prop().m_heatCapacityConstantPressure; }
261  arma::vec& density() { return prop().m_density; }
262  arma::vec& viscosity() { return prop().m_viscosity; }
263  arma::vec& specificGasConstant() { return prop().m_specificGasConstant; }
264  arma::vec& molarMass() { return prop().m_molarMass; }
265 
266  arma::vec& compressibilityFactor() { return prop().m_compressibilityFactor; }
267  arma::vec& dZdtAtConstantPressure() { return prop().m_temperatureDerivativeConstantPressure; }
268  arma::vec& dZdpAtConstantTemperature() { return prop().m_pressureDerivativeConstantTemperature; }
269  arma::vec& dZdtAtConstantDensity() { return prop().m_temperatureDerivativeConstantDensity; }
270 
271  arma::vec& velocity() { return prop().m_velocity; }
272  arma::vec& frictionFactor() { return prop().m_frictionFactor; }
273  arma::vec& reynoldsNumber() { return prop().m_reynoldsNumber; }
274 
275  arma::vec& ambientTemperature() { return prop().m_ambientTemperature; }
276  arma::vec& heatFlow() { return prop().m_heatFlow; }
277 
278  std::vector<HeatTransferState>& heatTransferState() { return prop().m_heatTransferState; }
279  bool& heatTransferIsInitialized() { return prop().m_heatTransferIsInitialized; }
280 
281  BatchTrackingState& batchTrackingState() { return prop().m_batchTrackingState; }
282  bool& batchTrackingIsInitialized() { return prop().m_batchTrackingIsInitialized; }
283 
284  // settings
285  bool& constantComposition() { return m_constantComposition; }
286 
292  void updateComposition(const std::vector<Composition>& composition);
293 
299  void updateComposition(const Composition& composition);
300 
306  void setCompositionUnsafe(const std::vector<Composition>& composition);
307 
308 private:
309  // constants
310  double m_length;
311  arma::vec m_gridPoints;
312  arma::vec m_diameter;
313  arma::vec m_height;
314  arma::vec m_roughness;
315 
316  arma::vec m_burialDepth;
317  std::vector<PipeWall> m_pipeWall;
318  std::vector<BurialMedium> m_burialMedium;
319  std::vector<AmbientFluid> m_ambientFluid;
320 
321  // settings
323 
324  // other
326  arma::uword m_timestamp = 0;
327 
328  // shorthand for internal use
329  const State& prop() const { return m_state; }
330  State& prop() { return m_state; }
331 };
Pipeline::State::m_temperatureDerivativeConstantDensity
arma::vec m_temperatureDerivativeConstantDensity
Definition: pipeline.hpp:141
Pipeline::m_height
arma::vec m_height
Height profile/elevation [m].
Definition: pipeline.hpp:313
Pipeline::State::m_reynoldsNumber
arma::vec m_reynoldsNumber
Reynolds number [-].
Definition: pipeline.hpp:145
Pipeline::State::m_density
arma::vec m_density
Gas density [kg/m3].
Definition: pipeline.hpp:124
Pipeline::getBoundaryConditions
BoundaryConditions getBoundaryConditions() const
Get current inlet and outlet state as BoundaryConditions instance.
Pipeline::setLength
void setLength(const double length)
Pipeline::m_state
State m_state
Pipeline::State instance with all properties like flow etc.
Definition: pipeline.hpp:325
Pipeline::m_roughness
arma::vec m_roughness
Sand grain equivalent roughness [m].
Definition: pipeline.hpp:314
Pipeline::updateComposition
void updateComposition(const std::vector< Composition > &composition)
Set the composition. This also updates the batch tracking state to reflect the composition change.
Pipeline::m_burialMedium
std::vector< BurialMedium > m_burialMedium
Burial medium description.
Definition: pipeline.hpp:318
Pipeline
Definition: pipeline.hpp:16
Pipeline::State::m_viscosity
arma::vec m_viscosity
Gas dynamic viscosity [Pa s] = [kg/m*s].
Definition: pipeline.hpp:125
Composition::defaultComposition
static const Composition defaultComposition
Default composition.
Definition: composition.hpp:81
Pipeline::m_gridPoints
arma::vec m_gridPoints
Grid points [m].
Definition: pipeline.hpp:311
Pipeline::m_pipeWall
std::vector< PipeWall > m_pipeWall
Pipe wall description.
Definition: pipeline.hpp:317
Pipeline::State::m_heatTransferState
std::vector< HeatTransferState > m_heatTransferState
Heat transfer state.
Definition: pipeline.hpp:150
Pipeline::State::m_velocity
arma::vec m_velocity
Gas velocity [m/s].
Definition: pipeline.hpp:143
Pipeline::State::m_heatCapacityConstantVolume
arma::vec m_heatCapacityConstantVolume
Gas heat capacity at constant volume [J/(kg K)].
Definition: pipeline.hpp:122
Pipeline::State::m_pressureDerivativeConstantTemperature
arma::vec m_pressureDerivativeConstantTemperature
Definition: pipeline.hpp:137
BatchTrackingState
Contains the state which BatchTracking operates on.
Definition: batchtrackingstate.hpp:14
Pipeline::outletComposition
const arma::vec & outletComposition() const
Get outlet composition.
Pipeline::enableBatchTracking
void enableBatchTracking()
Enable batch tracking. Also initializes the batch tracking state.
Pipeline::State::m_heatTransferIsInitialized
bool m_heatTransferIsInitialized
If heat transfer is initialized.
Definition: pipeline.hpp:151
Pipeline::State::m_batchTrackingState
BatchTrackingState m_batchTrackingState
Batch tracking state.
Definition: pipeline.hpp:153
Pipeline::State::m_batchTrackingIsInitialized
bool m_batchTrackingIsInitialized
If batch tracking is initialized.
Definition: pipeline.hpp:154
Pipeline::m_ambientFluid
std::vector< AmbientFluid > m_ambientFluid
Ambient fluid description.
Definition: pipeline.hpp:319
Pipeline::m_burialDepth
arma::vec m_burialDepth
Distance from burial medium to top of pipe [m].
Definition: pipeline.hpp:316
Pipeline::State::m_molarMass
arma::vec m_molarMass
Molar mass of the gas [g/mol].
Definition: pipeline.hpp:127
Pipeline::m_constantComposition
bool m_constantComposition
If we simulate using constant composition or not.
Definition: pipeline.hpp:322
Pipeline::initializeBatchTracking
void initializeBatchTracking()
Initialize the batch tracking state.
Pipeline::inletComposition
const arma::vec & inletComposition() const
Get inlet composition.
Pipeline::State
Definition: pipeline.hpp:20
Pipeline::State::m_pressure
arma::vec m_pressure
Gas pressure [Pa].
Definition: pipeline.hpp:117
Pipeline::State::operator<<
friend std::ostream & operator<<(std::ostream &out, const State &c)
For pretty printing.
Pipeline::setCompositionUnsafe
void setCompositionUnsafe(const std::vector< Composition > &composition)
Set the composition without updating batch tracking state. This is meant for internal use in Solver e...
Pipeline::State::m_heatCapacityConstantPressure
arma::vec m_heatCapacityConstantPressure
Gas heat capacity at constant pressure [J/(kg K)].
Definition: pipeline.hpp:123
Composition
The Composition class is a simple container class for the composition of natural gas....
Definition: composition.hpp:17
Pipeline::State::m_ambientTemperature
arma::vec m_ambientTemperature
Ambient temperature [K].
Definition: pipeline.hpp:147
Pipeline::State::m_temperature
arma::vec m_temperature
Gas temperature [K].
Definition: pipeline.hpp:118
Pipeline::State::m_specificGasConstant
arma::vec m_specificGasConstant
Specific gas constant of the gas [J/(kg K)].
Definition: pipeline.hpp:126
Pipeline::State::m_compressibilityFactor
arma::vec m_compressibilityFactor
Definition: pipeline.hpp:129
Pipeline::State::m_flow
arma::vec m_flow
Flow [kg/s].
Definition: pipeline.hpp:116
Pipeline::State::m_frictionFactor
arma::vec m_frictionFactor
Friction factor [-].
Definition: pipeline.hpp:144
BoundaryConditions
The BoundaryConditions class is a container for the boundary conditions at the inlet and outlet of a ...
Definition: boundaryconditions.hpp:27
Pipeline::State::m_composition
std::vector< Composition > m_composition
Gas composition (fractions)
Definition: pipeline.hpp:119
Pipeline::m_length
double m_length
Total length [m].
Definition: pipeline.hpp:310
Pipeline::m_diameter
arma::vec m_diameter
Inner diameter [m].
Definition: pipeline.hpp:312
Pipeline::State::m_heatFlow
arma::vec m_heatFlow
Heat flow q [W/m2].
Definition: pipeline.hpp:148
Pipeline::State::m_temperatureDerivativeConstantPressure
arma::vec m_temperatureDerivativeConstantPressure
Definition: pipeline.hpp:133
Pipeline::Pipeline
Pipeline(const arma::uword nGridPoints=100, const double length=100e3)
Construct from number of grid points and pipeline length.
Pipeline::m_timestamp
arma::uword m_timestamp
Current timestamp [s].
Definition: pipeline.hpp:326