16#include <Milieu_MUSIG.h>
26 std::vector<std::pair<std::string, int>> especes;
31 Cerr <<
"Milieu_MUSIG : { expected instead of " << mot << finl;
35 for (is >> mot; mot !=
"}"; is >> mot)
39 else if (Motcle(mot) ==
"POROSITES")
41 Cerr <<
"You should use porosites_champ and not porosites ! Call the 911 !" << finl;
44 else if (Motcle(mot) ==
"GRAVITE")
46 Cerr <<
que_suis_je() <<
" : gravity should not be defined in Pb_Multiphase ! Use source_qdm if you want gravity in QDM equation !" << finl;
53 Cerr <<
"Milieu_MUSIG : ajout la phase " << mot <<
" ... " << finl;
55 fluide.typer_lire_simple(is,
"Typing the fluid medium ...");
57 if(fluide->que_suis_je() ==
"Fluide_MUSIG")
59 Fluide_MUSIG& fluide_cast = ref_cast(Fluide_MUSIG,fluide.valeur());
62 OWN_PTR(Fluide_base) subFluide(fluide_cast.get_Fluide());
64 if (subFluide->has_porosites())
66 Cerr <<
que_suis_je() +
" : porosity should be defined only once in the milieu_composite block, not in " + subFluide->
que_suis_je() << finl;
69 if (subFluide->a_gravite())
71 Cerr <<
que_suis_je() +
" : gravity should be defined only once in the milieu_composite block, not in " + subFluide->
que_suis_je() << finl;
74 if (subFluide->has_hydr_diam())
76 Cerr <<
que_suis_je() +
" : diametre_hyd_champ should be defined only once in the milieu_composite block, not in " + subFluide->
que_suis_je() << finl;
79 if (!sub_type(Fluide_base,subFluide.valeur()))
81 Cerr <<
que_suis_je() +
" : only real fluids should be read and not a fluid of type " + subFluide->
que_suis_je() << finl;
85 subFluide->set_id_composite(i++);
86 subFluide->nommer(nomPhase);
88 std::array<int,3> lineIndex;
90 lineIndex[1]=(int)fluidesMUSIG_.size();
92 indexMilieuToIndexFluide_.push_back(lineIndex);
96 fluidesMUSIG_.push_back(fluide_cast);
100 if (fluide->has_porosites())
102 Cerr <<
que_suis_je() +
" : porosity should be defined only once in the milieu_composite block, not in " + fluide->
que_suis_je() << finl;
105 if (fluide->a_gravite())
107 Cerr <<
que_suis_je() +
" : gravity should be defined only once in the milieu_composite block, not in " + fluide->
que_suis_je() << finl;
110 if (fluide->has_hydr_diam())
112 Cerr <<
que_suis_je() +
" : diametre_hyd_champ should be defined only once in the milieu_composite block, not in " + fluide->
que_suis_je() << finl;
115 if (!sub_type(Fluide_base,fluide.valeur()))
117 Cerr <<
que_suis_je() +
" : only real fluids should be read and not a fluid of type " + fluide->
que_suis_je() << finl;
122 fluide->set_id_composite(i++);
123 fluide->nommer(nomPhase);
125 std::array<int,3> lineIndex;
126 lineIndex[0]=(int)
fluides_.size()-1;
129 indexMilieuToIndexFluide_.push_back(lineIndex);
137 Cerr <<
"Milieu_composite : ajout la saturation " << mot <<
" ... " << finl;
138 sat_lu_.typer_lire_simple(is,
"Typing the saturation ...");
143 Cerr <<
"Milieu_composite : ajout l'interface " << mot <<
" ... " << finl;
144 inter_lu_.typer_lire_simple(is,
"Typing the interface ...");
150 Cerr <<
"You define both interface and saturation in Milieu_composite ???" << finl;
156 for (
int n = 0; n < N; n++)
158 std::vector<Interface_base *> inter;
159 for (
int m = 0; m < N; m++)
161 const std::string espn = especes[n].first, espm = especes[m].first;
162 const int pn = especes[n].second, pm = especes[m].second;
166 Cerr <<
"Interface between fluid " << n <<
" : " <<
fluides_[n]->le_nom() <<
" and " << m <<
" : " <<
fluides_[m]->le_nom() << finl;
168 const Saturation_base *sat = sub_type(Saturation_base, *inter.back()) ? &ref_cast(Saturation_base, *inter.back()) : nullptr;
177 else inter.push_back(
nullptr);
187 std::array<int,3> index = indexMilieuToIndexFluide_[iPhaseMilieu];
188 double diametre = -1;
191 Cerr <<
que_suis_je() +
" : the function get_Diameter is only available with FluideMusig" << finl;
199 Cerr <<
que_suis_je() +
" : you need to define diameters for this fluideMusig" << finl;
230 std::array<int,3> index = indexMilieuToIndexFluide_[iPhaseMilieu];
231 double diametre = -1;
234 Cerr <<
que_suis_je() +
" : the function get_Diameter is only available with FluideMusig" << finl;
242 Cerr <<
que_suis_je() +
" : you need to define diameters for this fluideMusig" << finl;
252 double diametre = -1;
258 if (dSup != dInf) diametre = (dSup-dInf)/log(dSup/dInf);
265 if ((diametre < dInf) || (diametre > dSup))
267 Cerr <<
que_suis_je() +
" : Diam Sauter < dInf or Diam Sauter > dSup of phase =" << iPhaseMilieu << finl;
276 bool dispersedGas =
false;
277 if (
fluides_[k]->
le_nom().debute_par(
"gaz_dispersee")) dispersedGas =
true;
283 bool dispersedLiquid =
false;
284 if (
fluides_[k]->
le_nom().debute_par(
"liquide_dispersee")) dispersedLiquid =
true;
285 return dispersedLiquid;
290 bool carrierLiquid =
false;
291 if (
fluides_[k]->
le_nom().debute_par(
"liquide_continu")) carrierLiquid =
true;
292 return carrierLiquid;
297 bool carrierGas =
false;
298 if (
fluides_[k]->
le_nom().debute_par(
"gaz_continu")) carrierGas =
true;
Class defining operators and methods for all reading operation in an input flow (file,...
const DoubleTab & get_Diametres() const
const int & get_NbSubPhase() const
double get_Diameter_Sup(int iPhaseMilieu) const
bool has_dispersed_gas(int k) const
double get_Diameter_Inf(int iPhaseMilieu) const
bool has_dispersed_liquid(int k) const
bool has_carrier_gas(int k) const
bool has_carrier_liquid(int k) const
double get_Diameter_Sauter(int iPhaseMilieu) const
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
Classe Milieu_composite Cette classe represente un fluide reel ainsi que.
OWN_PTR(Champ_Don_base) rho_m_
std::vector< OWN_PTR(Fluide_base)> fluides_
std::vector< std::vector< Interface_base * > > tab_interface_
bool has_interface() const
bool has_saturation() const
std::pair< std::string, int > check_fluid_name(const Nom &name)
virtual int debute_par(const char *const n) const
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.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
void Tsat(const SpanD P, SpanD res, int ncomp=1, int ind=0) const
void Hls(const SpanD P, SpanD res, int ncomp=1, int ind=0) const
void Hvs(const SpanD P, SpanD res, int ncomp=1, int ind=0) const
Classe de base des flux de sortie.