CoolProp 8.0.0
An open-source fluid property and humid air property database
MeltingCaloric.h
Go to the documentation of this file.
1#ifndef MELTING_CALORIC_H
2#define MELTING_CALORIC_H
3
4#include <cmath>
5#include <cstddef>
6#include <limits>
7#include <memory>
8#include <optional>
9#include <utility>
10#include <vector>
12#include <Eigen/Dense>
13
14namespace CoolProp {
15
16class HelmholtzEOSMixtureBackend; // forward decl
17
21{
22 public:
23 MeltingCaloric() = default;
24
27 void sample(HelmholtzEOSMixtureBackend& H, std::size_t n);
28
29 [[nodiscard]] std::size_t n_samples() const {
30 return m_lnp.size();
31 }
32 [[nodiscard]] double sample_lnp(std::size_t i) const {
33 return m_lnp[i];
34 }
35 [[nodiscard]] double sample_T(std::size_t i) const {
36 return m_T[i];
37 }
38 [[nodiscard]] double sample_rho(std::size_t i) const {
39 return m_rho[i];
40 }
41 [[nodiscard]] double sample_h(std::size_t i) const {
42 return m_h[i];
43 }
44 [[nodiscard]] double sample_s(std::size_t i) const {
45 return m_s[i];
46 }
47
50 [[nodiscard]] bool built() const {
51 return m_built;
52 }
53
54 [[nodiscard]] double lnp_min() const {
55 return m_T_approx ? m_T_approx->xmin() : 0.0;
56 }
57 [[nodiscard]] double lnp_max() const {
58 return m_T_approx ? m_T_approx->xmax() : 0.0;
59 }
60
61 [[nodiscard]] double eval_T(double lnp) const {
62 return m_T_approx ? m_T_approx->eval(lnp) : std::numeric_limits<double>::quiet_NaN();
63 }
64 [[nodiscard]] double eval_rho(double lnp) const {
65 return m_rho_approx ? m_rho_approx->eval(lnp) : std::numeric_limits<double>::quiet_NaN();
66 }
67 [[nodiscard]] double eval_h(double lnp) const {
68 return m_h_approx ? m_h_approx->eval(lnp) : std::numeric_limits<double>::quiet_NaN();
69 }
70 [[nodiscard]] double eval_s(double lnp) const {
71 return m_s_approx ? m_s_approx->eval(lnp) : std::numeric_limits<double>::quiet_NaN();
72 }
73
78 bool seed_for_hs(double s_cache, double h_cache, double& T0, double& rho0) const;
79
82 [[nodiscard]] std::optional<std::pair<double, double>> stamp() const {
83 return m_stamp;
84 }
85
89 [[nodiscard]] double curve_Tmin() const {
90 return m_curve_Tmin;
91 }
92
93 protected:
94 std::vector<double> m_lnp, m_T, m_rho, m_h, m_s;
95
97 bool m_built = false;
98 std::optional<Approx> m_T_approx, m_rho_approx, m_h_approx, m_s_approx;
99 std::optional<std::pair<double, double>> m_stamp;
100 double m_curve_Tmin = 0.0;
101};
102
106std::shared_ptr<MeltingCaloric> get_melting_caloric_cached(HelmholtzEOSMixtureBackend& H);
107
108} // namespace CoolProp
109#endif