16#include <Fluide_Dilatable_base.h>
17#include <Schema_Temps_base.h>
18#include <Champ_Fonc_Tabule.h>
19#include <Champ_Uniforme.h>
20#include <Loi_Etat_base.h>
21#include <Probleme_base.h>
22#include <Domaine_VF.h>
25#include <TRUSTArray_kokkos.tpp>
66 return temperature_.valeur();
71 return temperature_.valeur();
79 DoubleTab& tab_rho = le_fluide->masse_volumique().
valeurs();
83 double t = le_prob_->schema_temps().temps_courant();
96 double t = le_prob_->schema_temps().temps_courant();
107 DoubleTab& tab_rho = le_fluide->masse_volumique().valeurs();
110 le_fluide->masse_volumique().mettre_a_jour(temps);
126 Cerr<<
"The viscosity field mu of type "<<mu.
que_suis_je()<<
" is not recognized.";
138 const DoubleTab& tab_Cp = le_fluide->capacite_calorifique().
valeurs();
139 const DoubleTab& tab_mu = mu.
valeurs();
141 DoubleTab& tab_lambda = lambda.
valeurs();
142 ToDo_Kokkos(
"critical");
143 int i, n = tab_lambda.
size();
149 double mu0 = tab_mu(0,0);
150 for (i=0 ; i<n ; i++) tab_lambda(i,0) = mu0 * tab_Cp(i,0) /
Pr_;
154 for (i=0 ; i<n ; i++) tab_lambda(i,0) = tab_mu(i,0) * tab_Cp(i,0) /
Pr_;
165 const Champ_Don_base& viscosite_dynamique = le_fluide->viscosite_dynamique();
167 const DoubleTab& tab_rho = le_fluide->masse_volumique().valeurs();
168 const DoubleTab& tab_mu = viscosite_dynamique.
valeurs();
169 Champ_Don_base& viscosite_cinematique = le_fluide->viscosite_cinematique();
170 DoubleTab& tab_nu = viscosite_cinematique.
valeurs();
171 int n = tab_nu.
size();
173 if (viscosite_cinematique.
que_suis_je()==
"Champ_Fonc_P0_VDF")
176 for (
int i=0 ; i<n ; i++)
177 tab_nu(i,0) = tab_mu(uniforme ? 0 : i,0) / tab_rho(i,0);
181 const IntTab& ef = ref_cast(
Domaine_VF,le_fluide->vitesse().domaine_dis_base()).elem_faces();
183 CIntTabView elem_faces = ef.
view_ro();
184 CDoubleArrView rho =
static_cast<const DoubleVect&
>(tab_rho).view_ro();
185 CDoubleArrView mu =
static_cast<const DoubleVect&
>(tab_mu).view_ro();
186 DoubleArrView nu =
static_cast<DoubleVect&
>(tab_nu).view_rw();
187 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), n, KOKKOS_LAMBDA(
const int i)
190 for (
int face = 0; face < nfe; face++)
191 rhoelem += rho(elem_faces(i, face));
193 nu(i) = mu(uniforme ? 0 : i) / rhoelem;
195 end_gpu_timer(__KERNEL_NAME__);
206 DoubleTab& tab_alpha = le_fluide->diffusivite().valeurs();
209 int n = tab_alpha.
size();
210 CDoubleArrView lambda =
static_cast<const DoubleVect&
>(conductivite.
valeurs()).view_ro();
211 CDoubleArrView Cp =
static_cast<const DoubleVect&
>(le_fluide->capacite_calorifique().valeurs()).view_ro();
212 CDoubleArrView rho =
static_cast<const DoubleVect&
>(le_fluide->masse_volumique().valeurs()).view_ro();
213 DoubleArrView alpha =
static_cast<DoubleVect&
>(tab_alpha).view_rw();
214 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), n, KOKKOS_LAMBDA(
const int i)
216 alpha(i) = lambda(uniforme ? 0 : i) / (rho(i) * Cp(i));
218 end_gpu_timer(__KERNEL_NAME__);
245 DoubleTab& tab_rho = le_fluide->masse_volumique().valeurs();
255 int n=tab_rho.
size();
256 double Pth = le_fluide->pression_th();
257 const DoubleTab& tab_ICh = le_fluide->inco_chaleur().valeurs();
258 ToDo_Kokkos(
"Implement a ::compute_tab_rho() on device");
259 for (
int som = 0; som < n; som++)
278 Cerr<<
"Drho_DP must be implemented in the derived class "<<
que_suis_je()<<
" to be used"<<finl;
284 Cerr<<
"Drho_DT must be implemented in the derived class "<<
que_suis_je()<<
" to be used"<<finl;
290 Cerr<<
"De_DP must be implemented in the derived class "<<
que_suis_je()<<
" to be used"<<finl;
296 Cerr<<
"De_DT must be implemented in the derived class "<<
que_suis_je()<<
" to be used"<<finl;
303 return champs_compris_.
has_champ(nom, ref_champ);
307 return champs_compris_.has_champ(nom);
312 return champs_compris_.get_champ(nom);
317 if (opt==DESCRIPTION)
318 Cerr<<
"Loi_Etat_base : "<<champs_compris_.liste_noms_compris()<<finl;
320 nom.add(champs_compris_.liste_noms_compris());
class Champ_Don_base base class of Given Fields (not calculated)
void mettre_a_jour(double temps) override
Time update.
DoubleTab & valeurs() override
Overrides Champ_base::valeurs() Returns the array of values.
Class Champ_Fonc_Tabule Derived class of Champ_Fonc_base representing.
class Champ_base This class is the base of the fields hierarchy.
bool has_champ(const Motcle &nom, OBS_PTR(FIELD_TYPE)&ref_champ) const
static void verifier(const char *const msg, double)
Class defining operators and methods for all reading operation in an input flow (file,...
Base class for a dilatable fluid, inheriting from Fluide_base.
Base class for the state law hierarchy defining a dilatable fluid.
void assoscier_probleme(const Probleme_base &pb)
Associates the problem with the state law.
virtual void initialiser_inco_ch()
Initialises the heat equation unknown; sets rho arrays and updates density.
virtual double De_DP(double, double) const
void mettre_a_jour(double)
Updates the state law and the density field.
const Champ_base & get_champ(const Motcle &nom) const override
virtual void abortTimeStep()
virtual double De_DT(double, double) const
Champ_Don_base & ch_temperature()
virtual void remplir_T()=0
virtual void compute_tab_rho(DoubleTab &)
virtual void associer_fluide(const Fluide_Dilatable_base &)
Associates the fluid with the state law.
virtual void calculer_masse_volumique()
Recomputes the density (masse volumique).
virtual double Drho_DT(double, double) const
virtual void preparer_calcul()
Prepares the fluid for computation by filling temperature and computing density.
virtual void calculer_alpha()
Computes the thermal diffusivity.
virtual double calculer_H(double, double) const
For ideal gases: does nothing. For real gases: must recompute enthalpy from pressure and temperature.
virtual double Drho_DP(double, double) const
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
virtual void calculer_lambda()
Computes the thermal conductivity.
virtual void calculer_mu()
Computes the dynamic viscosity.
void calculer_nu()
Computes the kinematic viscosity.
virtual void calculer_nu_sur_Sc()
Does nothing; overloaded in Loi_Etat_Melange_Binaire.
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
virtual void calculer_mu_sur_Sc()
Does nothing; overloaded in Loi_Etat_Melange_GP.
A character string (Nom) in uppercase.
An array of character strings (VECT(Nom)).
Base class for TRUST objects (Objet_U).
const Nom & que_suis_je() const
Returns the string identifying the class.
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
class Probleme_base It is a Probleme_U that is not a coupling.
static void abort()
Abort routine for TRUST on a fatal error.
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
Base class for output streams.
std::enable_if_t< is_default_exec_space< EXEC_SPACE >, ConstView< _TYPE_, _SHAPE_ > > view_ro() const
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")