16#include <Transport_turbulent_aire_interfaciale.h>
17#include <EcritureLectureSpecial.h>
18#include <Schema_Implicite_base.h>
19#include <Scalaire_impose_paroi.h>
20#include <Echange_global_impose.h>
21#include <Neumann_sortie_libre.h>
22#include <Op_Conv_negligeable.h>
23#include <Frontiere_dis_base.h>
24#include <Aire_interfaciale.h>
25#include <Navier_Stokes_std.h>
26#include <Champ_Uniforme.h>
27#include <Matrice_Morse.h>
28#include <Pb_Multiphase.h>
29#include <Neumann_paroi.h>
30#include <Discret_Thyd.h>
31#include <Domaine_VF.h>
41#include <Neumann_paroi.h>
42#include <Scalaire_impose_paroi.h>
43#include <Echange_global_impose.h>
44#include <Milieu_composite.h>
65 terme_convectif.set_description((Nom)
"interfacial area transfer rate=Integral(-A*u*ndS) [kg] if SI units used");
67 Pb_Multiphase *pbm = sub_type(Pb_Multiphase,
probleme()) ? &ref_cast(Pb_Multiphase,
probleme()) : nullptr;
71 for (
int n = 0; n < pbm->
nb_phases(); n++)
83 const QDM_Multiphase& qdm = ref_cast(QDM_Multiphase, pbm->
equation_qdm());
87 Cerr <<
"The turbulent operator of Aire_interfaciale equation is not yet ported to the VDF discretization ..." << finl;
94 terme_diffusif.set_description((Nom)
"interfacial area transfer rate=Integral(mu_t/0.405*grad(ai)*ndS) [W] if SI units used");
102 if (!sub_type(Transport_turbulent_aire_interfaciale, *
terme_diffusif->correlation_viscosite_turbulente()))
104 Cerr <<
"Error in you Aire_interfaciale::readOn !! \n You can only use the Transport_turbulent_aire_interfaciale correlation for the diffusion operator !" << finl;
128 Cerr <<
"Interfacial area discretization" << finl;
131 l_inco_ch_->fixer_nature_du_champ(multi_scalaire);
132 l_inco_ch_->fixer_nom_compo(0,
Nom(
"tau"));
135 Cerr <<
"Bubble diameter discretization" << finl;
137 Noms noms(N), unites(N);
138 noms[0] =
"diametre_bulles";
140 Motcle typeChamp =
"champ_elem" ;
142 dis.
discretiser_champ(typeChamp, z, multi_scalaire, noms , unites, N, 0, diametre_bulles_);
147 Cerr <<
"Echelle_temporelle_turbulente::discretiser() ok" << finl;
152 return le_fluide_.valeur();
157 return le_fluide_.valeur();
167 static Motcle mot(
"Interfacial_area");
173 le_fluide_ = un_fluide;
182 Cerr <<
"Error for Aire_interfaciale::operateur(int i)" << finl;
184 Cerr <<
"and you are trying to access the " << i <<
" th one."<< finl;
198 Cerr <<
"Error for Aire_interfaciale::operateur(int i)" << finl;
200 Cerr <<
"and you are trying to access the " << i <<
" th one."<< finl;
213 Cerr <<
"Error for Aire_interfaciale::operateur(int i)" << finl;
215 Cerr <<
"and you are trying to access the " << i <<
" th one."<< finl;
229 Cerr <<
"Error for Aire_interfaciale::operateur(int i)" << finl;
231 Cerr <<
"and you are trying to access the " << i <<
" th one."<< finl;
250 DoubleTab& d_b = diametre_bulles_->valeurs();
251 double D_crit = 0.011;
255 diametre_bulles_->mettre_a_jour(temps);
258 const double void_fraction_threshold = 1e-5;
259 const double interfacial_area_threshold = 1e-5;
260 const double min_diameter = 1e-5;
261 for (n = 0; n < N; n++)
267 if (a_i(i, n)<=interfacial_area_threshold)
268 d_b(i, n) = min_diameter;
270 d_b(i, n) = std::max(min_diameter, 6 * alpha(i, n)/a_i(i, n) );
278 D_crit = 4. * std::sqrt(sat.
sigma(temp_p(i,
n_l), press_p(i,
n_l * (Np > 1))) /
g / (rho_p(!cR * i,
n_l)-rho_p(!cR * i,
n_g1)));
284 D_crit = 4. * std::sqrt(sig(i) /
g / (rho_p(!cR * i,
n_l)-rho_p(!cR * i,
n_g1)));
288 d_b(i,
n_g1) = std::min(std::max(d_b(i,
n_g1),min_diameter),D_crit);
292 d_b(i,
n_g2) = (alpha(i,
n_g2)>void_fraction_threshold) ? std::min(std::max(d_b(i,
n_g2),D_crit),10.*D_crit) : D_crit ;
classe Aire_interfaciale Equation de transport de l'aire interfaciale
int nombre_d_operateurs() const override
const Milieu_base & milieu() const override
void mettre_a_jour(double temps) override
La valeur de l'inconnue sur le pas de temps a ete calculee.
void associer_fluide(const Fluide_base &)
void associer_milieu_base(const Milieu_base &) override
void discretiser() override
Discretise l'equation.
int impr(Sortie &os) const override
Imprime les operateurs de l'equation sur un flot de sortie, de facon inconditionnelle.
const Operateur & operateur(int) const override
const Champ_Inc_base & inconnue() const override
const Motcle & domaine_application() const override
Renvoie "indetermine" Navier_Stokes_standard par exemple surcharge cette methode.
DoubleTab & passe(int i=1) override
Renvoie les valeurs du champs a l'instant t-i.
virtual DoubleTab & valeurs()=0
virtual DoubleTab & passe(int i=1)
classe Convection_Diffusion_std Cette classe est la base des equations modelisant le transport
Operateur_Diff terme_diffusif
Operateur_Conv terme_convectif
classe Discret_Thyd Cette classe est la classe de base representant une discretisation
void discretiser_champ(const Motcle &directive, const Domaine_dis_base &z, const Nom &nom, const Nom &unite, int nb_comp, int nb_pas_dt, double temps, OWN_PTR(Champ_Inc_base)&champ, const Nom &sous_type=NOM_VIDE) const
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
Class defining operators and methods for all reading operation in an input flow (file,...
const Discretisation_base & discretisation() const
Renvoie la discretisation associee a l'equation.
virtual const Champ_Inc_base & inconnue() const =0
virtual void mettre_a_jour(double temps)
La valeur de l'inconnue sur le pas de temps a ete calculee.
virtual int impr(Sortie &os) const
Imprime les operateurs de l'equation sur un flot de sortie, de facon inconditionnelle.
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
virtual void discretiser()
Discretise l'equation.
Champs_compris champs_compris_
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
DoubleTab & get_sigma_tab()
double sigma(const double T, const double P) const
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
virtual const Champ_base & masse_volumique() const
Renvoie la masse volumique du milieu.
Classe Milieu_composite Cette classe represente un fluide reel ainsi que.
bool has_interface(int k, int l) const
bool has_saturation(int k, int l) const
Interface_base & get_interface(int k, int l) const
Saturation_base & get_saturation(int k, int l) const
Une chaine de caractere (Nom) en majuscules.
Operateur_Diff & operateur_diff()
class Nom Une chaine de caractere pour nommer les objets de TRUST
virtual int finit_par(const char *const n) const
virtual int debute_par(const char *const n) const
Un tableau de chaine de caracteres (VECT(Nom)).
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 Operateur Classe generique de la hierarchie des operateurs.
classe Pb_Multiphase Cette classe represente un probleme de thermohydraulique multiphase de type "3*N...
virtual Equation_base & equation_qdm()
virtual Equation_base & equation_energie()
const Nom & nom_phase(int i) const
const Champ_base & get_champ(const Motcle &nom) const override
int has_correlation(std::string nom_correlation) const
const Domaine_dis_base & domaine_dis() const
Renvoie le domaine discretise associe au probleme.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
classe QDM_Multiphase Cette classe porte les termes de l'equation de la dynamique
double temps_courant() const
Renvoie le temps courant.
virtual int nb_valeurs_temporelles() const =0
Classe de base des flux de sortie.
_SIZE_ dimension_tot(int) const override