16#ifndef Fluide_reel_base_included
17#define Fluide_reel_base_included
19#include <Fluide_base.h>
30using MLoiSpanD = std::map<Loi_en_T, tcb::span<double>>;
31using MLoiSpanD_h = std::map<Loi_en_h, tcb::span<double>>;
32using MSpanD = std::map<std::string, tcb::span<double>>;
33using VectorD = std::vector<double>;
34using ArrayD = std::array<double,1>;
35using SpanD = tcb::span<double>;
73 virtual std::map<std::string, std::array<double, 2>>
unknown_range()
const {
return {}; }
74 virtual std::map<std::string, std::array<double, 2>>
unknown_range_h()
const {
return {}; }
79 Process::exit(
"Fluide_reel_base::calculer_vitesse_son is not implemented for your fluid !!! To call only for Pb_Euler also ... \n");
82 inline virtual double calculer_pression(
const double& rho,
const double& rhou,
const double& rhoE)
const
84 Process::exit(
"Fluide_reel_base::calculer_vitesse_son is not implemented for your fluid !!! To call only for Pb_Euler also ... \n");
87 inline virtual double init_energie_tot(
const double& rho,
const double& norm_U,
const double& u)
const
89 Process::exit(
"Fluide_reel_base::calculer_vitesse_son is not implemented for your fluid !!! To call only for Pb_Euler also ... \n");
112 virtual void rho_(
const SpanD T,
const SpanD P, SpanD R,
int ncomp = 1,
int id = 0)
const = 0;
113 virtual void dP_rho_(
const SpanD T,
const SpanD P, SpanD dP_R,
int ncomp = 1,
int id = 0)
const = 0;
114 virtual void dT_rho_(
const SpanD T,
const SpanD P, SpanD dT_R,
int ncomp = 1,
int id = 0)
const = 0;
117 virtual void h_(
const SpanD T,
const SpanD P, SpanD H,
int ncomp = 1,
int id = 0)
const = 0;
118 virtual void dP_h_(
const SpanD T,
const SpanD P, SpanD dP_H,
int ncomp = 1,
int id = 0)
const = 0;
119 virtual void dT_h_(
const SpanD T,
const SpanD P, SpanD dT_H,
int ncomp = 1,
int id = 0)
const = 0;
122 virtual void cp_(
const SpanD T,
const SpanD P, SpanD CP,
int ncomp = 1,
int id = 0)
const = 0;
123 virtual void beta_(
const SpanD T,
const SpanD P, SpanD B,
int ncomp = 1,
int id = 0)
const = 0;
124 virtual void mu_(
const SpanD T,
const SpanD P, SpanD M,
int ncomp = 1,
int id = 0)
const = 0;
125 virtual void lambda_(
const SpanD T,
const SpanD P, SpanD L,
int ncomp = 1,
int id = 0)
const = 0;
132 double _rho_(
const double T,
const double P)
const {
return double_to_span<&Fluide_reel_base::rho_>(T,P); }
133 double _dP_rho_(
const double T,
const double P)
const {
return double_to_span<&Fluide_reel_base::dP_rho_>(T,P); }
134 double _dT_rho_(
const double T,
const double P)
const {
return double_to_span<&Fluide_reel_base::dT_rho_>(T,P); }
136 double _h_(
const double T,
const double P)
const {
return double_to_span<&Fluide_reel_base::h_>(T,P); }
137 double _dP_h_(
const double T,
const double P)
const {
return double_to_span<&Fluide_reel_base::dP_h_>(T,P); }
138 double _dT_h_(
const double T,
const double P)
const {
return double_to_span<&Fluide_reel_base::dT_h_>(T,P); }
140 double _cp_(
const double T,
const double P)
const {
return double_to_span<&Fluide_reel_base::cp_>(T,P); }
141 double _beta_(
const double T,
const double P)
const {
return double_to_span<&Fluide_reel_base::beta_>(T,P); }
142 double _mu_(
const double T,
const double P)
const {
return double_to_span<&Fluide_reel_base::mu_>(T,P); }
143 double _lambda_(
const double T,
const double P)
const {
return double_to_span<&Fluide_reel_base::lambda_>(T,P); }
147 virtual void rho_h_(
const SpanD h,
const SpanD P, SpanD R,
int ncomp = 1,
int id = 0)
const = 0;
148 virtual void dP_rho_h_(
const SpanD h,
const SpanD P, SpanD dP_R,
int ncomp = 1,
int id = 0)
const = 0;
149 virtual void dh_rho_h_(
const SpanD h,
const SpanD P, SpanD dT_R,
int ncomp = 1,
int id = 0)
const = 0;
152 virtual void T_(
const SpanD h,
const SpanD P, SpanD H,
int ncomp = 1,
int id = 0)
const = 0;
153 virtual void dP_T_(
const SpanD h,
const SpanD P, SpanD dP_H,
int ncomp = 1,
int id = 0)
const = 0;
154 virtual void dh_T_(
const SpanD h,
const SpanD P, SpanD dT_H,
int ncomp = 1,
int id = 0)
const = 0;
157 virtual void cp_h_(
const SpanD h,
const SpanD P, SpanD CP,
int ncomp = 1,
int id = 0)
const = 0;
158 virtual void beta_h_(
const SpanD h,
const SpanD P, SpanD B,
int ncomp = 1,
int id = 0)
const = 0;
159 virtual void mu_h_(
const SpanD h,
const SpanD P, SpanD M,
int ncomp = 1,
int id = 0)
const = 0;
160 virtual void lambda_h_(
const SpanD h,
const SpanD P, SpanD L,
int ncomp = 1,
int id = 0)
const = 0;
167 double _rho_h_(
const double h,
const double P)
const {
return double_to_span<&Fluide_reel_base::rho_h_>(h,P); }
168 double _dP_rho_h_(
const double h,
const double P)
const {
return double_to_span<&Fluide_reel_base::dP_rho_h_>(h,P); }
169 double _dh_rho_h_(
const double h,
const double P)
const {
return double_to_span<&Fluide_reel_base::dh_rho_h_>(h,P); }
171 double _T_(
const double h,
const double P)
const {
return double_to_span<&Fluide_reel_base::T_>(h,P); }
172 double _dP_T_(
const double h,
const double P)
const {
return double_to_span<&Fluide_reel_base::dP_T_>(h,P); }
173 double _dh_T_(
const double h,
const double P)
const {
return double_to_span<&Fluide_reel_base::dh_T_>(h,P); }
175 double _cp_h_(
const double h,
const double P)
const {
return double_to_span<&Fluide_reel_base::cp_h_>(h,P); }
176 double _beta_h_(
const double h,
const double P)
const {
return double_to_span<&Fluide_reel_base::beta_h_>(h,P); }
177 double _mu_h_(
const double h,
const double P)
const {
return double_to_span<&Fluide_reel_base::mu_h_>(h,P); }
178 double _lambda_h_(
const double h,
const double P)
const {
return double_to_span<&Fluide_reel_base::lambda_h_>(h,P); }
181 typedef void(
Fluide_reel_base::*function_span_generic)(
const SpanD ,
const SpanD , SpanD , int , int )
const;
183 template <function_span_
generic FUNC>
184 void double_to_span(
const double T_ou_h,
const double P, SpanD res)
const
186 ArrayD Tt = {T_ou_h}, Pp = {P}, res_ = {0.};
187 (this->*FUNC)(SpanD(Tt), SpanD(Pp), SpanD(res_),1,0);
188 for (
auto& val : res) val = res_[0];
191 template <function_span_
generic FUNC>
192 double double_to_span(
const double T_ou_h,
const double P)
const
194 ArrayD Tt = {T_ou_h}, Pp = {P}, res_ = {0.};
195 (this->*FUNC)(SpanD(Tt), SpanD(Pp), SpanD(res_),1,0);
206 void _rho_(
const double T,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::rho_>(T,P,res); }
207 void _dP_rho_(
const double T,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::dP_rho_>(T,P,res); }
208 void _dT_rho_(
const double T,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::dT_rho_>(T,P,res); }
210 void _h_(
const double T,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::h_>(T,P,res); }
211 void _dP_h_(
const double T,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::dP_h_>(T,P,res); }
212 void _dT_h_(
const double T,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::dT_h_>(T,P,res); }
214 void _cp_(
const double T,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::cp_>(T,P,res); }
215 void _beta_(
const double T,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::beta_>(T,P,res); }
216 void _mu_(
const double T,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::mu_>(T,P,res); }
217 void _lambda_(
const double T,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::lambda_>(T,P,res); }
219 void _compute_CPMLB_pb_multiphase_(MLoiSpanD )
const;
220 void _compute_all_pb_multiphase_(MLoiSpanD , MLoiSpanD )
const;
255 void dX_dP_T(
const SpanD dX_dP_h,
const SpanD dX_dh_P, SpanD dX_dP);
256 void dX_dT_P(
const SpanD dX_dP_h,
const SpanD dX_dh_P, SpanD dX_dT);
265 void dX_dP_h(
const SpanD dX_dP_T,
const SpanD dX_dT_P, SpanD dX_dP);
266 void dX_dh_P(
const SpanD dX_dP_T,
const SpanD dX_dT_P, SpanD dX_dh);
275 void _rho_h_(
const double h,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::rho_h_>(h,P,res); }
276 void _dP_rho_h_(
const double h,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::dP_rho_h_>(h,P,res); }
277 void _dh_rho_h_(
const double h,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::dh_rho_h_>(h,P,res); }
279 void _T_(
const double h,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::T_>(h,P,res); }
280 void _dP_T_(
const double h,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::dP_T_>(h,P,res); }
281 void _dh_T_(
const double h,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::dh_T_>(h,P,res); }
283 void _cp_h_(
const double h,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::cp_h_>(h,P,res); }
284 void _beta_h_(
const double h,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::beta_h_>(h,P,res); }
285 void _mu_h_(
const double h,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::mu_h_>(h,P,res); }
286 void _lambda_h_(
const double h,
const double P, SpanD res)
const { double_to_span<&Fluide_reel_base::lambda_h_>(h,P,res); }
classe Discretisation_base Cette classe represente un schema de discretisation en espace,...
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
Classe Fluide_reel_base Cette classe represente un fluide reel ainsi que.
void _mu_h_(const double h, const double P, SpanD res) const
void calculate_fluid_properties_incompressible()
virtual void dh_T_(const SpanD h, const SpanD P, SpanD dT_H, int ncomp=1, int id=0) const =0
double _dh_rho_h_(const double h, const double P) const
int check_unknown_range() const override
double _lambda_h_(const double h, const double P) const
virtual void dh_rho_h_(const SpanD h, const SpanD P, SpanD dT_R, int ncomp=1, int id=0) const =0
void calculate_fluid_properties_enthalpie()
virtual void lambda_(const SpanD T, const SpanD P, SpanD L, int ncomp=1, int id=0) const =0
virtual void T_(const SpanD h, const SpanD P, SpanD H, int ncomp=1, int id=0) const =0
virtual void compute_CPMLB_pb_multiphase_(const MSpanD, MLoiSpanD, int ncomp=1, int id=0) const
double _dP_T_(const double h, const double P) const
int is_incompressible() const override
void _beta_h_(const double h, const double P, SpanD res) const
double _mu_h_(const double h, const double P) const
double _rho_(const double T, const double P) const
void _compute_CPMLB_pb_multiphase_h_(MLoiSpanD_h) const
virtual std::map< std::string, std::array< double, 2 > > unknown_range() const
double _beta_(const double T, const double P) const
void calculate_fluid_properties_enthalpie_incompressible()
void preparer_calcul() override
virtual void cp_(const SpanD T, const SpanD P, SpanD CP, int ncomp=1, int id=0) const =0
virtual void dT_h_(const SpanD T, const SpanD P, SpanD dT_H, int ncomp=1, int id=0) const =0
int initialiser(const double temps) override
Initialise les parametres du fluide.
double _h_(const double T, const double P) const
virtual void rho_h_(const SpanD h, const SpanD P, SpanD R, int ncomp=1, int id=0) const =0
virtual double calculer_vitesse_son(const double &rho, const double &p) const
void calculate_fluid_properties()
virtual void lambda_h_(const SpanD h, const SpanD P, SpanD L, int ncomp=1, int id=0) const =0
double _cp_(const double T, const double P) const
double _beta_h_(const double h, const double P) const
void _rho_h_(const double h, const double P, SpanD res) const
double _dP_h_(const double T, const double P) const
virtual void h_(const SpanD T, const SpanD P, SpanD H, int ncomp=1, int id=0) const =0
virtual void dP_h_(const SpanD T, const SpanD P, SpanD dP_H, int ncomp=1, int id=0) const =0
virtual void cp_h_(const SpanD h, const SpanD P, SpanD CP, int ncomp=1, int id=0) const =0
void mettre_a_jour(double temps) override
Effectue une mise a jour en temps du milieu, et donc de ses parametres caracteristiques.
double _dT_rho_(const double T, const double P) const
void _cp_h_(const double h, const double P, SpanD res) const
double _dh_T_(const double h, const double P) const
double _dP_rho_h_(const double h, const double P) const
virtual void dP_rho_h_(const SpanD h, const SpanD P, SpanD dP_R, int ncomp=1, int id=0) const =0
double _lambda_(const double T, const double P) const
double _cp_h_(const double h, const double P) const
virtual void beta_(const SpanD T, const SpanD P, SpanD B, int ncomp=1, int id=0) const =0
double _dT_h_(const double T, const double P) const
virtual void mu_h_(const SpanD h, const SpanD P, SpanD M, int ncomp=1, int id=0) const =0
virtual void dP_T_(const SpanD h, const SpanD P, SpanD dP_H, int ncomp=1, int id=0) const =0
virtual void mu_(const SpanD T, const SpanD P, SpanD M, int ncomp=1, int id=0) const =0
void _compute_all_pb_multiphase_h_(MLoiSpanD_h, MLoiSpanD_h) const
virtual void dT_rho_(const SpanD T, const SpanD P, SpanD dT_R, int ncomp=1, int id=0) const =0
void discretiser(const Probleme_base &pb, const Discretisation_base &dis) override
double _dP_rho_(const double T, const double P) const
double _mu_(const double T, const double P) const
double _rho_h_(const double h, const double P) const
bool initTimeStep(double dt) override
void _dP_rho_h_(const double h, const double P, SpanD res) const
void _lambda_h_(const double h, const double P, SpanD res) const
virtual void compute_all_pb_multiphase_h_(const MSpanD, MLoiSpanD_h, MLoiSpanD_h, int ncomp=1, int id=0) const
virtual void compute_CPMLB_pb_multiphase_h_(const MSpanD, MLoiSpanD_h, int ncomp=1, int id=0) const
virtual std::map< std::string, std::array< double, 2 > > unknown_range_h() const
virtual void compute_all_pb_multiphase_(const MSpanD, MLoiSpanD, MLoiSpanD, int ncomp=1, int id=0) const
virtual double init_energie_tot(const double &rho, const double &norm_U, const double &u) const
void _dh_rho_h_(const double h, const double P, SpanD res) const
void creer_champs_non_lus() override
virtual void rho_(const SpanD T, const SpanD P, SpanD R, int ncomp=1, int id=0) const =0
void set_param(Param ¶m) const override
virtual void beta_h_(const SpanD h, const SpanD P, SpanD B, int ncomp=1, int id=0) const =0
void _T_(const double h, const double P, SpanD res) const
virtual void dP_rho_(const SpanD T, const SpanD P, SpanD dP_R, int ncomp=1, int id=0) const =0
void _dP_T_(const double h, const double P, SpanD res) const
double _T_(const double h, const double P) const
void _dh_T_(const double h, const double P, SpanD res) const
void abortTimeStep() override
virtual double calculer_pression(const double &rho, const double &rhou, const double &rhoE) const
OBS_PTR(Domaine_dis_base) zdb_
Helper class to factorize the readOn method of Objet_U classes.
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
void set_instance(const Fluide_reel_base &fld)
void set_instance(const Fluide_reel_base &fld)