16#include <CoolProp_to_TRUST_generique.h>
21#define i_it std::distance(TT.begin(), &val)
22#define bi_it std::distance(bTT.begin(), &bval)
27 fluide = std::shared_ptr<AbstractState>(AbstractState::factory(std::string(model_name), std::string(fluid_name)));
29 Cerr <<
"CoolProp_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
34int CoolProp_to_TRUST_generique::tppi_get_single_property_T_(Loi_en_T enum_prop,
const SpanD P,
const SpanD T, SpanD R,
int ncomp,
int ind)
const
37 assert((
int )T.size() == ncomp * (
int )P.size() && (
int )T.size() == ncomp * (
int )R.size());
38 if (ncomp == 1)
return tppi_get_single_property_T__(enum_prop, P, T, R);
41 VectorD temp_((
int)P.size());
43 for (
auto& val : TT) val = T[i_it * ncomp + ind];
44 return tppi_get_single_property_T__(enum_prop, P, TT, R);
47 Cerr <<
"CoolProp_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
52int CoolProp_to_TRUST_generique::tppi_get_single_property_T__(Loi_en_T enum_prop,
const SpanD P,
const SpanD T, SpanD R)
const
55 const int sz = (int )R.size();
57 if (enum_prop == Loi_en_T::MU_DP || enum_prop == Loi_en_T::LAMBDA_DP || enum_prop == Loi_en_T::SIGMA_DP)
58 return FD_derivative_pT__(enum_prop,P, T, R);
60 if (enum_prop == Loi_en_T::MU_DT || enum_prop == Loi_en_T::LAMBDA_DT || enum_prop == Loi_en_T::SIGMA_DT)
61 return FD_derivative_pT__(enum_prop,P, T, R,
false );
63 for (
int i = 0; i < sz; i++)
65 fluide->update(CoolProp::PT_INPUTS, P[i], T[i]);
67 if (enum_prop == Loi_en_T::RHO) R[i] = fluide->rhomass();
68 if (enum_prop == Loi_en_T::RHO_DP) R[i] = fluide->first_partial_deriv(CoolProp::iDmass, CoolProp::iP, CoolProp::iT);
69 if (enum_prop == Loi_en_T::RHO_DT) R[i] = fluide->first_partial_deriv(CoolProp::iDmass, CoolProp::iT, CoolProp::iP);
71 if (enum_prop == Loi_en_T::H) R[i] = fluide->hmass();
72 if (enum_prop == Loi_en_T::H_DP) R[i] = fluide->first_partial_deriv(CoolProp::iHmass, CoolProp::iP, CoolProp::iT);
73 if (enum_prop == Loi_en_T::H_DT) R[i] = fluide->first_partial_deriv(CoolProp::iHmass, CoolProp::iT, CoolProp::iP);
75 if (enum_prop == Loi_en_T::CP) R[i] = fluide->cpmass();
76 if (enum_prop == Loi_en_T::CP_DP) R[i] = fluide->first_partial_deriv(CoolProp::iCpmass, CoolProp::iP, CoolProp::iT);
77 if (enum_prop == Loi_en_T::CP_DT) R[i] = fluide->first_partial_deriv(CoolProp::iCpmass, CoolProp::iT, CoolProp::iP);
79 if (enum_prop == Loi_en_T::MU) R[i] = fluide->viscosity();
80 if (enum_prop == Loi_en_T::LAMBDA) R[i] = fluide->conductivity();
81 if (enum_prop == Loi_en_T::BETA) R[i] = fluide->isobaric_expansion_coefficient();
82 if (enum_prop == Loi_en_T::SIGMA) R[i] = fluide->surface_tension();
86 Cerr <<
"CoolProp_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
91int CoolProp_to_TRUST_generique::FD_derivative_pT__(Loi_en_T enum_prop,
const SpanD P,
const SpanD T, SpanD R,
bool wrt_p)
const
94 const int sz = (int )R.size();
95 for (
int i = 0; i < sz; i++)
97 double plus_ = EPS, minus_ = EPS;
99 wrt_p ? fluide->update(CoolProp::PT_INPUTS, P[i] * (1. + EPS), T[i]) : fluide->update(CoolProp::PT_INPUTS, P[i], T[i] * (1. + EPS));
101 if (enum_prop == Loi_en_T::MU_DP || enum_prop == Loi_en_T::MU_DT) plus_ = fluide->viscosity();
102 if (enum_prop == Loi_en_T::LAMBDA_DP || enum_prop == Loi_en_T::LAMBDA_DT) plus_ = fluide->conductivity();
103 if (enum_prop == Loi_en_T::SIGMA_DP || enum_prop == Loi_en_T::SIGMA_DT) plus_ = fluide->surface_tension();
105 wrt_p ? fluide->update(CoolProp::PT_INPUTS, P[i] * (1. - EPS), T[i]) : fluide->update(CoolProp::PT_INPUTS, P[i], T[i] * (1. - EPS));
107 if (enum_prop == Loi_en_T::MU_DP || enum_prop == Loi_en_T::MU_DT) minus_ = fluide->viscosity();
108 if (enum_prop == Loi_en_T::LAMBDA_DP || enum_prop == Loi_en_T::LAMBDA_DT) minus_ = fluide->conductivity();
109 if (enum_prop == Loi_en_T::SIGMA_DP || enum_prop == Loi_en_T::SIGMA_DT) minus_ = fluide->surface_tension();
111 R[i] = wrt_p ? ((plus_ - minus_) / ( 2 * EPS * P[i])) : ((plus_ - minus_) / ( 2 * EPS * T[i]));
115 Cerr <<
"CoolProp_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
120int CoolProp_to_TRUST_generique::tppi_get_single_property_h_(Loi_en_h enum_prop,
const SpanD P,
const SpanD H, SpanD R,
int ncomp,
int ind)
const
123 assert((
int )H.size() == ncomp * (
int )P.size() && (
int )H.size() == ncomp * (
int )R.size());
124 if (ncomp == 1)
return tppi_get_single_property_h__(enum_prop, P, H, R);
127 VectorD temp_((
int)P.size());
129 for (
auto& val : TT) val = H[i_it * ncomp + ind];
130 return tppi_get_single_property_h__(enum_prop, P, TT, R);
134 Cerr <<
"CoolProp_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
139int CoolProp_to_TRUST_generique::tppi_get_single_property_h__(Loi_en_h enum_prop,
const SpanD P,
const SpanD H, SpanD R)
const
142 const int sz = (int )R.size();
144 if (enum_prop == Loi_en_h::MU_DP || enum_prop == Loi_en_h::LAMBDA_DP || enum_prop == Loi_en_h::SIGMA_DP)
145 return FD_derivative_ph__(enum_prop,P, H, R);
147 if (enum_prop == Loi_en_h::MU_DH || enum_prop == Loi_en_h::LAMBDA_DH || enum_prop == Loi_en_h::SIGMA_DH)
148 return FD_derivative_ph__(enum_prop,P, H, R,
false );
150 for (
int i = 0; i < sz; i++)
152 fluide->update(CoolProp::HmassP_INPUTS, H[i], P[i]);
154 if (enum_prop == Loi_en_h::RHO) R[i] = fluide->rhomass();
155 if (enum_prop == Loi_en_h::RHO_DP) R[i] = fluide->first_partial_deriv(CoolProp::iDmass, CoolProp::iP, CoolProp::iHmass);
156 if (enum_prop == Loi_en_h::RHO_DH) R[i] = fluide->first_partial_deriv(CoolProp::iDmass, CoolProp::iHmass, CoolProp::iP);
158 if (enum_prop == Loi_en_h::T) R[i] = fluide->T();
159 if (enum_prop == Loi_en_h::T_DP) R[i] = fluide->first_partial_deriv(CoolProp::iT, CoolProp::iP, CoolProp::iHmass);
160 if (enum_prop == Loi_en_h::T_DH) R[i] = fluide->first_partial_deriv(CoolProp::iT, CoolProp::iHmass, CoolProp::iP);
162 if (enum_prop == Loi_en_h::CP) R[i] = fluide->cpmass();
163 if (enum_prop == Loi_en_h::CP_DP) R[i] = fluide->first_partial_deriv(CoolProp::iCpmass, CoolProp::iP, CoolProp::iHmass);
164 if (enum_prop == Loi_en_h::CP_DH) R[i] = fluide->first_partial_deriv(CoolProp::iCpmass, CoolProp::iHmass, CoolProp::iP);
166 if (enum_prop == Loi_en_h::MU) R[i] = fluide->viscosity();
167 if (enum_prop == Loi_en_h::LAMBDA) R[i] = fluide->conductivity();
168 if (enum_prop == Loi_en_h::BETA) R[i] = fluide->isobaric_expansion_coefficient();
169 if (enum_prop == Loi_en_h::SIGMA) R[i] = fluide->surface_tension();
173 Cerr <<
"CoolProp_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
178int CoolProp_to_TRUST_generique::FD_derivative_ph__(Loi_en_h enum_prop,
const SpanD P,
const SpanD H, SpanD R,
bool wrt_p)
const
181 const int sz = (int )R.size();
182 for (
int i = 0; i < sz; i++)
184 double plus_ = EPS, minus_ = EPS;
186 wrt_p ? fluide->update(CoolProp::HmassP_INPUTS, H[i], P[i] * (1. + EPS)) : fluide->update(CoolProp::HmassP_INPUTS, H[i] * (1. + EPS), P[i]);
188 if (enum_prop == Loi_en_h::MU_DP || enum_prop == Loi_en_h::MU_DH) plus_ = fluide->viscosity();
189 if (enum_prop == Loi_en_h::LAMBDA_DP || enum_prop == Loi_en_h::LAMBDA_DH) plus_ = fluide->conductivity();
190 if (enum_prop == Loi_en_h::SIGMA_DP || enum_prop == Loi_en_h::SIGMA_DH) plus_ = fluide->surface_tension();
192 wrt_p ? fluide->update(CoolProp::HmassP_INPUTS, H[i], P[i] * (1. - EPS)) : fluide->update(CoolProp::HmassP_INPUTS, H[i] * (1. - EPS), P[i]);
194 if (enum_prop == Loi_en_h::MU_DP || enum_prop == Loi_en_h::MU_DH) minus_ = fluide->viscosity();
195 if (enum_prop == Loi_en_h::LAMBDA_DP || enum_prop == Loi_en_h::LAMBDA_DH) minus_ = fluide->conductivity();
196 if (enum_prop == Loi_en_h::SIGMA_DP || enum_prop == Loi_en_h::SIGMA_DH) minus_ = fluide->surface_tension();
198 R[i] = wrt_p ? ((plus_ - minus_) / ( 2 * EPS * P[i])) : ((plus_ - minus_) / ( 2 * EPS * H[i]));
202 Cerr <<
"CoolProp_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
207int CoolProp_to_TRUST_generique::tppi_get_all_properties_T__(
const MSpanD input, MLoiSpanD prop)
const
210 const SpanD T = input.at(
"temperature"), P = input.at(
"pressure");
211 const int sz = (int ) P.size();
212 for (
int i = 0; i < sz; i++)
214 fluide->update(CoolProp::PT_INPUTS, P[i], T[i]);
215 for (
auto &itr : prop)
217 Loi_en_T prop_ = itr.first;
218 SpanD span_ = itr.second;
220 if (prop_ == Loi_en_T::RHO) span_[i] = fluide->rhomass();
221 else if (prop_ == Loi_en_T::RHO_DP) span_[i] = fluide->first_partial_deriv(CoolProp::iDmass, CoolProp::iP, CoolProp::iT);
222 else if (prop_ == Loi_en_T::RHO_DT) span_[i] = fluide->first_partial_deriv(CoolProp::iDmass, CoolProp::iT, CoolProp::iP);
223 else if (prop_ == Loi_en_T::H) span_[i] = fluide->hmass();
224 else if (prop_ == Loi_en_T::H_DP) span_[i] = fluide->first_partial_deriv(CoolProp::iHmass, CoolProp::iP, CoolProp::iT);
225 else if (prop_ == Loi_en_T::H_DT) span_[i] = fluide->first_partial_deriv(CoolProp::iHmass, CoolProp::iT, CoolProp::iP);
226 else if (prop_ == Loi_en_T::CP) span_[i] = fluide->cpmass();
227 else if (prop_ == Loi_en_T::CP_DP) span_[i] = fluide->first_partial_deriv(CoolProp::iCpmass, CoolProp::iP, CoolProp::iT);
228 else if (prop_ == Loi_en_T::CP_DT) span_[i] = fluide->first_partial_deriv(CoolProp::iCpmass, CoolProp::iT, CoolProp::iP);
229 else if (prop_ == Loi_en_T::MU) span_[i] = fluide->viscosity();
230 else if (prop_ == Loi_en_T::LAMBDA) span_[i] = fluide->conductivity();
231 else if (prop_ == Loi_en_T::BETA) span_[i] = fluide->isobaric_expansion_coefficient();
232 else if (prop_ == Loi_en_T::SIGMA) span_[i] = fluide->surface_tension();
238 Cerr <<
"CoolProp_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
243int CoolProp_to_TRUST_generique::tppi_get_all_properties_T_IF97__(
const MSpanD input, MLoiSpanD prop)
const
246 const SpanD T = input.at(
"temperature"), P = input.at(
"pressure");
247 const int sz = (int ) P.size();
249 bool has_prop =
false;
250 for (
auto &itr : prop)
251 if (itr.first == Loi_en_T::RHO || itr.first == Loi_en_T::H || itr.first == Loi_en_T::CP||
252 itr.first == Loi_en_T::MU || itr.first == Loi_en_T::LAMBDA || itr.first == Loi_en_T::BETA || itr.first == Loi_en_T::SIGMA)
258 bool has_beta =
false;
259 for (
auto &itr : prop)
260 if (itr.first == Loi_en_T::BETA)
267 for (
int i = 0; i < sz; i++)
269 fluide->update(CoolProp::PT_INPUTS, P[i], T[i]);
270 for (
auto &itr : prop)
272 Loi_en_T prop_ = itr.first;
273 SpanD span_ = itr.second;
275 if (prop_ == Loi_en_T::RHO) span_[i] = fluide->rhomass();
276 if (prop_ == Loi_en_T::H) span_[i] = fluide->hmass();
277 if (prop_ == Loi_en_T::CP) span_[i] = fluide->cpmass();
278 if (prop_ == Loi_en_T::MU) span_[i] = fluide->viscosity();
279 if (prop_ == Loi_en_T::LAMBDA) span_[i] = fluide->conductivity();
280 if (prop_ == Loi_en_T::SIGMA) span_[i] = fluide->surface_tension();
284 if (prop_ == Loi_en_T::BETA && has_beta)
286 const double rho_ = fluide->rhomass();
287 fluide->update(CoolProp::PT_INPUTS, P[i], T[i] * (1. + EPS));
288 const double plus_rho_ = fluide->rhomass();
289 fluide->update(CoolProp::PT_INPUTS, P[i], T[i] * (1. - EPS));
290 const double minus_rho_ = fluide->rhomass();
291 const double drho_dt_ = (plus_rho_ - minus_rho_) / ( 2 * EPS * T[i]);
292 span_[i] = drho_dt_ / rho_;
298 bool has_DP_DH =
false;
299 for (
auto &itr : prop)
300 if (itr.first == Loi_en_T::RHO_DP || itr.first == Loi_en_T::H_DP || itr.first == Loi_en_T::CP_DP ||
301 itr.first == Loi_en_T::RHO_DT || itr.first == Loi_en_T::H_DT || itr.first == Loi_en_T::CP_DT)
308 for (
int i = 0; i < sz; i++)
311 double plus_rho_ = EPS, plus_H_ = EPS, plus_cp_ = EPS;
312 fluide->update(CoolProp::PT_INPUTS, P[i] * (1. + EPS), T[i]);
313 for (
auto &itr : prop)
315 Loi_en_T prop_ = itr.first;
316 if (prop_ == Loi_en_T::RHO_DP) plus_rho_ = fluide->rhomass();
317 if (prop_ == Loi_en_T::H_DP) plus_H_ = fluide->hmass();
318 if (prop_ == Loi_en_T::CP_DP) plus_cp_ = fluide->cpmass();
321 double minus_rho_ = EPS, minus_H_ = EPS, minus_cp_ = EPS;
322 fluide->update(CoolProp::PT_INPUTS, P[i] * (1. - EPS), T[i]);
323 for (
auto &itr : prop)
325 Loi_en_T prop_ = itr.first;
326 if (prop_ == Loi_en_T::RHO_DP) minus_rho_ = fluide->rhomass();
327 if (prop_ == Loi_en_T::H_DP) minus_H_ = fluide->hmass();
328 if (prop_ == Loi_en_T::CP_DP) minus_cp_ = fluide->cpmass();
331 for (
auto &itr : prop)
333 Loi_en_T prop_ = itr.first;
334 SpanD span_ = itr.second;
336 if (prop_ == Loi_en_T::RHO_DP) span_[i] = (plus_rho_ - minus_rho_) / ( 2 * EPS * P[i]);
337 if (prop_ == Loi_en_T::H_DP) span_[i] = (plus_H_ - minus_H_) / ( 2 * EPS * P[i]);
338 if (prop_ == Loi_en_T::CP_DP) span_[i] = (plus_cp_ - minus_cp_) / ( 2 * EPS * P[i]);
342 plus_rho_ = EPS, plus_H_ = EPS, plus_cp_ = EPS;
343 fluide->update(CoolProp::PT_INPUTS, P[i], T[i] * (1. + EPS));
344 for (
auto &itr : prop)
346 Loi_en_T prop_ = itr.first;
347 if (prop_ == Loi_en_T::RHO_DT) plus_rho_ = fluide->rhomass();
348 if (prop_ == Loi_en_T::H_DT) plus_H_ = fluide->hmass();
349 if (prop_ == Loi_en_T::CP_DT) plus_cp_ = fluide->cpmass();
352 minus_rho_ = EPS, minus_H_ = EPS, minus_cp_ = EPS;
353 fluide->update(CoolProp::PT_INPUTS, P[i], T[i] * (1. - EPS));
354 for (
auto &itr : prop)
356 Loi_en_T prop_ = itr.first;
357 if (prop_ == Loi_en_T::RHO_DT) minus_rho_ = fluide->rhomass();
358 if (prop_ == Loi_en_T::H_DT) minus_H_ = fluide->hmass();
359 if (prop_ == Loi_en_T::CP_DT) minus_cp_ = fluide->cpmass();
362 for (
auto &itr : prop)
364 Loi_en_T prop_ = itr.first;
365 SpanD span_ = itr.second;
367 if (prop_ == Loi_en_T::RHO_DT) span_[i] = (plus_rho_ - minus_rho_) / ( 2 * EPS * T[i]);
368 if (prop_ == Loi_en_T::H_DT) span_[i] = (plus_H_ - minus_H_) / ( 2 * EPS * T[i]);
369 if (prop_ == Loi_en_T::CP_DT) span_[i] = (plus_cp_ - minus_cp_) / ( 2 * EPS * T[i]);
375 Cerr <<
"CoolProp_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
384 const SpanD T = input.at(
"temperature"), P = input.at(
"pressure");
387 assert((
int )prop.size() == 4 && (
int )input.size() == 2);
388 assert((
int )T.size() == ncomp * (
int )P.size());
389 for (
auto& itr : prop) assert((
int )T.size() == ncomp * (
int )itr.second.size());
395 (fluide->backend_name() ==
"IF97Backend") ? tppi_get_all_properties_T_IF97__(input,prop) : tppi_get_all_properties_T__(input,prop);
398 VectorD temp_((
int)P.size());
400 for (
auto& val : TT) val = T[i_it * ncomp + ind];
401 MSpanD input_ = { {
"temperature", TT }, {
"pressure", P }};
403 (fluide->backend_name() ==
"IF97Backend") ? tppi_get_all_properties_T_IF97__(input_,prop) : tppi_get_all_properties_T__(input_,prop);
410 Cerr <<
"CoolProp_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
418 const SpanD T = input.at(
"temperature"), P = input.at(
"pressure"), bT = input.at(
"bord_temperature"), bP = input.at(
"bord_pressure");
421 assert( (
int )input.size() == 4 && (
int )inter.size() == 6 && (
int )bord.size() == 2);
422 assert ((
int )bT.size() == ncomp * (
int )bP.size() && (
int )T.size() == ncomp * (
int )P.size());
423 for (
auto& itr : inter) assert((
int )T.size() == ncomp * (
int )itr.second.size());
424 for (
auto& itr : bord) assert((
int )bT.size() == ncomp * (
int )itr.second.size());
431 MSpanD input_int_ = { {
"temperature", T }, {
"pressure", P }};
432 MSpanD input_bord_ = { {
"temperature", bT }, {
"pressure", bP }};
433 if ((fluide->backend_name() ==
"IF97Backend"))
435 tppi_get_all_properties_T_IF97__(input_int_,inter);
436 tppi_get_all_properties_T_IF97__(input_bord_,bord);
440 tppi_get_all_properties_T__(input_int_,inter);
441 tppi_get_all_properties_T__(input_bord_,bord);
446 VectorD temp_((
int)P.size()), btemp_((
int)bP.size());
447 SpanD TT(temp_), bTT(btemp_);
448 for (
auto& val : TT) val = T[i_it * ncomp + ind];
449 for (
auto& bval : bTT) bval = bT[bi_it * ncomp + ind];
451 MSpanD input_int_ = { {
"temperature", TT }, {
"pressure", P }};
452 MSpanD input_bord_ = { {
"temperature", bTT }, {
"pressure", bP }};
453 if ((fluide->backend_name() ==
"IF97Backend"))
455 tppi_get_all_properties_T_IF97__(input_int_,inter);
456 tppi_get_all_properties_T_IF97__(input_bord_,bord);
460 tppi_get_all_properties_T__(input_int_,inter);
461 tppi_get_all_properties_T__(input_bord_,bord);
469 Cerr <<
"CoolProp_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
474int CoolProp_to_TRUST_generique::tppi_get_all_properties_h_IF97__(
const MSpanD input, MLoiSpanD_h prop)
const
477 const SpanD P = input.at(
"pression"), H = input.at(
"enthalpie");
478 const int sz = (int ) P.size();
480 bool has_prop =
false;
481 for (
auto &itr : prop)
482 if (itr.first == Loi_en_h::RHO || itr.first == Loi_en_h::T || itr.first == Loi_en_h::CP||
483 itr.first == Loi_en_h::MU || itr.first == Loi_en_h::LAMBDA || itr.first == Loi_en_h::BETA || itr.first == Loi_en_h::SIGMA)
490 for (
int i = 0; i < sz; i++)
492 fluide->update(CoolProp::HmassP_INPUTS, H[i], P[i]);
493 for (
auto &itr : prop)
495 Loi_en_h prop_ = itr.first;
496 SpanD span_ = itr.second;
498 if (prop_ == Loi_en_h::RHO) span_[i] = fluide->rhomass();
499 if (prop_ == Loi_en_h::T) span_[i] = fluide->T();
500 if (prop_ == Loi_en_h::CP) span_[i] = fluide->cpmass();
501 if (prop_ == Loi_en_h::MU) span_[i] = fluide->viscosity();
502 if (prop_ == Loi_en_h::LAMBDA) span_[i] = fluide->conductivity();
503 if (prop_ == Loi_en_h::BETA) span_[i] = fluide->isobaric_expansion_coefficient();
504 if (prop_ == Loi_en_h::SIGMA) span_[i] = fluide->surface_tension();
509 bool has_DP =
false, has_DH =
false;
510 for (
auto &itr : prop)
511 if (itr.first == Loi_en_h::RHO_DP || itr.first == Loi_en_h::T_DP || itr.first == Loi_en_h::CP_DP ||
512 itr.first == Loi_en_h::MU_DP || itr.first == Loi_en_h::LAMBDA_DP || itr.first == Loi_en_h::SIGMA_DP)
518 for (
auto &itr : prop)
519 if (itr.first == Loi_en_h::RHO_DH || itr.first == Loi_en_h::T_DH || itr.first == Loi_en_h::CP_DH ||
520 itr.first == Loi_en_h::MU_DH || itr.first == Loi_en_h::LAMBDA_DH || itr.first == Loi_en_h::SIGMA_DH)
527 for (
int i = 0; i < sz; i++)
529 double plus_rho_ = EPS, plus_T_ = EPS, plus_cp_ = EPS, plus_mu_ = EPS, plus_lambda_ = EPS, plus_sigma_ = EPS;
530 fluide->update(CoolProp::HmassP_INPUTS, H[i], P[i] * (1. + EPS));
531 for (
auto &itr : prop)
533 Loi_en_h prop_ = itr.first;
534 if (prop_ == Loi_en_h::RHO_DP) plus_rho_ = fluide->rhomass();
535 if (prop_ == Loi_en_h::T_DP) plus_T_ = fluide->T();
536 if (prop_ == Loi_en_h::CP_DP) plus_cp_ = fluide->cpmass();
537 if (prop_ == Loi_en_h::MU_DP) plus_mu_ = fluide->viscosity();
538 if (prop_ == Loi_en_h::LAMBDA_DP) plus_lambda_ = fluide->conductivity();
539 if (prop_ == Loi_en_h::SIGMA_DP) plus_sigma_ = fluide->surface_tension();
542 double minus_rho_ = EPS, minus_T_ = EPS, minus_cp_ = EPS, minus_mu_ = EPS, minus_lambda_ = EPS, minus_sigma_ = EPS;
543 fluide->update(CoolProp::HmassP_INPUTS, H[i], P[i] * (1. - EPS));
544 for (
auto &itr : prop)
546 Loi_en_h prop_ = itr.first;
547 if (prop_ == Loi_en_h::RHO_DP) minus_rho_ = fluide->rhomass();
548 if (prop_ == Loi_en_h::T_DP) minus_T_ = fluide->T();
549 if (prop_ == Loi_en_h::CP_DP) minus_cp_ = fluide->cpmass();
550 if (prop_ == Loi_en_h::MU_DP) minus_mu_ = fluide->viscosity();
551 if (prop_ == Loi_en_h::LAMBDA_DP) minus_lambda_ = fluide->conductivity();
552 if (prop_ == Loi_en_h::SIGMA_DP) minus_sigma_ = fluide->surface_tension();
555 for (
auto &itr : prop)
557 Loi_en_h prop_ = itr.first;
558 SpanD span_ = itr.second;
560 if (prop_ == Loi_en_h::RHO_DP) span_[i] = (plus_rho_ - minus_rho_) / ( 2 * EPS * P[i]);
561 if (prop_ == Loi_en_h::T_DP) span_[i] = (plus_T_ - minus_T_) / ( 2 * EPS * P[i]);
562 if (prop_ == Loi_en_h::CP_DP) span_[i] = (plus_cp_ - minus_cp_) / ( 2 * EPS * P[i]);
563 if (prop_ == Loi_en_h::MU_DP) span_[i] = (plus_mu_ - minus_mu_) / ( 2 * EPS * P[i]);
564 if (prop_ == Loi_en_h::LAMBDA_DP) span_[i] = (plus_lambda_ - minus_lambda_) / ( 2 * EPS * P[i]);
565 if (prop_ == Loi_en_h::SIGMA_DP) span_[i] = (plus_sigma_ - minus_sigma_) / ( 2 * EPS * P[i]);
570 for (
int i = 0; i < sz; i++)
572 double plus_rho_ = EPS, plus_T_ = EPS, plus_cp_ = EPS, plus_mu_ = EPS, plus_lambda_ = EPS, plus_sigma_ = EPS;
573 fluide->update(CoolProp::HmassP_INPUTS, H[i] * (1. + EPS), P[i]);
574 for (
auto &itr : prop)
576 Loi_en_h prop_ = itr.first;
577 if (prop_ == Loi_en_h::RHO_DH) plus_rho_ = fluide->rhomass();
578 if (prop_ == Loi_en_h::T_DH) plus_T_ = fluide->T();
579 if (prop_ == Loi_en_h::CP_DH) plus_cp_ = fluide->cpmass();
580 if (prop_ == Loi_en_h::MU_DH) plus_mu_ = fluide->viscosity();
581 if (prop_ == Loi_en_h::LAMBDA_DH) plus_lambda_ = fluide->conductivity();
582 if (prop_ == Loi_en_h::SIGMA_DH) plus_sigma_ = fluide->surface_tension();
585 double minus_rho_ = EPS, minus_T_ = EPS, minus_cp_ = EPS, minus_mu_ = EPS, minus_lambda_ = EPS, minus_sigma_ = EPS;
586 fluide->update(CoolProp::HmassP_INPUTS, H[i] * (1. - EPS), P[i]);
587 for (
auto &itr : prop)
589 Loi_en_h prop_ = itr.first;
590 if (prop_ == Loi_en_h::RHO_DH) minus_rho_ = fluide->rhomass();
591 if (prop_ == Loi_en_h::T_DH) minus_T_ = fluide->T();
592 if (prop_ == Loi_en_h::CP_DH) minus_cp_ = fluide->cpmass();
593 if (prop_ == Loi_en_h::MU_DH) minus_mu_ = fluide->viscosity();
594 if (prop_ == Loi_en_h::LAMBDA_DH) minus_lambda_ = fluide->conductivity();
595 if (prop_ == Loi_en_h::SIGMA_DH) minus_sigma_ = fluide->surface_tension();
598 for (
auto &itr : prop)
600 Loi_en_h prop_ = itr.first;
601 SpanD span_ = itr.second;
603 if (prop_ == Loi_en_h::RHO_DH) span_[i] = (plus_rho_ - minus_rho_) / ( 2 * EPS * H[i]);
604 if (prop_ == Loi_en_h::T_DH) span_[i] = (plus_T_ - minus_T_) / ( 2 * EPS * H[i]);
605 if (prop_ == Loi_en_h::CP_DH) span_[i] = (plus_cp_ - minus_cp_) / ( 2 * EPS * H[i]);
606 if (prop_ == Loi_en_h::MU_DH) span_[i] = (plus_mu_ - minus_mu_) / ( 2 * EPS * H[i]);
607 if (prop_ == Loi_en_h::LAMBDA_DH) span_[i] = (plus_lambda_ - minus_lambda_) / ( 2 * EPS * H[i]);
608 if (prop_ == Loi_en_h::SIGMA_DH) span_[i] = (plus_sigma_ - minus_sigma_) / ( 2 * EPS * H[i]);
614 Cerr <<
"CoolProp_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
619int CoolProp_to_TRUST_generique::tppi_get_all_properties_h__(
const MSpanD input, MLoiSpanD_h prop)
const
622 const SpanD P = input.at(
"pression"), H = input.at(
"enthalpie");
623 const int sz = (int ) P.size();
625 bool has_prop =
false;
626 for (
auto &itr : prop)
627 if (itr.first == Loi_en_h::RHO || itr.first == Loi_en_h::RHO_DP || itr.first == Loi_en_h::RHO_DH ||
628 itr.first == Loi_en_h::T || itr.first == Loi_en_h::T_DP || itr.first == Loi_en_h::T_DH ||
629 itr.first == Loi_en_h::CP || itr.first == Loi_en_h::CP_DP || itr.first == Loi_en_h::CP_DH ||
630 itr.first == Loi_en_h::MU || itr.first == Loi_en_h::LAMBDA || itr.first == Loi_en_h::BETA || itr.first == Loi_en_h::SIGMA)
637 for (
int i = 0; i < sz; i++)
639 fluide->update(CoolProp::HmassP_INPUTS, H[i], P[i]);
640 for (
auto &itr : prop)
642 Loi_en_h prop_ = itr.first;
643 SpanD span_ = itr.second;
645 if (prop_ == Loi_en_h::RHO) span_[i] = fluide->rhomass();
646 if (prop_ == Loi_en_h::RHO_DP) span_[i] = fluide->first_partial_deriv(CoolProp::iDmass, CoolProp::iP, CoolProp::iHmass);
647 if (prop_ == Loi_en_h::RHO_DH) span_[i] = fluide->first_partial_deriv(CoolProp::iDmass, CoolProp::iHmass, CoolProp::iP);
648 if (prop_ == Loi_en_h::T) span_[i] = fluide->T();
649 if (prop_ == Loi_en_h::T_DP) span_[i] = fluide->first_partial_deriv(CoolProp::iT, CoolProp::iP, CoolProp::iHmass);
650 if (prop_ == Loi_en_h::T_DH) span_[i] = fluide->first_partial_deriv(CoolProp::iT, CoolProp::iHmass, CoolProp::iP);
651 if (prop_ == Loi_en_h::CP) span_[i] = fluide->cpmass();
652 if (prop_ == Loi_en_h::CP_DP) span_[i] = fluide->first_partial_deriv(CoolProp::iCpmass, CoolProp::iP, CoolProp::iHmass);
653 if (prop_ == Loi_en_h::CP_DH) span_[i] = fluide->first_partial_deriv(CoolProp::iCpmass, CoolProp::iHmass, CoolProp::iP);
654 if (prop_ == Loi_en_h::MU) span_[i] = fluide->viscosity();
655 if (prop_ == Loi_en_h::LAMBDA) span_[i] = fluide->conductivity();
656 if (prop_ == Loi_en_h::BETA) span_[i] = fluide->isobaric_expansion_coefficient();
657 if (prop_ == Loi_en_h::SIGMA) span_[i] = fluide->surface_tension();
662 bool has_DP =
false, has_DH =
false;
663 for (
auto &itr : prop)
664 if (itr.first == Loi_en_h::MU_DP || itr.first == Loi_en_h::LAMBDA_DP || itr.first == Loi_en_h::SIGMA_DP)
670 for (
auto &itr : prop)
671 if (itr.first == Loi_en_h::MU_DH || itr.first == Loi_en_h::LAMBDA_DH || itr.first == Loi_en_h::SIGMA_DH)
678 for (
int i = 0; i < sz; i++)
680 double plus_mu_ = EPS, plus_lambda_ = EPS, plus_sigma_ = EPS;
681 fluide->update(CoolProp::HmassP_INPUTS, H[i], P[i] * (1. + EPS));
682 for (
auto &itr : prop)
684 Loi_en_h prop_ = itr.first;
685 if (prop_ == Loi_en_h::MU_DP) plus_mu_ = fluide->viscosity();
686 if (prop_ == Loi_en_h::LAMBDA_DP) plus_lambda_ = fluide->conductivity();
687 if (prop_ == Loi_en_h::SIGMA_DP) plus_sigma_ = fluide->surface_tension();
690 double minus_mu_ = EPS, minus_lambda_ = EPS, minus_sigma_ = EPS;
691 fluide->update(CoolProp::HmassP_INPUTS, H[i], P[i] * (1. - EPS));
692 for (
auto &itr : prop)
694 Loi_en_h prop_ = itr.first;
695 if (prop_ == Loi_en_h::MU_DP) minus_mu_ = fluide->viscosity();
696 if (prop_ == Loi_en_h::LAMBDA_DP) minus_lambda_ = fluide->conductivity();
697 if (prop_ == Loi_en_h::SIGMA_DP) minus_sigma_ = fluide->surface_tension();
700 for (
auto &itr : prop)
702 Loi_en_h prop_ = itr.first;
703 SpanD span_ = itr.second;
705 if (prop_ == Loi_en_h::MU_DP) span_[i] = (plus_mu_ - minus_mu_) / ( 2 * EPS * P[i]);
706 if (prop_ == Loi_en_h::LAMBDA_DP) span_[i] = (plus_lambda_ - minus_lambda_) / ( 2 * EPS * P[i]);
707 if (prop_ == Loi_en_h::SIGMA_DP) span_[i] = (plus_sigma_ - minus_sigma_) / ( 2 * EPS * P[i]);
712 for (
int i = 0; i < sz; i++)
714 double plus_mu_ = EPS, plus_lambda_ = EPS, plus_sigma_ = EPS;
715 fluide->update(CoolProp::HmassP_INPUTS, H[i] * (1. + EPS), P[i]);
716 for (
auto &itr : prop)
718 Loi_en_h prop_ = itr.first;
719 if (prop_ == Loi_en_h::MU_DH) plus_mu_ = fluide->viscosity();
720 if (prop_ == Loi_en_h::LAMBDA_DH) plus_lambda_ = fluide->conductivity();
721 if (prop_ == Loi_en_h::SIGMA_DH) plus_sigma_ = fluide->surface_tension();
724 double minus_mu_ = EPS, minus_lambda_ = EPS, minus_sigma_ = EPS;
725 fluide->update(CoolProp::HmassP_INPUTS, H[i] * (1. - EPS), P[i]);
726 for (
auto &itr : prop)
728 Loi_en_h prop_ = itr.first;
729 if (prop_ == Loi_en_h::MU_DH) minus_mu_ = fluide->viscosity();
730 if (prop_ == Loi_en_h::LAMBDA_DH) minus_lambda_ = fluide->conductivity();
731 if (prop_ == Loi_en_h::SIGMA_DH) minus_sigma_ = fluide->surface_tension();
734 for (
auto &itr : prop)
736 Loi_en_h prop_ = itr.first;
737 SpanD span_ = itr.second;
739 if (prop_ == Loi_en_h::MU_DH) span_[i] = (plus_mu_ - minus_mu_) / ( 2 * EPS * H[i]);
740 if (prop_ == Loi_en_h::LAMBDA_DH) span_[i] = (plus_lambda_ - minus_lambda_) / ( 2 * EPS * H[i]);
741 if (prop_ == Loi_en_h::SIGMA_DH) span_[i] = (plus_sigma_ - minus_sigma_) / ( 2 * EPS * H[i]);
747 Cerr <<
"CoolProp_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
756 const SpanD P = input.at(
"pression"), H = is_liq ? input.at(
"H_L") : input.at(
"H_V");
760 for (
auto &itr : inter) assert((
int )H.size() == ncomp * (
int )itr.second.size());
763 MSpanD input_ = { {
"pression", P }, {
"enthalpie", H} };
765 if (fluide->backend_name() ==
"IF97Backend")
766 return tppi_get_all_properties_h_IF97__(input_, inter);
768 return tppi_get_all_properties_h__(input_, inter);
770 Cerr <<
"CoolProp_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the CoolProp library !!! " << finl;
void set_fluide_generique(const char *const model_name, const char *const fluid_name) override
int tppi_get_all_prop_loi_F5(const MSpanD, MLoiSpanD_h, int ncomp=1, int id=0, bool is_liq=true) const override
int tppi_get_all_pb_multiphase_pT(const MSpanD, MLoiSpanD, MLoiSpanD, int ncomp=1, int id=0) const override
int tppi_get_CPMLB_pb_multiphase_pT(const MSpanD, MLoiSpanD, int ncomp=1, int id=0) const override
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.