17#include <Frottement_interfacial_Tomiyama_complet.h>
18#include <Pb_Multiphase.h>
19#include <Milieu_composite.h>
20#include <Sources_helpers_Multiphase.h>
33 param.ajouter(
"beta", &
beta_);
34 param.ajouter(
"constante_gravitation", &
g_);
36 param.lire_avec_accolades_depuis(is);
39 const Pb_Multiphase *pbm = sub_type(Pb_Multiphase, pb_.valeur()) ? &ref_cast(Pb_Multiphase, pb_.valeur()) : nullptr;
44 for (
int k = 0; k < pbm->
nb_phases(); k++)
46 if (!(ref_cast(Milieu_composite, pbm->
milieu()).has_interface(
n_l, k)))
Process::exit(
"Frottement_interfacial_Tomiyama_complet : one must define an interface and have a surface tension !");
53 if (!pb_->has_champ(
"diametre_bulles"))
Process::exit(
"Frottement_interfacial_Tomiyama_complet : there must be a bubble diameter field !");
56std::pair<double, double> Frottement_interfacial_Tomiyama_complet::compute_Cd(
double Re,
double dndv_Re,
double Eo,
double alpha_k)
const
62 static constexpr double stokes_coeff[] = {16., 24., 24.};
63 static constexpr double cap_coeff[] = {48., 72., 1e300};
65 const double minCdelli_cap = std::min(
66 2. / 3. * std::sqrt(Eo) * std::pow((1 + 17.67 * std::pow(1 - alpha_k, 9. / 7.)) / (18.67 * std::pow(1 - alpha_k, 3. / 2.)), 2.),
67 8. * Eo / (3. * (Eo + 4.)) * (1 - alpha_k) * (1 - alpha_k));
71 const double Re_power = std::pow(Re, 0.687);
72 const double Cd_stokes = sc / Re * (1 + 0.15 * Re_power);
73 const double Cd_cap = cc / Re;
74 const double Cd_viscous = std::min(Cd_stokes, Cd_cap);
75 const double Cd =
beta_ * std::max(Cd_viscous, minCdelli_cap);
78 if (Cd_viscous > minCdelli_cap)
80 if (Cd_stokes <= Cd_cap)
81 dndv_Cd =
beta_ * (-sc * dndv_Re / (Re * Re) * (1 + 0.15 * Re_power) + sc / Re * 0.15 * dndv_Re * 0.687 * std::pow(Re, 0.687 - 1.));
83 dndv_Cd =
beta_ * (-cc * dndv_Re / (Re * Re));
90 const DoubleTab& rho,
const DoubleTab& mu,
const DoubleTab& sigma,
double Dh,
91 const DoubleTab& ndv,
const DoubleTab& d_bulles, DoubleTab& coeff)
const
97 for (
int k = 0; k < N; k++)
100 const int ind_trav = sigma_pair_index(k,
n_l, N);
102 const double Re = rho(
n_l) * std::max(ndv(
n_l, k), 1.e-6) * d_bulles(k) / mu(
n_l);
103 const double dndv_Re = rho(
n_l) * (ndv(
n_l, k) > 1.e-6 ? 1. : 0.) * d_bulles(k) / mu(
n_l);
104 const double Eo = eotvos_number(
g_, rho(
n_l), rho(k), d_bulles(k), sigma(ind_trav));
106 const auto [Cd, dndv_Cd] = compute_Cd(Re, dndv_Re, Eo, alpha(k));
108 if (alpha(
n_l) > 1.e-6)
110 coeff(k,
n_l, 0) = 3. / 4. * Cd / d_bulles(k) * alpha(k) * rho(
n_l) * ndv(
n_l, k);
111 coeff(
n_l, k, 0) = coeff(k,
n_l, 0);
112 coeff(k,
n_l, 1) = 3. / 4. * Cd / d_bulles(k) * alpha(k) * rho(
n_l) + 3. / 4. * dndv_Cd / d_bulles(k) * alpha(k) * rho(
n_l) * ndv(
n_l, k);
113 coeff(
n_l, k, 1) = coeff(k,
n_l, 1);
117 coeff(k,
n_l, 0) = 3. / 4. * Cd / d_bulles(k) * alpha(k) * rho(
n_l) * ndv(
n_l, k) * alpha(
n_l) * 1.e6;
118 coeff(
n_l, k, 0) = coeff(k,
n_l, 0);
119 coeff(k,
n_l, 1) = (3. / 4. * Cd / d_bulles(k) * alpha(k) * rho(
n_l) + 3. / 4. * dndv_Cd / d_bulles(k) * alpha(k) * rho(
n_l) * ndv(
n_l, k)) * alpha(
n_l) * 1.e6;
120 coeff(
n_l, k, 1) = coeff(k,
n_l, 1);
127 const DoubleTab& rho,
const DoubleTab& mu,
const DoubleTab& sigma,
double Dh,
128 const DoubleTab& ndv,
const DoubleTab& d_bulles, DoubleTab& coeff)
const
134 for (
int k = 0; k < N; k++)
137 const int ind_trav = sigma_pair_index(k,
n_l, N);
139 const double Re = rho(
n_l) * std::max(ndv(
n_l, k), 1.e-6) * d_bulles(k) / mu(
n_l);
140 const double Eo = eotvos_number(
g_, rho(
n_l), rho(k), d_bulles(k), sigma(ind_trav));
142 const auto [Cd, dndv_Cd] = compute_Cd(Re, 0., Eo, alpha(k));
144 coeff(k,
n_l) = (coeff(
n_l, k) = Cd);
Class defining operators and methods for all reading operation in an input flow (file,...
Interfacial friction coefficients for bubbly flows using the Tomiyama correlation.
void coefficient_CD(const DoubleTab &alpha, const DoubleTab &p, const DoubleTab &T, const DoubleTab &rho, const DoubleTab &mu, const DoubleTab &sigma, double Dh, const DoubleTab &ndv, const DoubleTab &d_bulles, DoubleTab &coeff) const override
Computes drag coefficients Cd only (no derivatives).
int contamination_
Contamination level: 0=pure, 1=moderate, 2=fully contaminated.
void coefficient(const DoubleTab &alpha, const DoubleTab &p, const DoubleTab &T, const DoubleTab &rho, const DoubleTab &mu, const DoubleTab &sigma, double Dh, const DoubleTab &ndv, const DoubleTab &d_bulles, DoubleTab &coeff) const override
Computes friction coefficients and their derivatives with respect to relative velocity.
int n_l
Index of the liquid phase.
void completer() override
classe Frottement_interfacial_base utilitaire pour les operateurs de frottement interfacial prenant l...
int find_liquid_phase() const
Finds the continuous liquid phase index in a multiphase problem.
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.
virtual const Milieu_base & milieu() const
Renvoie le milieu physique associe au probleme.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
_SIZE_ dimension(int d) const