TransFlow  0.1.0
A transient pipeline flow simulation library
composition.hpp
1 #pragma once
2 
3 #include <ostream>
4 #include <limits>
5 #include <armadillo>
6 
18 {
19 public:
23  Composition();
24 
29  explicit Composition(const arma::vec& composition);
30 
32  inline double operator()(const arma::uword i) const { return m_composition(i); }
33 
35  inline double& operator()(const arma::uword i) { return m_composition(i); }
36 
37  // user-defined conversion (implicit conversion)
38  // this allows Composition to be a drop-in replacement for the arma::vec
39  // in most cases, which is both positive and negative
46  inline operator arma::vec() const { return m_composition; }
47 
49  inline const arma::vec& vec() const { return m_composition; }
50 
52  inline arma::vec vec() { return m_composition; }
53 
63  friend std::ostream& operator << (std::ostream &out, const Composition& c);
64 
66  friend bool operator==(const Composition& lhs, const Composition& rhs);
67 
69  bool isNormalized() const;
70 
73 
75  Composition normalized() const;
76 
78  const static arma::uword n_elem = 10;
79 
81  static const Composition defaultComposition; // initialized in .cpp
82 
83  // getters
84  inline double C1() const { return m_composition[0]; }
85  inline double C2() const { return m_composition[1]; }
86  inline double C3() const { return m_composition[2]; }
87  inline double iC4() const { return m_composition[3]; }
88  inline double nC4() const { return m_composition[4]; }
89  inline double iC5() const { return m_composition[5]; }
90  inline double nC5() const { return m_composition[6]; }
91  inline double C6() const { return m_composition[7]; }
92  inline double N2() const { return m_composition[8]; }
93  inline double CO2() const { return m_composition[9]; }
94 
95  // setters
96  inline double& C1() { return m_composition[0]; }
97  inline double& C2() { return m_composition[1]; }
98  inline double& C3() { return m_composition[2]; }
99  inline double& iC4() { return m_composition[3]; }
100  inline double& nC4() { return m_composition[4]; }
101  inline double& iC5() { return m_composition[5]; }
102  inline double& nC5() { return m_composition[6]; }
103  inline double& C6() { return m_composition[7]; }
104  inline double& N2() { return m_composition[8]; }
105  inline double& CO2() { return m_composition[9]; }
106 
107 private:
115  arma::vec::fixed<10> m_composition;
116 };
Composition::iC4
double iC4() const
Get iC4 fraction.
Definition: composition.hpp:87
Composition::C2
double C2() const
Get C2 fraction.
Definition: composition.hpp:85
Composition::operator==
friend bool operator==(const Composition &lhs, const Composition &rhs)
Overloaded comparison operator.
Composition::nC5
double nC5() const
Get nC5 fraction.
Definition: composition.hpp:90
Composition::N2
double N2() const
Get N2 fraction.
Definition: composition.hpp:92
Composition::isNormalized
bool isNormalized() const
Returns true if composition is normalized.
Composition::Composition
Composition()
Empty constructor. Returns composition with all fractions set to zero.
Composition::C3
double & C3()
Get/set C3 fraction.
Definition: composition.hpp:98
Composition::iC5
double & iC5()
Get/set iC5 fraction.
Definition: composition.hpp:101
Composition::C2
double & C2()
Get/set C2 fraction.
Definition: composition.hpp:97
Composition::defaultComposition
static const Composition defaultComposition
Default composition.
Definition: composition.hpp:81
Composition::C1
double C1() const
Get C1 fraction.
Definition: composition.hpp:84
Composition::operator()
double operator()(const arma::uword i) const
Get fraction of component i.
Definition: composition.hpp:32
Composition::C6
double C6() const
Get C6+ fraction.
Definition: composition.hpp:91
Composition::n_elem
const static arma::uword n_elem
Number of elements (fixed)
Definition: composition.hpp:78
Composition::normalized
Composition normalized() const
Returns normalized copy (self is const.).
Composition::nC4
double & nC4()
Get/set nC4 fraction.
Definition: composition.hpp:100
Composition::CO2
double & CO2()
Get/set CO2 fraction.
Definition: composition.hpp:105
Composition::CO2
double CO2() const
Get CO2 fraction.
Definition: composition.hpp:93
Composition::normalize
Composition & normalize()
Normalizes the composition and returns refeference.
Composition::operator<<
friend std::ostream & operator<<(std::ostream &out, const Composition &c)
For pretty printing.
Composition::N2
double & N2()
Get/set N2 fraction.
Definition: composition.hpp:104
Composition::nC4
double nC4() const
Get nC4 fraction.
Definition: composition.hpp:88
Composition::iC4
double & iC4()
Get/set iC4 fraction.
Definition: composition.hpp:99
Composition::C1
double & C1()
Get/set C1 fraction.
Definition: composition.hpp:96
Composition::C3
double C3() const
Get C3 fraction.
Definition: composition.hpp:86
Composition::vec
const arma::vec & vec() const
Get (const ref) member arma::vec.
Definition: composition.hpp:49
Composition::C6
double & C6()
Get/set C6+ fraction.
Definition: composition.hpp:103
Composition
The Composition class is a simple container class for the composition of natural gas....
Definition: composition.hpp:17
Composition::vec
arma::vec vec()
Get (copy of) member arma::vec.
Definition: composition.hpp:52
Composition::m_composition
arma::vec::fixed< 10 > m_composition
Store composition as fixed size vector, so the size can never be changed. Will throw error if we try ...
Definition: composition.hpp:115
Composition::operator()
double & operator()(const arma::uword i)
Get/set fraction of component i.
Definition: composition.hpp:35
Composition::nC5
double & nC5()
Get/set nC5 fraction.
Definition: composition.hpp:102
Composition::iC5
double iC5() const
Get iC5 fraction.
Definition: composition.hpp:89