16#include <CoolProp_to_TRUST_Sat_generique.h>
21#define i_it2 std::distance(RR.begin(), &val)
26 fld_name_sat_ = std::string(fluid_name);
27 fluide = std::shared_ptr<AbstractState>(AbstractState::factory(std::string(model_name), fld_name_sat_));
29 Cerr <<
"CoolProp_to_TRUST_Sat_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
34int CoolProp_to_TRUST_Sat_generique::tppi_get_single_sat_p_(SAT enum_prop,
const SpanD P_ou_T, SpanD res,
int ncomp,
int ind,
bool is_liq)
const
37 if (enum_prop == SAT::P_SAT || enum_prop == SAT::P_SAT_DT)
39 assert ((
int)P_ou_T.size() == (
int)res.size());
40 const int sz = (int )res.size();
41 if (enum_prop == SAT::P_SAT)
42 for (
int i = 0; i < sz; i++)
44 fluide->update(CoolProp::QT_INPUTS, 0, P_ou_T[i]);
48 for (
int i = 0; i < sz; i++)
50 double plus_ = EPS, minus_ = EPS;
51 fluide->update(CoolProp::QT_INPUTS, 0, P_ou_T[i] * (1. + EPS));
53 fluide->update(CoolProp::QT_INPUTS, 0, P_ou_T[i] * (1. - EPS));
55 res[i] = (plus_ - minus_) / ( 2 * EPS * P_ou_T[i]);
60 assert (ncomp * (
int)P_ou_T.size() == (
int)res.size());
61 if (ncomp == 1)
return tppi_get_single_sat_p__(enum_prop, P_ou_T, res, is_liq);
64 VectorD temp_((
int)P_ou_T.size());
66 for (
auto& val : RR) val = res[i_it2 * ncomp + ind];
67 tppi_get_single_sat_p__(enum_prop, P_ou_T, RR, is_liq);
68 for (
auto& val : RR) res[i_it2 * ncomp + ind] = val;
72 Cerr <<
"CoolProp_to_TRUST_Sat_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
77int CoolProp_to_TRUST_Sat_generique::tppi_get_single_sat_p__(SAT enum_prop,
const SpanD P, SpanD res,
bool is_liq)
const
81 if (enum_prop == SAT::T_SAT_DP || enum_prop == SAT::LV_SAT_DP || enum_prop == SAT::RHOL_SAT_DP || enum_prop == SAT::RHOV_SAT_DP ||
82 enum_prop == SAT::CPL_SAT_DP || enum_prop == SAT::CPV_SAT_DP || enum_prop == SAT::HL_SAT_DP || enum_prop == SAT::HV_SAT_DP)
83 return FD_derivative_p(enum_prop, P, res, is_liq);
85 const int sz = (int )res.size();
86 if (enum_prop == SAT::LV_SAT)
88 for (
int i = 0; i < sz; i++)
90 fluide->update(CoolProp::PQ_INPUTS, P[i], 1);
91 const double hv_ = fluide->hmass();
92 fluide->update(CoolProp::PQ_INPUTS, P[i], 0);
93 const double hl_ = fluide->hmass();
99 for (
int i = 0; i < sz; i++)
101 fluide->update(CoolProp::PQ_INPUTS, P[i], is_liq ? 0 : 1);
102 if (enum_prop == SAT::T_SAT) res[i] = fluide->T();
103 if (enum_prop == SAT::HL_SAT || enum_prop == SAT::HV_SAT) res[i] = fluide->hmass();
104 if (enum_prop == SAT::RHOL_SAT || enum_prop == SAT::RHOV_SAT) res[i] = fluide->rhomass();
105 if (enum_prop == SAT::CPL_SAT || enum_prop == SAT::CPV_SAT) res[i] = fluide->cpmass();
106 if (enum_prop == SAT::LAMBDA) res[i] = fluide->conductivity();
107 if (enum_prop == SAT::MU) res[i] = fluide->viscosity();
108 if (enum_prop == SAT::SIGMA && user_uniform_sigma_<=0.)
112 const int ph_ = is_liq ? 0 : 1;
113 res[i] = CoolProp::PropsSI(
"surface_tension",
"P", P[i],
"Q", ph_, fld_name_sat_);
115 else if (enum_prop == SAT::SIGMA && user_uniform_sigma_>0.) res[i] = user_uniform_sigma_;
119 Cerr <<
"CoolProp_to_TRUST_Sat_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
124int CoolProp_to_TRUST_Sat_generique::FD_derivative_p(SAT enum_prop,
const SpanD P, SpanD res,
bool is_liq)
const
127 const int sz = (int )res.size();
129 if (enum_prop == SAT::LV_SAT_DP)
131 for (
int i = 0; i < sz; i++)
133 double plus_ = EPS, minus_ = EPS;
134 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. + EPS), 1);
135 plus_ = fluide->hmass();
136 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. - EPS), 1);
137 minus_ = fluide->hmass();
138 const double hv_dp_ = (plus_ - minus_) / ( 2 * EPS * P[i]);
141 plus_ = EPS, minus_ = EPS;
142 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. + EPS), 0);
143 plus_ = fluide->hmass();
144 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. - EPS), 0);
145 minus_ = fluide->hmass();
146 const double hl_dp_ = (plus_ - minus_) / ( 2 * EPS * P[i]);
148 res[i] = hv_dp_ - hl_dp_;
153 for (
int i = 0; i < sz; i++)
155 double plus_ = EPS, minus_ = EPS;
157 is_liq ? fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. + EPS), 0) : fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. + EPS), 1);
158 if (enum_prop == SAT::T_SAT_DP) plus_ = fluide->T();
159 if (enum_prop == SAT::HL_SAT_DP || enum_prop == SAT::HV_SAT_DP) plus_ = fluide->hmass();
160 if (enum_prop == SAT::RHOL_SAT_DP || enum_prop == SAT::RHOV_SAT_DP) plus_ = fluide->rhomass();
161 if (enum_prop == SAT::CPL_SAT_DP || enum_prop == SAT::CPV_SAT_DP) plus_ = fluide->cpmass();
163 is_liq ? fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. - EPS), 0) : fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. - EPS), 1);
164 if (enum_prop == SAT::T_SAT_DP) minus_ = fluide->T();
165 if (enum_prop == SAT::HL_SAT_DP || enum_prop == SAT::HV_SAT_DP) minus_ = fluide->hmass();
166 if (enum_prop == SAT::RHOL_SAT_DP || enum_prop == SAT::RHOV_SAT_DP) minus_ = fluide->rhomass();
167 if (enum_prop == SAT::CPL_SAT_DP || enum_prop == SAT::CPV_SAT_DP) minus_ = fluide->cpmass();
169 res[i] = (plus_ - minus_) / ( 2 * EPS * P[i]);
174 Cerr <<
"CoolProp_to_TRUST_Sat_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
182 assert((
int )sats.size() == 7);
183 const int sz = (int) P.size();
185 SpanD dPTs__ = sats.at(SAT::T_SAT_DP), Hvs__ = sats.at(SAT::HV_SAT), Hls__ = sats.at(SAT::HL_SAT),
186 dPHvs__ = sats.at(SAT::HV_SAT_DP), dPHls__ = sats.at(SAT::HL_SAT_DP), Lvap__ = sats.at(SAT::LV_SAT), dPLvap__ = sats.at(SAT::LV_SAT_DP);
189 for (
auto &itr : sats) assert(ncomp * (
int )P.size() == (
int )itr.second.size());
193 for (
int i = 0; i < sz; i++)
195 fluide->update(CoolProp::PQ_INPUTS, P[i], 0);
196 Hls__[i] = fluide->hmass();
198 fluide->update(CoolProp::PQ_INPUTS, P[i], 1);
199 Hvs__[i] = fluide->hmass();
202 double plus_1_ = EPS, minus_1_ = EPS, plus_2_ = EPS, minus_2_ = EPS;
204 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. + EPS), 0);
205 plus_1_ = fluide->T();
206 plus_2_ = fluide->hmass();
208 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. - EPS), 0);
209 minus_1_ = fluide->T();
210 minus_2_ = fluide->hmass();
212 dPTs__[i] = (plus_1_ - minus_1_) / ( 2 * EPS * P[i]);
213 dPHls__[i] = (plus_2_ - minus_2_) / ( 2 * EPS * P[i]);
215 plus_1_ = EPS, minus_1_ = EPS;
217 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. + EPS), 1);
218 plus_1_ = fluide->hmass();
220 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. - EPS), 1);
221 minus_1_ = fluide->hmass();
223 dPHvs__[i] = (plus_1_ - minus_1_) / ( 2 * EPS * P[i]);
226 Lvap__[i] = Hvs__[i] - Hls__[i];
227 dPLvap__[i] = dPHvs__[i] - dPHls__[i];
231 VectorD dPTs(sz), Hvs(sz), Hls(sz), dPHvs(sz), dPHls(sz), Lvap(sz), dPLvap;
232 SpanD dPTs_(dPTs), Hvs_(Hvs), Hls_(Hls), dPHvs_(dPHvs), dPHls_(dPHls), Lvap_(Lvap), dPLvap_(dPLvap);
234 for (
int i = 0; i < sz; i++)
236 fluide->update(CoolProp::PQ_INPUTS, P[i], 0);
237 Hls_[i] = fluide->hmass();
239 fluide->update(CoolProp::PQ_INPUTS, P[i], 1);
240 Hvs_[i] = fluide->hmass();
243 double plus_1_ = EPS, minus_1_ = EPS, plus_2_ = EPS, minus_2_ = EPS;
245 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. + EPS), 0);
246 plus_1_ = fluide->T();
247 plus_2_ = fluide->hmass();
249 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. - EPS), 0);
250 minus_1_ = fluide->T();
251 minus_2_ = fluide->hmass();
253 dPTs_[i] = (plus_1_ - minus_1_) / ( 2 * EPS * P[i]);
254 dPHls_[i] = (plus_2_ - minus_2_) / ( 2 * EPS * P[i]);
256 plus_1_ = EPS, minus_1_ = EPS;
258 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. + EPS), 1);
259 plus_1_ = fluide->hmass();
261 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. - EPS), 1);
262 minus_1_ = fluide->hmass();
264 dPHvs_[i] = (plus_1_ - minus_1_) / ( 2 * EPS * P[i]);
267 dPTs__[i * ncomp + ind] = dPTs_[i];
268 Hvs__[i * ncomp + ind] = Hvs_[i];
269 Hls__[i * ncomp + ind] = Hls_[i];
270 dPHvs__[i * ncomp + ind] = dPHvs_[i];
271 dPHls__[i * ncomp + ind] = dPHls_[i];
272 Lvap__[i * ncomp + ind] = Hvs_[i] - Hls_[i];
273 dPLvap__[i * ncomp + ind] = dPHvs_[i] - dPHls_[i];
279 Cerr <<
"CoolProp_to_TRUST_Sat_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
287 const SpanD P = input.at(
"pression");
288 const int sz = (int) P.size();
292 for (
auto &itr : sats) assert(ncomp * sz == (
int )itr.second.size());
295 bool has_liq_prop =
false, has_vap_prop =
false;
296 for (
auto &itr : sats)
298 if (itr.first == SAT::T_SAT || itr.first == SAT::SIGMA || itr.first == SAT::HL_SAT || itr.first == SAT::RHOL_SAT || itr.first == SAT::CPL_SAT) has_liq_prop =
true;
302 for (
auto &itr : sats)
304 if (itr.first == SAT::HV_SAT || itr.first == SAT::RHOV_SAT || itr.first == SAT::CPV_SAT) has_vap_prop =
true;
309 for (
int i = 0; i < sz; i++)
311 fluide->update(CoolProp::PQ_INPUTS, P[i], 0);
312 for (
auto &itr : sats)
314 SAT prop_ = itr.first;
315 SpanD span_ = itr.second;
317 if (prop_ == SAT::T_SAT) span_[i] = fluide->T();
318 if (prop_ == SAT::SIGMA) span_[i] = fluide->surface_tension();
320 if (prop_ == SAT::HL_SAT) span_[i] = fluide->hmass();
321 if (prop_ == SAT::RHOL_SAT) span_[i] = fluide->rhomass();
322 if (prop_ == SAT::CPL_SAT) span_[i] = fluide->cpmass();
327 for (
int i = 0; i < sz; i++)
329 fluide->update(CoolProp::PQ_INPUTS, P[i], 1);
330 for (
auto &itr : sats)
332 SAT prop_ = itr.first;
333 SpanD span_ = itr.second;
335 if (prop_ == SAT::HV_SAT) span_[i] = fluide->hmass();
336 if (prop_ == SAT::RHOV_SAT) span_[i] = fluide->rhomass();
337 if (prop_ == SAT::CPV_SAT) span_[i] = fluide->cpmass();
342 bool has_liq_DP =
false, has_vap_DP =
false;
343 for (
auto &itr : sats)
345 if (itr.first == SAT::T_SAT_DP || itr.first == SAT::HL_SAT_DP || itr.first == SAT::RHOL_SAT_DP || itr.first == SAT::CPL_SAT_DP || itr.first == SAT::SIGMA_DP) has_liq_DP =
true;
349 for (
auto &itr : sats)
351 if (itr.first == SAT::HV_SAT_DP || itr.first == SAT::RHOV_SAT_DP || itr.first == SAT::CPV_SAT_DP ) has_vap_DP =
true;
356 for (
int i = 0; i < sz; i++)
358 double plus_T_ = EPS, plus_h_ = EPS, plus_rho_ = EPS, plus_cp_ = EPS, plus_sigma_ = EPS;
359 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. + EPS), 0);
360 for (
auto &itr : sats)
362 SAT prop_ = itr.first;
364 if (prop_ == SAT::T_SAT_DP) plus_T_ = fluide->T();
365 if (prop_ == SAT::HL_SAT_DP) plus_h_ = fluide->hmass();
366 if (prop_ == SAT::RHOL_SAT_DP) plus_rho_ = fluide->rhomass();
367 if (prop_ == SAT::CPL_SAT_DP) plus_cp_ = fluide->cpmass();
368 if (prop_ == SAT::SIGMA_DP) plus_sigma_ = fluide->surface_tension();
371 double minus_T_ = EPS, minus_h_ = EPS, minus_rho_ = EPS, minus_cp_ = EPS, minus_sigma_ = EPS;
372 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. - EPS), 0);
373 for (
auto &itr : sats)
375 SAT prop_ = itr.first;
377 if (prop_ == SAT::T_SAT_DP) minus_T_ = fluide->T();
378 if (prop_ == SAT::HL_SAT_DP) minus_h_ = fluide->hmass();
379 if (prop_ == SAT::RHOL_SAT_DP) minus_rho_ = fluide->rhomass();
380 if (prop_ == SAT::CPL_SAT_DP) minus_cp_ = fluide->cpmass();
381 if (prop_ == SAT::SIGMA_DP) minus_sigma_ = fluide->surface_tension();
383 for (
auto &itr : sats)
385 SAT prop_ = itr.first;
386 SpanD span_ = itr.second;
388 if (prop_ == SAT::T_SAT_DP) span_[i] = (plus_T_ - minus_T_) / ( 2 * EPS * P[i]);
389 if (prop_ == SAT::HL_SAT_DP) span_[i] = (plus_h_ - minus_h_) / ( 2 * EPS * P[i]);
390 if (prop_ == SAT::RHOL_SAT_DP) span_[i] = (plus_rho_ - minus_rho_) / ( 2 * EPS * P[i]);
391 if (prop_ == SAT::CPL_SAT_DP) span_[i] = (plus_cp_ - minus_cp_) / ( 2 * EPS * P[i]);
392 if (prop_ == SAT::SIGMA_DP) span_[i] = (plus_sigma_ - minus_sigma_) / ( 2 * EPS * P[i]);
397 for (
int i = 0; i < sz; i++)
399 double plus_h_ = EPS, plus_rho_ = EPS, plus_cp_ = EPS;
400 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. + EPS), 1);
401 for (
auto &itr : sats)
403 SAT prop_ = itr.first;
405 if (prop_ == SAT::HV_SAT_DP) plus_h_ = fluide->hmass();
406 if (prop_ == SAT::RHOV_SAT_DP) plus_rho_ = fluide->rhomass();
407 if (prop_ == SAT::CPV_SAT_DP) plus_cp_ = fluide->cpmass();
410 double minus_h_ = EPS, minus_rho_ = EPS, minus_cp_ = EPS;
411 fluide->update(CoolProp::PQ_INPUTS, P[i] * (1. - EPS), 1);
412 for (
auto &itr : sats)
414 SAT prop_ = itr.first;
416 if (prop_ == SAT::HV_SAT_DP) minus_h_ = fluide->hmass();
417 if (prop_ == SAT::RHOV_SAT_DP) minus_rho_ = fluide->rhomass();
418 if (prop_ == SAT::CPV_SAT_DP) minus_cp_ = fluide->cpmass();
420 for (
auto &itr : sats)
422 SAT prop_ = itr.first;
423 SpanD span_ = itr.second;
425 if (prop_ == SAT::HV_SAT_DP) span_[i] = (plus_h_ - minus_h_) / ( 2 * EPS * P[i]);
426 if (prop_ == SAT::RHOV_SAT_DP) span_[i] = (plus_rho_ - minus_rho_) / ( 2 * EPS * P[i]);
427 if (prop_ == SAT::CPV_SAT_DP) span_[i] = (plus_cp_ - minus_cp_) / ( 2 * EPS * P[i]);
434 Cerr <<
"CoolProp_to_TRUST_Sat_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
int tppi_get_all_sat_loi_F5(const MSpanD input, MSatSpanD sats, int ncomp=1, int ind=0) const override
int tppi_get_all_flux_interfacial_pb_multiphase(const SpanD P, MSatSpanD sats, int ncomp=1, int ind=0) const override
void set_saturation_generique(const char *const model_name, const char *const fluid_name) override