TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Energie_Multiphase.cpp
1/****************************************************************************
2* Copyright (c) 2026, CEA
3* All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9*
10* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
12* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13*
14*****************************************************************************/
15
16#include <EcritureLectureSpecial.h>
17#include <Scalaire_impose_paroi.h>
18#include <Echange_global_impose.h>
19#include <Op_Conv_negligeable.h>
20#include <Energie_Multiphase.h>
21#include <Pb_Multiphase_HEM.h>
22#include <TRUSTTab_parts.h>
23#include <Champ_Uniforme.h>
24#include <Matrice_Morse.h>
25#include <Neumann_paroi.h>
26#include <Discret_Thyd.h>
27#include <Domaine_VF.h>
28#include <TRUSTTrav.h>
29#include <EChaine.h>
30#include <Domaine.h>
31#include <Param.h>
32#include <SETS.h>
33
34Implemente_instanciable(Energie_Multiphase, "Energie_Multiphase", Convection_Diffusion_Temperature_base);
35// XD Energie_Multiphase eqn_base Energie_Multiphase INHERITS_BRACE Internal energy conservation equation for a
36// XD_CONT multi-phase problem where the unknown is the temperature
37
39
41{
42 assert(l_inco_ch_);
43 assert(le_fluide);
44 evanescence_.associer_eqn(*this);
46
47 terme_convectif.set_fichier("Convection_chaleur");
48 terme_convectif.set_description((Nom)"Convective heat transfer rate=Integral(-h*u*ndS) [W] if SI units used");
49 terme_diffusif.set_fichier("Diffusion_chaleur");
50 //terme_diffusif.set_description((Nom)"Conduction heat transfer rate=Integral(lambda*grad(T)*ndS) "+unite);
51 terme_diffusif.set_description((Nom)"Conduction heat transfer rate=Integral(lambda*grad(T)*ndS) [W] if SI units used");
52
53 // Special treatment for Pb_Multiphase_HEM
54 // We enforce the presence of a source term related to the interfacial flux automatically.
55 if (sub_type(Pb_Multiphase_HEM, probleme()))
56 {
57 bool check_source_FICC = false;
58
59 for (int ii = 0; ii < sources().size(); ii++)
60 if (sources()(ii)->que_suis_je().debute_par("Flux_interfacial"))
61 check_source_FICC = true;
62
63 if (!check_source_FICC)
64 {
65 EChaine source_FI("{ flux_interfacial }");
66 lire_sources(source_FI);
67 }
68 }
69
70 return is;
71}
72
74{
76 param.ajouter_non_std("evanescence|vanishing",(this));
77}
78
80{
81 if (mot=="evanescence") is >> evanescence_;
83 return 1;
84}
85
86/*! @brief Discretise l'equation.
87 *
88 */
90{
91 const Discret_Thyd& dis=ref_cast(Discret_Thyd, discretisation());
92 Cerr << "Energy equation discretization " << finl;
93 const Pb_Multiphase& pb = ref_cast(Pb_Multiphase, probleme());
94 dis.temperature(schema_temps(), domaine_dis(), l_inco_ch_, pb.nb_phases());
95 l_inco_ch_->fixer_nature_du_champ(pb.nb_phases() == 1 ? scalaire : pb.nb_phases() == dimension ? vectoriel : multi_scalaire); //pfft
96 for (int i = 0; i < pb.nb_phases(); i++)
97 l_inco_ch_->fixer_nom_compo(i, Nom("temperature_") + pb.nom_phase(i));
98 champs_compris_.ajoute_champ(l_inco_ch_);
100 Cerr << "Energie_Multiphase::discretiser() ok" << finl;
101}
102
103/*! @brief Impression des flux sur les bords sur un flot de sortie.
104 *
105 * Appelle Equation_base::impr(Sortie&)
106 *
107 * @param (Sortie& os) un flot de sortie
108 * @return (int) code de retour propage
109 */
111{
112 return Equation_base::impr(os);
113}
114
115/*! @brief Verification du nombre de composantes lues pour la specification d un champ.
116 *
117 * Dans Energie_Multiphase, les conditions aux limites de type "paroi" ne prennent
118 * qu'une compposante lorsqu'une correlation "flux_parietal" est definie au niveau du probleme.
119 *
120 * @param (ch_ref : un champ inconnu de l equation consideree)
121 */
122void Energie_Multiphase::verifie_ch_init_nb_comp_cl(const Champ_Inc_base& ch_ref, const int nb_comp, const Cond_lim_base& cl) const
123{
124 //si on verifie une CL de type
125 if (probleme().has_correlation("flux_parietal")
126 && (sub_type(Neumann_paroi, cl) || sub_type(Scalaire_impose_paroi, cl) || sub_type(Echange_global_impose, cl)))
127 {
128 if (nb_comp == 1) return; //OK
129 Cerr << "Energie_Multiphase : when using a Flux_parietal correlation, only one wall temperature/heat flux "
130 << "can be specified at the boundary " << cl.le_nom() << " . Please provide 1 component instead of " << nb_comp << "!" << finl;
132 }
133 else Convection_Diffusion_Temperature_base::verifie_ch_init_nb_comp(ch_ref, nb_comp); //traitement normal
134}
135
136/*! @brief Renvoie le nom du domaine d'application de l'equation.
137 *
138 * Ici "Thermique".
139 *
140 * @return (Motcle&) le nom du domaine d'application de l'equation
141 */
143{
144 static Motcle mot("Thermique");
145 return mot;
146}
147
153
155{
157 if (evanescence_) ok &= evanescence_->has_interface_blocs();
158 return ok;
159}
160
161/* l'evanescence passe en dernier */
162void Energie_Multiphase::dimensionner_blocs(matrices_t matrices, const tabs_t& semi_impl) const
163{
165 if (evanescence_) evanescence_->dimensionner_blocs(matrices, semi_impl);
166}
167
168void Energie_Multiphase::assembler_blocs_avec_inertie(matrices_t matrices, DoubleTab& secmem, const tabs_t& semi_impl)
169{
171 if (evanescence_) evanescence_->ajouter_blocs(matrices, secmem, semi_impl);
172}
173
174void Energie_Multiphase::calculer_alpha_rho_e_conv(const Objet_U& obj, DoubleTab& val, DoubleTab& bval, tabs_t& deriv)
175{
176 const Equation_base& eqn = ref_cast(Equation_base, obj);
177 const Pb_Multiphase& pbm = ref_cast(Pb_Multiphase, eqn.probleme());
178 const Fluide_base& fl = ref_cast(Fluide_base, eqn.milieu());
179 const Champ_base& ch_rho = fl.masse_volumique();
180 const Champ_Inc_base& ch_alpha = ref_cast(Pb_Multiphase, eqn.probleme()).equation_masse().inconnue(),
181 &ch_en = ref_cast(Champ_Inc_base, fl.energie_interne()), //toujours un Champ_Inc
182 *pch_rho = sub_type(Champ_Inc_base, ch_rho) ? &ref_cast(Champ_Inc_base, ch_rho) : nullptr; //pas toujours un Champ_Inc
183 const DoubleTab& alpha = ch_alpha.valeurs(),
184 &rho = ch_rho.valeurs(),
185 &en = ch_en.valeurs();
186
187 /* valeurs du champ */
188 const int N = val.line_size(),
189 Nl = val.dimension_tot(0),
190 cR = sub_type(Champ_Uniforme, ch_rho);
191 for (int i = 0; i < Nl; i++)
192 for (int n = 0; n < N; n++)
193 val(i, n) = (alpha(i, n) - pbm.alpha_inf_phase(n)) * rho(!cR * i, n) * en(i, n);
194
195 /* on ne peut utiliser valeur_aux_bords que si ch_rho a un domaine_dis_base */
196 DoubleTrav b_al, b_rho, b_en;
197 b_al = ch_alpha.valeur_aux_bords();
198 b_en = ch_en.valeur_aux_bords();
199
200 const int Nb = b_al.dimension_tot(0);
201 if (ch_rho.a_un_domaine_dis_base())
202 b_rho = ch_rho.valeur_aux_bords();
203 else
204 {
205 b_rho.resize(Nb, N);
206 ch_rho.valeur_aux(ref_cast(Domaine_VF, eqn.domaine_dis()).xv_bord(), b_rho);
207 }
208 for (int i = 0; i < Nb; i++)
209 for (int n = 0; n < N; n++)
210 bval(i, n) = (b_al(i, n) - pbm.alpha_inf_phase(n)) * b_rho(i, n) * b_en(i, n);
211
212 DoubleTab& d_a = deriv["alpha"]; //derivee en alpha : rho * en
213 d_a.resize(Nl, N);
214
215 for (int i = 0; i < Nl; i++)
216 for (int n = 0; n < N; n++)
217 d_a(i, n) = rho(!cR * i, n) * en(i, n);
218
219 /* derivees a travers rho et en */
220 const tabs_t d_vide = {},
221 &d_rho = pch_rho ? pch_rho->derivees() : d_vide,
222 &d_en = ch_en.derivees();
223
224 std::set<std::string> vars; //liste de toutes les derivees possibles
225 for (auto &&d_c : d_rho)
226 vars.insert(d_c.first);
227 for (auto &&d_c : d_en)
228 vars.insert(d_c.first);
229
230 for (auto && var : vars)
231 {
232 const DoubleTab *dr = d_rho.count(var) ? &d_rho.at(var) : nullptr,
233 *de = d_en.count(var) ? &d_en.at(var) : nullptr;
234
235 DoubleTab& d_v = deriv[var];
236 d_v.resize(Nl, N);
237
238 for (int i = 0; i < Nl; i++)
239 for (int n = 0; n < N; n++)
240 d_v(i, n) = alpha(i, n) * ((dr ? (*dr)(i, n) * en(i, n) : 0) + (de ? rho(!cR * i, n) * (*de)(i, n) : 0));
241 }
242}
243
244void Energie_Multiphase::calculer_alpha_rho_e(const Objet_U& obj, DoubleTab& val, DoubleTab& bval, tabs_t& deriv)
245{
246 const Equation_base& eqn = ref_cast(Equation_base, obj);
247 const Fluide_base& fl = ref_cast(Fluide_base, eqn.milieu());
248 const Champ_base& ch_rho = fl.masse_volumique();
249 const Champ_Inc_base& ch_alpha = ref_cast(Pb_Multiphase, eqn.probleme()).equation_masse().inconnue(),
250 &ch_en = ref_cast(Champ_Inc_base, fl.energie_interne()), //toujours un Champ_Inc
251 *pch_rho = sub_type(Champ_Inc_base, ch_rho) ? &ref_cast(Champ_Inc_base, ch_rho) : nullptr; //pas toujours un Champ_Inc
252 const DoubleTab& alpha = ch_alpha.valeurs(),
253 &rho = ch_rho.valeurs(),
254 &en = ch_en.valeurs();
255
256 /* valeurs du champ */
257 const int N = val.line_size(),
258 Nl = val.dimension_tot(0),
259 cR = sub_type(Champ_Uniforme, ch_rho);
260 for (int i = 0; i < Nl; i++)
261 for (int n = 0; n < N; n++)
262 val(i, n) = alpha(i, n) * rho(!cR * i, n) * en(i, n);
263
264 /* on ne peut utiliser valeur_aux_bords que si ch_rho a un domaine_dis_base */
265 DoubleTrav b_al, b_rho, b_en;
266 b_al = ch_alpha.valeur_aux_bords();
267 b_en = ch_en.valeur_aux_bords();
268
269 const int Nb = b_al.dimension_tot(0);
270 if (ch_rho.a_un_domaine_dis_base())
271 b_rho = ch_rho.valeur_aux_bords();
272 else
273 {
274 b_rho.resize(Nb, N);
275 ch_rho.valeur_aux(ref_cast(Domaine_VF, eqn.domaine_dis()).xv_bord(), b_rho);
276 }
277
278 for (int i = 0; i < Nb; i++)
279 for (int n = 0; n < N; n++)
280 bval(i, n) = b_al(i, n) * b_rho(i, n) * b_en(i, n);
281
282 DoubleTab& d_a = deriv["alpha"]; //derivee en alpha : rho * en
283 d_a.resize(Nl, N);
284
285 for (int i = 0; i < Nl; i++)
286 for (int n = 0; n < N; n++)
287 d_a(i, n) = rho(!cR * i, n) * en(i, n);
288
289 /* derivees a travers rho et en */
290 const tabs_t d_vide = { },
291 &d_rho = pch_rho ? pch_rho->derivees() : d_vide,
292 &d_en = ch_en.derivees();
293
294 std::set < std::string > vars; //liste de toutes les derivees possibles
295 for (auto &&d_c : d_rho)
296 vars.insert(d_c.first);
297 for (auto &&d_c : d_en)
298 vars.insert(d_c.first);
299
300 for (auto &&var : vars)
301 {
302 const DoubleTab *dr = d_rho.count(var) ? &d_rho.at(var) : nullptr,
303 *de = d_en.count(var) ? &d_en.at(var) : nullptr;
304
305 DoubleTab& d_v = deriv[var];
306 d_v.resize(Nl, N);
307
308 for (int i = 0; i < Nl; i++)
309 for (int n = 0; n < N; n++)
310 d_v(i, n) = alpha(i, n) * ((dr ? (*dr)(i, n) * en(i, n) : 0) + (de ? rho(!cR * i, n) * (*de)(i, n) : 0));
311 }
312}
313
314void Energie_Multiphase::calculer_alpha_rho_h(const Objet_U& obj, DoubleTab& val, DoubleTab& bval, tabs_t& deriv)
315{
316 const Equation_base& eqn = ref_cast(Equation_base, obj);
317 const Fluide_base& fl = ref_cast(Fluide_base, eqn.milieu());
318 const Champ_base& ch_rho = fl.masse_volumique();
319 const Champ_Inc_base& ch_alpha = ref_cast(Pb_Multiphase, eqn.probleme()).equation_masse().inconnue(),
320 &ch_h = ref_cast(Champ_Inc_base, fl.enthalpie()), //toujours un Champ_Inc
321 *pch_rho = sub_type(Champ_Inc_base, ch_rho) ? &ref_cast(Champ_Inc_base, ch_rho) : nullptr; //pas toujours un Champ_Inc
322 const DoubleTab& alpha = ch_alpha.valeurs(),
323 &rho = ch_rho.valeurs(),
324 &h = ch_h.valeurs();
325
326 /* valeurs du champ */
327 const int N = val.line_size(),
328 Nl = val.dimension_tot(0),
329 cR = sub_type(Champ_Uniforme, ch_rho);
330
331 for (int i = 0; i < Nl; i++)
332 for (int n = 0; n < N; n++)
333 val(i, n) = alpha(i, n) * rho(!cR * i, n) * h(i, n);
334
335 /* on ne peut utiliser valeur_aux_bords que si ch_rho a un domaine_dis_base */
336 DoubleTrav b_al, b_rho, b_h ;
337 b_al = ch_alpha.valeur_aux_bords();
338 b_h = ch_h.valeur_aux_bords();
339
340 const int Nb = b_al.dimension_tot(0);
341 if (ch_rho.a_un_domaine_dis_base())
342 b_rho = ch_rho.valeur_aux_bords();
343 else
344 {
345 b_rho.resize(Nb, N);
346 ch_rho.valeur_aux(ref_cast(Domaine_VF, eqn.domaine_dis()).xv_bord(), b_rho);
347 }
348
349 for (int i = 0; i < Nb; i++)
350 for (int n = 0; n < N; n++)
351 bval(i, n) = b_al(i, n) * b_rho(i, n) * b_h(i, n);
352
353 DoubleTab& d_a = deriv["alpha"]; //derivee en alpha : rho * h
354 d_a.resize(Nl, N);
355
356 for (int i = 0; i < Nl; i++)
357 for (int n = 0; n < N; n++)
358 d_a(i, n) = rho(!cR * i, n) * h(i, n);
359
360 /* derivees a travers rho et en */
361 const tabs_t d_vide = { },
362 &d_rho = pch_rho ? pch_rho->derivees() : d_vide,
363 &d_h = ch_h.derivees();
364
365 std::set < std::string > vars; //liste de toutes les derivees possibles
366 for (auto &&d_c : d_rho)
367 vars.insert(d_c.first);
368 for (auto &&d_c : d_h)
369 vars.insert(d_c.first);
370
371 for (auto &&var : vars)
372 {
373 const DoubleTab *dr = d_rho.count(var) ? &d_rho.at(var) : nullptr,
374 *dh = d_h.count(var) ? &d_h.at(var) : nullptr;
375
376 DoubleTab& d_v = deriv[var];
377 d_v.resize(Nl, N);
378
379 for (int i = 0; i < Nl; i++)
380 for (int n = 0; n < N; n++)
381 d_v(i, n) = alpha(i, n) * ((dr ? (*dr)(i, n) * h(i, n) : 0) + (dh ? rho(!cR * i, n) * (*dh)(i, n) : 0));
382 }
383}
384
386{
387 if (champ_convecte_)
388 return; //deja fait
389
390 const int Nt = inconnue().nb_valeurs_temporelles(),
391 Nl = inconnue().valeurs().size_reelle_ok() ? inconnue().valeurs().dimension(0) : -1,
392 Nc = inconnue().valeurs().line_size();
393
394 //champ_convecte_ : meme type / support que l'inconnue
395 discretisation().creer_champ(champ_convecte_, domaine_dis(), inconnue().que_suis_je(), "N/A", "N/A", Nc, Nl, Nt, schema_temps().temps_courant());
396
397 champ_convecte_->associer_eqn(*this);
398 auto nom_fonc = get_fonc_champ_convecte();
399 champ_convecte_->nommer(nom_fonc.first);
400 champ_convecte_->init_champ_calcule(*this, nom_fonc.second);
401}
Classe Champ_Inc_base.
virtual int nb_valeurs_temporelles() const
Renvoie le nombre de valeurs temporelles actuellement conservees.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
DoubleTab valeur_aux_bords() const override
renvoie la valeur du champ aux faces de bord
virtual DoubleTab & valeurs()=0
classe Champ_Uniforme Represente un champ constant dans l'espace et dans le temps.
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
virtual int a_un_domaine_dis_base() const
Definition Champ_base.h:69
virtual DoubleTab valeur_aux_bords() const
renvoie la valeur du champ aux faces de bord
virtual DoubleTab & valeur_aux(const DoubleTab &positions, DoubleTab &valeurs) const
Provoque une erreur ! Doit etre surchargee par les classes derivees.
classe Cond_lim_base Classe de base pour la hierarchie des classes qui representent les differentes c...
void temperature(const Schema_Temps_base &, Domaine_dis_base &, OWN_PTR(Champ_Inc_base)&, int nb_comp=1) const
classe Discret_Thyd Cette classe est la classe de base representant une discretisation
static void creer_champ(OWN_PTR(Champ_Inc_base)&ch, const Domaine_dis_base &z, const Nom &type, const Nom &nom, const Nom &unite, int nb_comp, int nb_ddl, int nb_pas_dt, double temps, const Nom &directive=NOM_VIDE, const Nom &nom_discretisation=NOM_VIDE)
Methode statique qui cree un OWN_PTR(Champ_Inc_base) du type specifie.
class Domaine_VF
Definition Domaine_VF.h:44
Classe Echange_global_impose Cette classe represente le cas particulier de la classe.
classe Energie_Multiphase Cas particulier de Convection_Diffusion_std pour un fluide quasi conpressib...
void verifie_ch_init_nb_comp_cl(const Champ_Inc_base &ch_ref, const int nb_comp, const Cond_lim_base &cl) const override
Verification du nombre de composantes lues pour la specification d un champ.
int has_interface_blocs() const override
int impr(Sortie &os) const override
Impression des flux sur les bords sur un flot de sortie.
Operateur_Evanescence evanescence_
const Motcle & domaine_application() const override
Renvoie le nom du domaine d'application de l'equation.
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
void assembler_blocs_avec_inertie(matrices_t matrices, DoubleTab &secmem, const tabs_t &semi_impl={}) override
static void calculer_alpha_rho_e_conv(const Objet_U &obj, DoubleTab &val, DoubleTab &bval, tabs_t &deriv)
void dimensionner_blocs(matrices_t matrices, const tabs_t &semi_impl={}) const override
void init_champ_convecte() const override
static void calculer_alpha_rho_e(const Objet_U &obj, DoubleTab &val, DoubleTab &bval, tabs_t &deriv)
const Champ_Inc_base & inconnue() const override
Renvoie le champ inconnue representant l'inconnue (T ou H) (version const).
void discretiser() override
Discretise l'equation.
static void calculer_alpha_rho_h(const Objet_U &obj, DoubleTab &val, DoubleTab &bval, tabs_t &deriv)
virtual std::pair< std::string, fonc_calc_t > get_fonc_champ_convecte() const
void set_param(Param &param) const override
void dimensionner_matrice_sans_mem(Matrice_Morse &matrice) override
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
virtual void set_param(Param &titi) const override
virtual const Milieu_base & milieu() const =0
virtual void dimensionner_matrice_sans_mem(Matrice_Morse &mat_morse)
Sources & sources()
Renvoie les termes sources asssocies a l'equation.
virtual void assembler_blocs_avec_inertie(matrices_t matrices, DoubleTab &secmem, const tabs_t &semi_impl={})
const Discretisation_base & discretisation() const
Renvoie la discretisation associee a l'equation.
virtual void dimensionner_blocs(matrices_t matrices, const tabs_t &semi_impl={}) const
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.
virtual void verifie_ch_init_nb_comp(const Champ_Inc_base &ch_ref, const int nb_comp) const
Verification du nombre de composantes lues pour la specification d un champ.
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
virtual void discretiser()
Discretise l'equation.
virtual Entree & lire_sources(Entree &)
Lecture des termes sources dans un flot d'entree.
virtual int has_interface_blocs() const
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
Definition Fluide_base.h:38
const Champ_base & energie_interne() const
const Champ_base & enthalpie() const
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
virtual const Champ_base & masse_volumique() const
Renvoie la masse volumique du milieu.
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
Classe Neumann_paroi Cette condition limite correspond a un flux impose pour l'equation de.
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
classe Objet_U Cette classe est la classe de base des Objets de TRUST
Definition Objet_U.h:73
static int dimension
Definition Objet_U.h:99
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
Definition Objet_U.cpp:104
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Objet_U.cpp:293
virtual const Nom & le_nom() const
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
Definition Objet_U.cpp:319
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
void ajouter_non_std(const char *keyword, const Objet_U *value, Param::Nature nat=Param::OPTIONAL)
Register a keyword handled by Objet_U::lire_motcle_non_standard.
Definition Param.cpp:489
classe Pb_Multiphase Cette classe represente un probleme de thermohydraulique multiphase de type "3*N...
double alpha_inf_phase(int i) const
const Nom & nom_phase(int i) const
int nb_phases() const
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
classe Scalaire_impose_paroi Impose un scalaire a la paroi dans une equation de type Convection-Difus...
Classe de base des flux de sortie.
Definition Sortie.h:52
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTTab.tpp:469
_SIZE_ dimension_tot(int) const override
Definition TRUSTTab.tpp:160
_SIZE_ dimension(int d) const
Definition TRUSTTab.tpp:133
int line_size() const
Definition TRUSTVect.tpp:67
_SIZE_ size_reelle_ok() const
Definition TRUSTVect.tpp:38