16#include <EOS_to_TRUST_generique.h>
19#define i_it std::distance(TT.begin(), &val)
24 fluide =
new NEPTUNE::EOS(model_name, fluid_name);
25 fluide->set_error_handler(handler);
27 Cerr <<
"EOS_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the EOS library !!! " << finl;
32int EOS_to_TRUST_generique::tppi_get_single_property_T_(Loi_en_T enum_prop,
const SpanD P,
const SpanD T, SpanD R,
int ncomp,
int id)
const
35 assert((
int )T.size() == ncomp * (
int )P.size() && (
int )T.size() == ncomp * (
int )R.size());
37 return compute_eos_field(P, T, R, EOS_prop_en_T[(
int)enum_prop][0], EOS_prop_en_T[(
int)enum_prop][1]);
40 VectorD temp_((
int)P.size());
42 for (
auto& val : TT) val = T[i_it * ncomp + id];
43 return compute_eos_field(P, TT, R, EOS_prop_en_T[(
int)enum_prop][0], EOS_prop_en_T[(
int)enum_prop][1]);
46 Cerr <<
"EOS_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the EOS library !!! " << finl;
51int EOS_to_TRUST_generique::tppi_get_single_property_h_(Loi_en_h enum_prop,
const SpanD P,
const SpanD H, SpanD R,
int ncomp,
int id)
const
54 assert((
int )H.size() == ncomp * (
int )P.size() && (
int )H.size() == ncomp * (
int )R.size());
57 return compute_eos_field_h(P, H, R, EOS_prop_en_h[(
int)enum_prop][0], EOS_prop_en_h[(
int)enum_prop][1]);
60 VectorD temp_((
int)P.size());
62 for (
auto& val : TT) val = H[i_it * ncomp + id];
63 return compute_eos_field_h(P, TT, R, EOS_prop_en_h[(
int)enum_prop][0], EOS_prop_en_h[(
int)enum_prop][1]);
66 Cerr <<
"EOS_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the EOS library !!! " << finl;
73 Cerr <<
"EOS_to_TRUST_generique::" << __func__ <<
" is not implemented ! Use EOS_to_TRUST_generique::tppi_get_beta_pT or call the 911 for help !! " << finl;
80 assert((
int )T.size() == ncomp * (
int )R.size() && (
int )T.size() == ncomp * (
int )P.size());
81 VectorD drho_dt_((
int)P.size()), rho_((
int)P.size()), temp_((
int)P.size());
82 SpanD drho_dt(drho_dt_), rho(rho_), TT(temp_);
84 for (
auto& val : TT) val = T[i_it * ncomp + id];
85 err1_ =
compute_eos_field(P, TT, rho, EOS_prop_en_T[(
int) Loi_en_T::RHO][0], EOS_prop_en_T[(
int) Loi_en_T::RHO][1]);
86 err2_ =
compute_eos_field(P, TT, drho_dt, EOS_prop_en_T[(
int) Loi_en_T::RHO_DT][0], EOS_prop_en_T[(
int) Loi_en_T::RHO_DT][1]);
88 for (
int i = 0; i < (int) R.size(); i++) R[i] = drho_dt[i] / rho[i];
89 return std::max(err1_, err2_);
91 Cerr <<
"EOS_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the EOS library !!! " << finl;
98int EOS_to_TRUST_generique::tppi_get_all_properties_T_(
const MSpanD input , NEPTUNE::EOS_Fields& flds_out, NEPTUNE::EOS_Error_Field& ferr,
int ncomp,
int id)
const
100 const SpanD T = input.at(
"temperature"), P = input.at(
"pressure");
103 NEPTUNE::EOS_Field T_fld(
"Temperature",
"T", (
int) T.size(), (
double*) T.begin()), P_fld(
"Pressure",
"P", (
int) P.size(), (
double*) P.begin());
104 return (
int)fluide->compute(P_fld, T_fld, flds_out, ferr);
108 VectorD temp_((
int) P.size());
110 for (
auto &val : TT) val = T[i_it * ncomp + id];
112 NEPTUNE::EOS_Field T_fld(
"Temperature",
"T", (
int) TT.size(), (
double*) TT.begin()), P_fld(
"Pressure",
"P", (
int) P.size(), (
double*) P.begin());
113 return (
int)fluide->compute(P_fld, T_fld, flds_out, ferr);
117int EOS_to_TRUST_generique::tppi_get_all_properties_h_(
const MSpanD input , NEPTUNE::EOS_Fields& flds_out, NEPTUNE::EOS_Error_Field& ferr,
int ncomp,
int id)
const
119 const SpanD T = input.at(
"enthalpie"), P = input.at(
"pressure");
122 NEPTUNE::EOS_Field T_fld(
"Enthalpy",
"h", (
int) T.size(), (
double*) T.begin()), P_fld(
"Pressure",
"P", (
int) P.size(), (
double*) P.begin());
123 return (
int)fluide->compute(P_fld, T_fld, flds_out, ferr);
127 VectorD temp_((
int) P.size());
129 for (
auto &val : TT) val = T[i_it * ncomp + id];
131 NEPTUNE::EOS_Field T_fld(
"Enthalpy",
"h", (
int) TT.size(), (
double*) TT.begin()), P_fld(
"Pressure",
"P", (
int) P.size(), (
double*) P.begin());
132 return (
int)fluide->compute(P_fld, T_fld, flds_out, ferr);
140 assert((
int )prop.size() == 4 && (
int )input.size() == 2);
142 const SpanD T = input.at(
"temperature"), P = input.at(
"pressure");
143 assert((
int )T.size() == ncomp * (
int )P.size());
147 SpanD B = prop.at(Loi_en_T::BETA);
149 const int nb_out = 5;
150 VectorD drho_dt_((
int) P.size()), rho_((
int) P.size());
151 SpanD drho_dt(drho_dt_), rho(rho_);
152 NEPTUNE::ArrOfInt tmp((
int)P.size());
153 NEPTUNE::EOS_Error_Field ferr(tmp);
154 NEPTUNE::EOS_Fields flds_out(nb_out);
157 for (
auto& itr : prop)
159 assert((
int )T.size() == ncomp * (
int )itr.second.size());
160 Loi_en_T prop_ = itr.first;
161 SpanD span_ = itr.second;
162 if (prop_ != Loi_en_T::BETA)
163 flds_out[i_out++] = NEPTUNE::EOS_Field(EOS_prop_en_T[(
int) prop_][0], EOS_prop_en_T[(
int) prop_][1], (
int) span_.size(), (
double*) span_.begin());
166 flds_out[i_out++] = NEPTUNE::EOS_Field(EOS_prop_en_T[(
int) Loi_en_T::RHO][0], EOS_prop_en_T[(
int) Loi_en_T::RHO][1], (
int) rho.size(), (
double*) rho.begin());
167 flds_out[i_out++] = NEPTUNE::EOS_Field(EOS_prop_en_T[(
int) Loi_en_T::RHO_DT][0], EOS_prop_en_T[(
int) Loi_en_T::RHO_DT][1], (
int) drho_dt.size(), (
double*) drho_dt.begin());
171 int err_ = tppi_get_all_properties_T_(input, flds_out, ferr, ncomp,
id);
174 for (
int i = 0; i < (int) B.size(); i++) B[i] = drho_dt[i] / rho[i];
180 Cerr <<
"EOS_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the EOS library !!! " << finl;
188 assert( (
int )input.size() == 4 && (
int )inter.size() == 6 && (
int )bord.size() == 2);
190 const SpanD T = input.at(
"temperature"), P = input.at(
"pressure"), bT = input.at(
"bord_temperature"), bP = input.at(
"bord_pressure");
191 assert ((
int )bT.size() == ncomp * (
int )bP.size() && (
int )T.size() == ncomp * (
int )P.size());
196 const int nb_out = (int )inter.size(), bnb_out = (int )bord.size();
197 NEPTUNE::ArrOfInt tmp((
int)P.size()), btmp((
int)bP.size());
198 NEPTUNE::EOS_Error_Field ferr(tmp), bferr(btmp);
199 NEPTUNE::EOS_Fields flds_out(nb_out), bflds_out(bnb_out);
201 int i_out = 0, bi_out = 0;
203 for (
auto& itr : bord)
205 Loi_en_T prop_ = itr.first;
206 SpanD span_ = itr.second;
207 assert((
int ) bT.size() == ncomp * (
int ) span_.size());
208 bflds_out[bi_out++] = NEPTUNE::EOS_Field(EOS_prop_en_T[(
int) prop_][0], EOS_prop_en_T[(
int) prop_][1], (
int) span_.size(), (
double*) span_.begin());
211 for (
auto& itr : inter)
213 Loi_en_T prop_ = itr.first;
214 SpanD span_ = itr.second;
215 assert((
int ) T.size() == ncomp * (
int ) span_.size());
216 flds_out[i_out++] = NEPTUNE::EOS_Field(EOS_prop_en_T[(
int) prop_][0], EOS_prop_en_T[(
int) prop_][1], (
int) span_.size(), (
double*) span_.begin());
219 int err1_ = tppi_get_all_properties_T_( { {
"temperature", bT }, {
"pressure", bP } }, bflds_out, bferr, ncomp, id);
220 int err2_ = tppi_get_all_properties_T_( { {
"temperature", T }, {
"pressure", P } }, flds_out, ferr, ncomp, id);
224 return std::max(err1_, err2_);
226 Cerr <<
"EOS_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the EOS library !!! " << finl;
235 const SpanD P = input.at(
"pression"), H = is_liq ? input.at(
"H_L") : input.at(
"H_V");
236 int i_out = 0, nb_out = (int) spans.size(), sz = (int) P.size();
237 NEPTUNE::ArrOfInt tmp(sz);
238 NEPTUNE::EOS_Error_Field ferr(tmp);
239 NEPTUNE::EOS_Fields flds_out(nb_out);
241 for (
auto &itr : spans)
243 Loi_en_h prop_ = itr.first;
244 SpanD span_ = itr.second;
245 assert(sz == (
int ) span_.size());
246 flds_out[i_out++] = NEPTUNE::EOS_Field(EOS_prop_en_h[(
int) prop_][0], EOS_prop_en_h[(
int) prop_][1], (
int) span_.size(), (
double*) span_.begin());
249 NEPTUNE::EOS_Field T_fld(
"Enthalpy",
"h", (
int) H.size(), (
double*) H.begin()), P_fld(
"Pressure",
"P", (
int) P.size(), (
double*) P.begin());
250 return (
int)fluide->compute(P_fld, T_fld, flds_out, ferr);
253 Cerr <<
"EOS_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the EOS library !!! " << finl;
261 assert((
int )prop.size() == 4 && (
int )input.size() == 2);
263 const SpanD H = input.at(
"enthalpie"), P = input.at(
"pressure");
264 if ((
int )H.size() != ncomp * (
int )P.size())
Process::exit(
"Ah bon ? NON !");
266 const int nb_out = 3;
267 NEPTUNE::ArrOfInt tmp((
int)P.size());
268 NEPTUNE::EOS_Error_Field ferr(tmp);
269 NEPTUNE::EOS_Fields flds_out(nb_out);
272 for (
auto& itr : prop)
274 assert((
int )H.size() == ncomp * (
int )itr.second.size());
275 Loi_en_h prop_ = itr.first;
276 SpanD span_ = itr.second;
277 if (prop_ != Loi_en_h::BETA)
278 flds_out[i_out++] = NEPTUNE::EOS_Field(EOS_prop_en_h[(
int) prop_][0], EOS_prop_en_h[(
int) prop_][1], (
int) span_.size(), (
double*) span_.begin());
282 SpanD B = prop.at(Loi_en_h::BETA);
283 for (
int i = 0; i < (int) B.size(); i++) B[i] = 0.;
285 int err_ = tppi_get_all_properties_h_(input, flds_out, ferr, ncomp,
id);
289 Cerr <<
"EOS_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the EOS library !!! " << finl;
297 assert( (
int )input.size() == 4 && (
int )inter.size() == 6 && (
int )bord.size() == 2);
298 const SpanD H = input.at(
"enthalpie"), P = input.at(
"pressure"), bH = input.at(
"bord_enthalpie"), bP = input.at(
"bord_pressure");
299 assert ((
int )bH.size() == ncomp * (
int )bP.size() && (
int )H.size() == ncomp * (
int )P.size());
301 const int nb_out = (int )inter.size(), bnb_out = (int )bord.size();
302 NEPTUNE::ArrOfInt tmp((
int)P.size()), btmp((
int)bP.size());
303 NEPTUNE::EOS_Error_Field ferr(tmp), bferr(btmp);
304 NEPTUNE::EOS_Fields flds_out(nb_out), bflds_out(bnb_out);
306 int i_out = 0, bi_out = 0;
308 for (
auto& itr : bord)
310 Loi_en_h prop_ = itr.first;
311 SpanD span_ = itr.second;
312 assert((
int ) bH.size() == ncomp * (
int ) span_.size());
313 bflds_out[bi_out++] = NEPTUNE::EOS_Field(EOS_prop_en_h[(
int) prop_][0], EOS_prop_en_h[(
int) prop_][1], (
int) span_.size(), (
double*) span_.begin());
316 for (
auto& itr : inter)
318 Loi_en_h prop_ = itr.first;
319 SpanD span_ = itr.second;
320 assert((
int ) H.size() == ncomp * (
int ) span_.size());
321 flds_out[i_out++] = NEPTUNE::EOS_Field(EOS_prop_en_h[(
int) prop_][0], EOS_prop_en_h[(
int) prop_][1], (
int) span_.size(), (
double*) span_.begin());
324 int err1_ = tppi_get_all_properties_h_( { {
"enthalpie", bH }, {
"pressure", bP } }, bflds_out, bferr, ncomp, id);
325 int err2_ = tppi_get_all_properties_h_( { {
"enthalpie", H }, {
"pressure", P } }, flds_out, ferr, ncomp, id);
328 SpanD T = inter.at(Loi_en_h::T), bT = bord.at(Loi_en_h::T);
331 return std::max(err1_, err2_);
333 Cerr <<
"EOS_to_TRUST_generique::" << __func__ <<
" should not be called since TRUST is not compiled with the EOS library !!! " << finl;
int tppi_get_CPMLB_pb_multiphase_ph(const MSpanD, MLoiSpanD_h, int ncomp=1, int id=0) const override
void set_fluide_generique(const char *const model_name, const char *const fluid_name) override
int tppi_get_CPMLB_pb_multiphase_pT(const MSpanD, MLoiSpanD, int ncomp=1, int id=0) const 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_all_pb_multiphase_ph(const MSpanD, MLoiSpanD_h, MLoiSpanD_h, int ncomp=1, int id=0) const override
int tppi_get_beta_ph(const SpanD P, const SpanD H, SpanD R, int ncomp=1, int id=0) const override
int tppi_get_beta_pT(const SpanD P, const SpanD T, SpanD R, int ncomp=1, int id=0) const override
int compute_eos_field(const SpanD P, SpanD res, const char *const pt, const char *const pn, bool is_T=false) const
int compute_eos_field_h(const SpanD P, const SpanD H, SpanD res, const char *const pt, const char *const pn) const
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.