TransFlow  0.1.0
A transient pipeline flow simulation library
simulator.hpp
1 #pragma once
2 
3 #include <string>
4 #include <vector>
5 #include <memory>
6 #include <optional>
7 #include <armadillo>
8 
9 // can replace some of these with forward declarations, but keep them for now
10 // so the program is easier to use (no need to include so much stuff)
11 // TODO: should probably make a "transflow.hpp" file with the most useful stuff
12 // included
13 #include "pipeline.hpp"
14 #include "solver/solver.hpp"
15 #include "physics.hpp"
16 #include "timeseries.hpp"
17 #include "config.hpp"
18 #include "sampler.hpp"
19 
25 class Simulator
26 {
27 public:
35  Simulator(
36  const Pipeline& pipeline = Pipeline(),
37  const Config& config = Config());
38 
45  Simulator(
46  const Pipeline& pipeline,
47  std::unique_ptr<Physics>& physics,
48  std::unique_ptr<Solver>& solver);
49 
58  arma::vec simulate(const TimeSeries& timeSeries);
59 
61  void enableBatchTracking();
62 
64  arma::uword size() const { return m_state->size(); }
65 
67  const Pipeline& pipeline() const { return *m_state; }
68 
70  const Pipeline::State& state() const { return m_state->state(); }
71 
73  const Solver& solver() const { return *m_solver; }
74 
76  const Physics& physics() const { return *m_physics; }
77 
79  Sampler& sampler() { return m_sampler.value(); }
80 
81 private:
82  std::unique_ptr<Pipeline> m_state;
83  std::unique_ptr<Physics> m_physics;
84  std::unique_ptr<Solver> m_solver;
85  std::optional<Sampler> m_sampler;
86 
92  std::optional<Sampler> makeSampler(const Config& config);
93 };
Simulator::solver
const Solver & solver() const
Get (const ref) Solver.
Definition: simulator.hpp:73
Simulator::physics
const Physics & physics() const
Get (const ref) Physics.
Definition: simulator.hpp:76
Simulator::m_physics
std::unique_ptr< Physics > m_physics
Physics instance, contains HeatTransfer and EquationOfState.
Definition: simulator.hpp:83
Simulator::m_sampler
std::optional< Sampler > m_sampler
(Optional) sampler instance, for writing results to file during simulation
Definition: simulator.hpp:85
Simulator::Simulator
Simulator(const Pipeline &pipeline=Pipeline(), const Config &config=Config())
Construct using Pipeline and Config. Will construct Physics and Solver using the settings in Config,...
Pipeline
Definition: pipeline.hpp:16
Simulator::makeSampler
std::optional< Sampler > makeSampler(const Config &config)
Make optional Sampler instance. Returns empty optional if config.outputPath is empty.
Simulator::state
const Pipeline::State & state() const
Get (const ref) Pipeline::State.
Definition: simulator.hpp:70
Simulator::simulate
arma::vec simulate(const TimeSeries &timeSeries)
Advance the pipeline in time by any number of time steps. If initialize is true the pipeline pressure...
Physics
The Physics class combines EquationOfState and HeatTransfer to calculate the new state of a pipeline ...
Definition: physics.hpp:21
Simulator
The Simulator class combines Physics and Solver to advance the state of the pipeline in time....
Definition: simulator.hpp:25
Simulator::m_solver
std::unique_ptr< Solver > m_solver
Solver instance, contains GoverningEquationSolver and BatchTracking.
Definition: simulator.hpp:84
Simulator::size
arma::uword size() const
Get size (number of grid points)
Definition: simulator.hpp:64
Simulator::m_state
std::unique_ptr< Pipeline > m_state
Pipeline state.
Definition: simulator.hpp:82
Simulator::enableBatchTracking
void enableBatchTracking()
Enables batch tracking. Wrapper around Pipeline::enableBatchTracking().
Solver
The Solver class combines GoverningEquationSolver and BatchTracking to advance the governing equation...
Definition: solver.hpp:25
Pipeline::State
Definition: pipeline.hpp:20
Config
The Config struct stores all settings for the different parts of the pipeline simulation.
Definition: config.hpp:11
Simulator::sampler
Sampler & sampler()
Get (ref) sampler.
Definition: simulator.hpp:79
Simulator::pipeline
const Pipeline & pipeline() const
Get (const ref) Pipeline.
Definition: simulator.hpp:67
TimeSeries
The TimeSeries class is used to store the boundary conditions for several time steps.
Definition: timeseries.hpp:29
Sampler
The Sampler class is used to sample selected Pipeline properties during simulations.
Definition: sampler.hpp:69