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>
65 return temperature_.valeur();
70 return temperature_.valeur();
78 DoubleTab& tab_rho = le_fluide->masse_volumique().
valeurs();
82 double t = le_prob_->schema_temps().temps_courant();
95 double t = le_prob_->schema_temps().temps_courant();
106 DoubleTab& tab_rho = le_fluide->masse_volumique().valeurs();
109 le_fluide->masse_volumique().mettre_a_jour(temps);
125 Cerr<<
"The viscosity field mu of type "<<mu.
que_suis_je()<<
" is not recognized.";
137 const DoubleTab& tab_Cp = le_fluide->capacite_calorifique().
valeurs();
138 const DoubleTab& tab_mu = mu.
valeurs();
140 DoubleTab& tab_lambda = lambda.
valeurs();
141 ToDo_Kokkos(
"critical");
142 int i, n = tab_lambda.
size();
148 double mu0 = tab_mu(0,0);
149 for (i=0 ; i<n ; i++) tab_lambda(i,0) = mu0 * tab_Cp(i,0) /
Pr_;
153 for (i=0 ; i<n ; i++) tab_lambda(i,0) = tab_mu(i,0) * tab_Cp(i,0) /
Pr_;
164 const Champ_Don_base& viscosite_dynamique = le_fluide->viscosite_dynamique();
166 const DoubleTab& tab_rho = le_fluide->masse_volumique().valeurs();
167 const DoubleTab& tab_mu = viscosite_dynamique.
valeurs();
168 Champ_Don_base& viscosite_cinematique = le_fluide->viscosite_cinematique();
169 DoubleTab& tab_nu = viscosite_cinematique.
valeurs();
170 int n = tab_nu.
size();
172 if (viscosite_cinematique.
que_suis_je()==
"Champ_Fonc_P0_VDF")
175 for (
int i=0 ; i<n ; i++)
176 tab_nu(i,0) = tab_mu(uniforme ? 0 : i,0) / tab_rho(i,0);
180 const IntTab& ef = ref_cast(
Domaine_VF,le_fluide->vitesse().domaine_dis_base()).elem_faces();
182 CIntTabView elem_faces = ef.
view_ro();
183 CDoubleArrView rho =
static_cast<const DoubleVect&
>(tab_rho).view_ro();
184 CDoubleArrView mu =
static_cast<const DoubleVect&
>(tab_mu).view_ro();
185 DoubleArrView nu =
static_cast<DoubleVect&
>(tab_nu).view_rw();
186 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), n, KOKKOS_LAMBDA(
const int i)
189 for (
int face = 0; face < nfe; face++)
190 rhoelem += rho(elem_faces(i, face));
192 nu(i) = mu(uniforme ? 0 : i) / rhoelem;
194 end_gpu_timer(__KERNEL_NAME__);
205 DoubleTab& tab_alpha = le_fluide->diffusivite().valeurs();
208 int n = tab_alpha.
size();
209 CDoubleArrView lambda =
static_cast<const DoubleVect&
>(conductivite.
valeurs()).view_ro();
210 CDoubleArrView Cp =
static_cast<const DoubleVect&
>(le_fluide->capacite_calorifique().valeurs()).view_ro();
211 CDoubleArrView rho =
static_cast<const DoubleVect&
>(le_fluide->masse_volumique().valeurs()).view_ro();
212 DoubleArrView alpha =
static_cast<DoubleVect&
>(tab_alpha).view_rw();
213 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), n, KOKKOS_LAMBDA(
const int i)
215 alpha(i) = lambda(uniforme ? 0 : i) / (rho(i) * Cp(i));
217 end_gpu_timer(__KERNEL_NAME__);
244 DoubleTab& tab_rho = le_fluide->masse_volumique().valeurs();
254 int n=tab_rho.
size();
255 double Pth = le_fluide->pression_th();
256 const DoubleTab& tab_ICh = le_fluide->inco_chaleur().valeurs();
257 ToDo_Kokkos(
"Implement a ::compute_tab_rho() on device");
258 for (
int som = 0; som < n; som++)
274 Cerr<<
"Drho_DP doit etre code dans la classe fille "<<
que_suis_je()<<
" pour etre utilisee"<<finl;
280 Cerr<<
"Drho_DT doit etre code dans la classe fille "<<
que_suis_je()<<
" pour etre utilisee"<<finl;
286 Cerr<<
"De_DP doit etre code dans la classe fille "<<
que_suis_je()<<
" pour etre utilisee"<<finl;
292 Cerr<<
"De_DT doit etre code dans la classe fille "<<
que_suis_je()<<
" pour etre utilisee"<<finl;
299 return champs_compris_.
has_champ(nom, ref_champ);
303 return champs_compris_.has_champ(nom);
308 return champs_compris_.get_champ(nom);
313 if (opt==DESCRIPTION)
314 Cerr<<
"Loi_Etat_base : "<<champs_compris_.liste_noms_compris()<<finl;
316 nom.add(champs_compris_.liste_noms_compris());
classe Champ_Don_base classe de base des Champs donnes (non calcules)
void mettre_a_jour(double temps) override
Mise a jour en temps.
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
Classe Champ_Fonc_Tabule Classe derivee de Champ_Fonc_base qui represente les.
classe Champ_base Cette classe est la base de la hierarchie des champs.
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,...
classe Fluide_Dilatable_base Cette classe represente un d'un fluide dilatable,
classe Loi_Etat_base Cette classe est la base de la hierarchie des lois d'etat.
void assoscier_probleme(const Probleme_base &pb)
Associe le probleme a la loi d'etat.
virtual void initialiser_inco_ch()
Initialise l'inconnue de l'equation de chaleur : ne fai rien.
virtual double De_DP(double, double) const
void mettre_a_jour(double)
Met a jour la loi d'etat et le champ rho.
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 &)
Associe le fluide a la loi d'etat.
virtual void calculer_masse_volumique()
Recalcule la masse volumique.
virtual double Drho_DT(double, double) const
virtual void preparer_calcul()
Prepare le fluide au calcul.
virtual void calculer_alpha()
Calcule la diffusivite.
virtual double calculer_H(double, double) const
Cas gaz parfait : ne fait rien Cas gaz Reel : doit recalculer l'enthalpie a partir de la pression et ...
virtual double Drho_DP(double, double) const
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
virtual void calculer_lambda()
Calcule la conductivite.
virtual void calculer_mu()
Calcule la viscosite.
void calculer_nu()
Calcule la viscosite cinematique.
virtual void calculer_nu_sur_Sc()
Ne fait rien Surcharge dans Loi_Etat_Melange_Binaire.
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
virtual void calculer_mu_sur_Sc()
Ne fait rien Surcharge dans Loi_Etat_Melange_GP.
Une chaine de caractere (Nom) en majuscules.
Un tableau de chaine de caracteres (VECT(Nom)).
classe Objet_U Cette classe est la classe de base des Objets de TRUST
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
static void abort()
Routine de sortie de Trio-U sur une erreur abort().
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
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")