16#include <Fluide_Weakly_Compressible.h>
17#include <Loi_Etat_Multi_GP_WC.h>
18#include <Champ_Uniforme.h>
20#include <Probleme_base.h>
21#include <Domaine_VF.h>
54 param.lire_avec_accolades_depuis(is);
58 molar_mass_->valeurs().line_size() !=
num_espece_ ||
62 Cerr <<
"Error while reading the EOS Multi_Gaz_Parfait_WC : This is not allowed !" << finl;
63 Cerr <<
"Verify that the dimension of the fields Diffusion_coeff, Molar_mass, Mu and Cp is = " <<
num_espece_ << finl;
79 Cerr <<
"Error in your data file : This is not allowed !" << finl;
80 Cerr <<
"You should define " <<
num_espece_-1 <<
" Species equations and not " << liste_Y.size() << finl;
86 Yn.
nommer(
"fraction_massique_nonresolue");
87 double t = le_fluide->masse_volumique().temps();
88 update_Yn_values(Yn,t);
92void Loi_Etat_Multi_GP_WC::update_Yn_values(
Champ_Don_base& Yn,
double temps)
94 DoubleTab& tab_Yn = Yn.
valeurs();
97 const int size = liste_Y(0)->valeurs().
size();
98 assert(tab_Yn.
size() == size);
101 for (
int i=0; i<liste_Y.size(); i++)
102 for (
int n=0; n<size; n++) tab_Yn(n,0) -= liste_Y(i)->valeurs()(n,0);
104 double min_Yn = local_min_vect(tab_Yn);
107 Cerr <<
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << finl;
108 Cerr <<
"BIG PROBLEM : check your calculation because we are detecting negative mass fraction !" << finl;
109 Cerr <<
"The results are saved to help you !" << finl;
110 Cerr <<
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << finl;
126 const int size = tab_masse_mol_mel.
size();
127 assert (liste_Y(0)->valeurs().size()==size);
128 ArrOfDouble inv_M(size);
135 const DoubleTab& Y_i = (i ==
num_espece_ -1) ? Yn : liste_Y(i)->valeurs();
137 for (
int elem=0; elem<size; elem++) inv_M[elem] += Y_i(elem,0)/M_i;
140 for (
int elem=0; elem<size; elem++) tab_masse_mol_mel(elem,0) = 1.0 / inv_M[elem];
152 const int size =liste_Y(0)->valeurs().
size();
160 const DoubleTab& Y_i = (i ==
num_espece_ -1) ? Yn : liste_Y(i)->valeurs();
162 for (
int elem=0; elem<size; elem++) tab_Cp(elem,0) += Y_i(elem,0)*cp_i;
171 const DoubleTab& tab_ICh = le_fluide->inco_chaleur().valeurs();
172 DoubleTab& tab_rho = le_fluide->masse_volumique().valeurs();
176 double temps = le_fluide->masse_volumique().
temps();
177 update_Yn_values(Yn,temps);
181 const int n = tab_rho.
size();
184 for (
int som=0 ; som<n ; som++)
195 Debog::verifier(
"Loi_Etat_Multi_GP_WC::calculer_masse_volumique, tab_rho",tab_rho);
249 const int size = liste_Y(0)->valeurs().size();
250 DoubleTrav phi(size), mu(size);
269 double a = 1. + sqrt( mu_i / mu_j ) * pow( M_j / M_i , 0.25);
270 double b = sqrt( 8. * ( 1. + ( M_i / M_j )));
271 double phi_ij = ( M_i / M_j ) * a * a / b;
273 const DoubleTab& y_j = (j ==
num_espece_ -1) ? Yn : liste_Y(j)->valeurs();
275 for (
int node=0; node<y_j.
size(); node++) phi(node) += y_j(node,0) * phi_ij;
278 const DoubleTab& y_i = (i ==
num_espece_ -1) ? Yn : liste_Y(i)->valeurs();
279 for (
int node=0; node<y_i.
size(); node++) mu(node) += mu_i * y_i(node,0) / ( y_i(node,0) + phi(node) );
299 DoubleTab& tab_mu_sur_Sc = mu_sur_Sc.
valeurs();
300 const Champ_base& rho = le_fluide->masse_volumique();
301 const DoubleTab& tab_rho = rho.
valeurs();
302 const int n = tab_mu_sur_Sc.
size();
311 Cerr <<
"We should not have a density field of type Champ_Uniforme !" << finl;
315 for (
int i=0 ; i<n ; i++)
323 Cerr <<
"We should not have a mu_sur_Sc of type Champ_Uniforme !" << finl;
344 DoubleTab& tab_nu_sur_Sc = nu_sur_Sc.
valeurs();
345 const int n = tab_nu_sur_Sc.
size();
353 double temps_champ = le_fluide->masse_volumique().temps();
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.
virtual DoubleTab & valeurs()=0
classe Champ_base Cette classe est la base de la hierarchie des champs.
virtual double changer_temps(const double t)
Fixe le temps auquel se situe le champ.
double temps() const
Renvoie le temps du champ.
static void verifier(const char *const msg, double)
Class defining operators and methods for all reading operation in an input flow (file,...
void nommer(const Nom &) override
Donne un nom au champ.
Probleme_base & get_problem()
classe Fluide_Weakly_Compressible Cette classe represente un d'un fluide faiblement compressible
const DoubleTab & pression_th_tab() const
const Champ_Don_base & fraction_massique_nonresolue() const
static constexpr double R_GAS
classe Loi_Etat_Multi_GP_WC Cette classe represente la loi d'etat pour un melange de gaz parfaits.
void calculer_masse_volumique() override
Recalcule la masse volumique.
const Champ_Don_base & cp_especes() const
void calculer_nu_sur_Sc() override
Calcule la viscosite dynamique sur Schmidt = D.
const Champ_Don_base & coeff_diffusion_especes() const
void calculer_tab_Cp(DoubleTab &cp) const override
Calcule le Cp du melange Le Cp depend du Cp de chaque espece et de la composition du melange (Yi).
const Champ_Don_base & visc_dynamique_especes() const
void calculer_mu_sur_Sc() override
Calcule la viscosite dynamique sur Schmidt = rho * D.
void initialiser_inco_ch() override
Initialise l'inconnue de l'equation de chaleur : ne fai rien.
const Champ_Don_base & masse_molaire_especes() const
classe Loi_Etat_Multi_GP_base Cette classe represente la loi d'etat pour un melange de gaz parfaits.
void calculer_masse_volumique() override=0
Recalcule la masse volumique.
virtual void calculer_mu_wilke()=0
void calculer_tab_mu(const DoubleTab &mu, int size)
void calculer_masse_molaire()
void initialiser_inco_ch() override
Initialise l'inconnue de l'equation de chaleur : ne fai rien.
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.
int postraiter(int force=1) override
Si force=1, effectue le postraitement sans tenir compte des frequences de postraitement.
void sauver() const override
Ecriture sur fichier en vue d'une reprise (sauvegarde).
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")