TransFlow  0.1.0
A transient pipeline flow simulation library
solver.hpp
1 #pragma once
2 
3 #include <string>
4 #include <memory>
5 #include <string>
6 #include <armadillo>
7 
8 class Config;
9 class Physics;
10 class BatchTracking;
11 class Pipeline;
13 class BoundaryConditions;
14 class TimeStep;
15 
25 class Solver
26 {
27 public:
29  virtual ~Solver();
30 
36  Solver(
37  const arma::uword nGridPoints,
38  const Config& config);
39 
52  explicit Solver(
53  const arma::uword nGridPoints,
54  const std::string& energyEquation = "InternalEnergy",
55  const arma::vec& relaxationFactors = {1, 1, 2/3.0},
56  const std::string& toleranceType = "relative",
57  const arma::vec& tolerances = {0.001, 0.001, 0.001},
58  const bool bruteForce = false,
59  const arma::uword maxIterations = 200);
60 
72  virtual Pipeline solve(
73  const arma::uword dt,
74  const Pipeline& current,
75  const TimeStep& boundaryConditions,
76  const Physics& physics) const;
77 
89  virtual Pipeline solve(
90  const arma::uword dt,
91  const Pipeline& current,
92  const BoundaryConditions& boundaryConditions,
93  const Physics& physics) const;
94 
114  static arma::uword differencesWithinTolerance(
115  const Pipeline& guess,
116  const Pipeline& previous,
117  const arma::vec& tolerances,
118  const std::string& toleranceType,
119  const arma::vec& relaxationFactors);
120 
133  const arma::uword dt,
134  const Pipeline& current,
135  const BoundaryConditions& boundaryConditions,
136  const Physics& physics) const;
137 
139  void enableBruteForce();
140 
142  void setMaxIterations(const arma::uword maxIterations);
143 
145  arma::uword nIterations() const { return m_nIterations; }
146 
148  const arma::vec& relaxationFactors() const { return m_relaxationFactor;}
150  const std::string& toleranceType() const { return m_toleranceType; }
152  const arma::vec& tolerances() const { return m_tolerances; }
155 
156 private:
159 
162  std::string m_toleranceType;
163 
165  arma::vec m_tolerances;
166 
167 // arma::uword m_maxNumberOfIterations = 20; // not used
168 // bool m_hardLimitOnNumberOfIterations = true; // not used
169 // bool m_bruteForce = false; // not used
170 
176  arma::uword m_maxIterations;
179  mutable arma::uword m_nIterations = 0;
180 
182  std::unique_ptr<GoverningEquationSolverBase> m_governingEquationSolver;
183 
185  std::unique_ptr<BatchTracking> m_compositionSolver;
186 
194  std::unique_ptr<GoverningEquationSolverBase> makeGoverningEquationSolver(
195  const arma::uword nGridPoints,
196  const Config& config);
197 
205  std::unique_ptr<GoverningEquationSolverBase> makeGoverningEquationSolver(
206  const arma::uword nGridPoints,
207  const std::string& discretizer);
208 };
Solver::m_relaxationFactor
arma::vec m_relaxationFactor
Relaxation factors for each property (flow, pressure and temperature).
Definition: solver.hpp:158
Solver::differencesWithinTolerance
static arma::uword differencesWithinTolerance(const Pipeline &guess, const Pipeline &previous, const arma::vec &tolerances, const std::string &toleranceType, const arma::vec &relaxationFactors)
Check if differences between an old and a new state are within tolerances. This will either compare r...
Solver::solveWithIterations
Pipeline solveWithIterations(const arma::uword dt, const Pipeline &current, const BoundaryConditions &boundaryConditions, const Physics &physics) const
Solve the governing equations.
Solver::makeGoverningEquationSolver
std::unique_ptr< GoverningEquationSolverBase > makeGoverningEquationSolver(const arma::uword nGridPoints, const Config &config)
Private method for making GoverningEquationSolverBase instance from Config and nGridPoints.
Pipeline
Definition: pipeline.hpp:16
Solver::m_bruteForce
bool m_bruteForce
Definition: solver.hpp:173
Solver::m_compositionSolver
std::unique_ptr< BatchTracking > m_compositionSolver
BatchTracking instance used to advect composition in the pipeline.
Definition: solver.hpp:185
Solver::solve
virtual Pipeline solve(const arma::uword dt, const Pipeline &current, const TimeStep &boundaryConditions, const Physics &physics) const
Solve the governing equations.
Solver::m_maxIterations
arma::uword m_maxIterations
Definition: solver.hpp:176
Physics
The Physics class combines EquationOfState and HeatTransfer to calculate the new state of a pipeline ...
Definition: physics.hpp:21
Solver::enableBruteForce
void enableBruteForce()
Enable brute force solver, which always does m_maxIterations iterations.
Solver::m_governingEquationSolver
std::unique_ptr< GoverningEquationSolverBase > m_governingEquationSolver
GoverningEquationSolver instance used for solving the governing equations.
Definition: solver.hpp:182
Solver::~Solver
virtual ~Solver()
Declared to avoid the inline compiler-generated default destructor.
TimeStep
The TimeStep class is a subclass of BoundaryConditions with an extra member to store the timestamp of...
Definition: boundaryconditions.hpp:305
Solver::m_nIterations
arma::uword m_nIterations
Definition: solver.hpp:179
Solver
The Solver class combines GoverningEquationSolver and BatchTracking to advance the governing equation...
Definition: solver.hpp:25
Solver::governingEquationSolver
const GoverningEquationSolverBase & governingEquationSolver() const
Get (const ref) GoverningEquationSolver.
Definition: solver.hpp:154
Solver::m_toleranceType
std::string m_toleranceType
Definition: solver.hpp:162
Config
The Config struct stores all settings for the different parts of the pipeline simulation.
Definition: config.hpp:11
Solver::tolerances
const arma::vec & tolerances() const
Get (const ref) tolerances.
Definition: solver.hpp:152
Solver::setMaxIterations
void setMaxIterations(const arma::uword maxIterations)
Set max iterations.
BatchTracking
A class for calculating the time development of the gas composition from the gas velocity.
Definition: batchtracking.hpp:21
Solver::m_tolerances
arma::vec m_tolerances
Convergence tolerances for each property (flow, pressure and temperature).
Definition: solver.hpp:165
Solver::relaxationFactors
const arma::vec & relaxationFactors() const
Get (const ref) relaxation factors.
Definition: solver.hpp:148
Solver::toleranceType
const std::string & toleranceType() const
Get (const ref) tolerance type.
Definition: solver.hpp:150
Solver::nIterations
arma::uword nIterations() const
Return the number of iterations performed during previous solution attempt.
Definition: solver.hpp:145
BoundaryConditions
The BoundaryConditions class is a container for the boundary conditions at the inlet and outlet of a ...
Definition: boundaryconditions.hpp:27
Solver::Solver
Solver(const arma::uword nGridPoints, const Config &config)
Construct from Config.
GoverningEquationSolverBase
Simple Base class to avoid having to specify template argument for GoverningEquationSolver....
Definition: governingequationsolver.hpp:18