CoolProp 8.0.0
An open-source fluid property and humid air property database
BicubicBackend.h
Go to the documentation of this file.
1#ifndef BICUBICBACKEND_H
2#define BICUBICBACKEND_H
3
4#include <utility>
5
6#include "TabularBackends.h"
9#include "Eigen/Core"
10
11namespace CoolProp {
12
62using mat = std::vector<std::vector<double>>;
64{
65 public:
67 BicubicBackend(shared_ptr<CoolProp::AbstractState> AS) : TabularBackend(std::move(AS)) {
69 // If a pure fluid or a predefined mixture, don't need to set fractions, go ahead and build
70 if (!this->AS->get_mole_fractions().empty()) {
74 dataset->build_coeffs(single_phase_logph, dataset->coeffs_ph);
75 dataset->build_coeffs(single_phase_logpT, dataset->coeffs_pT);
76 is_mixture = (this->AS->get_mole_fractions().size() > 1);
77 }
78 };
79 void set_mole_fractions(const std::vector<CoolPropDbl>& mole_fractions) override {
80 this->AS->set_mole_fractions(mole_fractions);
81 is_mixture = true;
82 // Check the tables and build if necessary
84 // For mixtures, the construction of the coefficients is delayed until this
85 // function so that the set_mole_fractions function can be called
88 dataset->build_coeffs(single_phase_logph, dataset->coeffs_ph);
89 dataset->build_coeffs(single_phase_logpT, dataset->coeffs_pT);
90 };
91 std::string backend_name() override {
93 }
94
108 double evaluate_single_phase_derivative(SinglePhaseGriddedTableData& table, std::vector<std::vector<CellCoeffs>>& coeffs, parameters output,
109 double x, double y, std::size_t i, std::size_t j, std::size_t Nx, std::size_t Ny);
110 double evaluate_single_phase_phmolar_derivative(parameters output, std::size_t i, std::size_t j, std::size_t Nx, std::size_t Ny) override {
112 };
113 double evaluate_single_phase_pT_derivative(parameters output, std::size_t i, std::size_t j, std::size_t Nx, std::size_t Ny) override {
115 };
116
128 double evaluate_single_phase(const SinglePhaseGriddedTableData& table, const std::vector<std::vector<CellCoeffs>>& coeffs,
129 const parameters output, const double x, const double y, const std::size_t i, const std::size_t j);
130 double evaluate_single_phase_phmolar(parameters output, std::size_t i, std::size_t j) override {
132 };
133 double evaluate_single_phase_pT(parameters output, std::size_t i, std::size_t j) override {
135 };
136
137 void find_native_nearest_good_indices(SinglePhaseGriddedTableData& table, const std::vector<std::vector<CellCoeffs>>& coeffs, double x, double y,
138 std::size_t& i, std::size_t& j) override;
139
141 void find_nearest_neighbor(SinglePhaseGriddedTableData& table, const std::vector<std::vector<CellCoeffs>>& coeffs, const parameters variable1,
142 const double value1, const parameters otherkey, const double otherval, std::size_t& i, std::size_t& j) override;
143
153 double evaluate_single_phase_transport(SinglePhaseGriddedTableData& table, parameters output, double x, double y, std::size_t i, std::size_t j);
154
155 double evaluate_single_phase_phmolar_transport(parameters output, std::size_t i, std::size_t j) override {
157 };
158 double evaluate_single_phase_pT_transport(parameters output, std::size_t i, std::size_t j) override {
160 };
161
172 void invert_single_phase_x(const SinglePhaseGriddedTableData& table, const std::vector<std::vector<CellCoeffs>>& coeffs, parameters other_key,
173 double other, double y, std::size_t i, std::size_t j) override;
174 void invert_single_phase_y(const SinglePhaseGriddedTableData& table, const std::vector<std::vector<CellCoeffs>>& coeffs, parameters other_key,
175 double other, double x, std::size_t i, std::size_t j) override;
176};
177
178} // namespace CoolProp
179
180#endif // BICUBICBACKEND_H