TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Op_Evanescence_Homogene_PolyMAC_MPFA_Face.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 <Op_Evanescence_Homogene_PolyMAC_MPFA_Face.h>
17#include <Viscosite_turbulente_base.h>
18#include <Op_Grad_PolyMAC_MPFA_Face.h>
19#include <Champ_Face_PolyMAC_MPFA.h>
20#include <Champ_Elem_PolyMAC_MPFA.h>
21#include <Vitesse_relative_base.h>
22#include <Echange_impose_base.h>
23#include <Gravite_Multiphase.h>
24#include <Domaine_Cl_PolyMAC_family.h>
25#include <Domaine_PolyMAC_MPFA.h>
26#include <Milieu_composite.h>
27#include <Interface_base.h>
28#include <Neumann_paroi.h>
29#include <Pb_Multiphase.h>
30#include <Dirichlet.h>
31
32Implemente_instanciable(Op_Evanescence_Homogene_PolyMAC_MPFA_Face, "Op_Evanescence_HOMOGENE_PolyMAC_MPFA_Face", Op_Evanescence_Homogene_Face_base);
33
36
37void Op_Evanescence_Homogene_PolyMAC_MPFA_Face::dimensionner_blocs_aux(std::set<int>& idx, Stencil& sten, Matrice_Morse& mat ) const
38{
39 const Domaine_VF& domaine = ref_cast(Domaine_VF, equation().domaine_dis());
40 const Champ_Face_base& ch = ref_cast(Champ_Face_base, equation().inconnue());
41 const int nf_tot = domaine.nb_faces_tot(), D = dimension, N = ch.valeurs().line_size() ;
42 int i, l, e, d, n;
43 for (e = 0, l = nf_tot; e < domaine.nb_elem_tot(); e++)
44 for (d = 0; d < D; d++, l++, idx.clear())
45 {
46 for (i = N * l, n = 0; n < N; n++, i++)
47 for (auto j = mat.get_tab1()(i) - 1; j < mat.get_tab1()(i + 1) - 1; j++)
48 idx.insert(mat.get_tab2()(j) - 1);
49 for (i = N * l, n = 0; n < N; n++, i++)
50 for (auto &&c : idx)
51 sten.append_line(i, c);
52 }
53}
54
55void Op_Evanescence_Homogene_PolyMAC_MPFA_Face::ajouter_blocs_aux(IntTrav& maj, DoubleTrav coeff, matrices_t matrices, DoubleTab& secmem) const
56{
57 const Pb_Multiphase& pbm = ref_cast(Pb_Multiphase, equation().probleme());
58 const bool res_en_T = pbm.resolution_en_T();
59 const Milieu_composite& milc = ref_cast(Milieu_composite, equation().milieu());
60 const Domaine_VF& domaine = ref_cast(Domaine_VF, equation().domaine_dis());
61 const Champ_Face_base& ch = ref_cast(Champ_Face_base, equation().inconnue());
62 const DoubleTab& inco = ch.valeurs(), &alpha = pbm.equation_masse().inconnue().passe(),
63 &rho = equation().milieu().masse_volumique().passe(),
64 &temp_ou_enth = pbm.equation_energie().inconnue().passe(),
65 &press = ref_cast(QDM_Multiphase, pbm.equation_qdm()).pression().passe(),
66 &mu = ref_cast(Milieu_composite, equation().milieu()).viscosite_dynamique().passe(),
67 *d_bulles = (equation().probleme().has_champ("diametre_bulles")) ? &equation().probleme().get_champ("diametre_bulles").valeurs() : nullptr,
68 *k_turb = (equation().probleme().has_champ("k")) ? &equation().probleme().get_champ("k").passe() : nullptr,
69 *gravity = (equation().probleme().has_champ("gravite")) ? &equation().probleme().get_champ("gravite").valeurs() : nullptr ;
70
71 const DoubleVect& dh_e = milc.diametre_hydraulique_elem();
72 int e, k, l, n, m, N = inco.line_size(), Nk = (k_turb) ? (*k_turb).line_size() : 0, D = dimension, nf_tot = domaine.nb_faces_tot(), cR = (rho.dimension_tot(0) == 1), cM = (mu.dimension_tot(0) == 1), Np = press.line_size();
73 double a_eps = alpha_res_, a_eps_min = alpha_res_min_, a_m, a_max; //seuil de declenchement du traitement de l'evanescence
74 Matrice_Morse& mat_diag = *matrices.at(ch.le_nom().getString());
75
76 if (N == 1) return; //pas d'evanescence en simple phase!
77
78 DoubleTab dvr_elem(domaine.nb_elem_tot()*dimension, N, N, N); // Derivee de vr(n,k) en e par rapport a la phase l selon d ; pour l'instant toujours selon d2=d
79 // On se le trimballe parce que quelqu'un a separe la boucle sur les matrices de celle sur le secmem
80
81
82 /* calcul de la vitesse de derive : on va chercher les quantites intermediaires requises */
85 out.vr.resize(N, N, D), out.dvr.resize(N, N, D, N*D);
86 const Vitesse_relative_base* correlation_vd = pbm.has_correlation("vitesse_relative") ? &ref_cast(Vitesse_relative_base, pbm.get_correlation("vitesse_relative")) : nullptr;
87 DoubleTab gradAlpha, vort, nut;
88 const int is_turb = ref_cast(Operateur_Diff_base, ref_cast(QDM_Multiphase, pbm.equation_qdm()).operateur_diff().l_op_base()).is_turb();
89 if (correlation_vd)
90 {
91 in.alpha.resize(N), in.rho.resize(N), in.mu.resize(N), in.d_bulles.resize(N), in.k.resize(N), in.nut.resize(N), in.v.resize(D, N), in.sigma.resize(N*(N-1)/2), in.g.resize(D);
92 if (correlation_vd->needs_grad_alpha())
93 {
94 gradAlpha.resize(domaine.nb_elem_tot(), D, N);
95 calc_grad_alpha_elem(gradAlpha);
96 in.gradAlpha.resize(D, N);
97 }
98 if (correlation_vd->needs_vort())
99 {
100 vort.resize(domaine.nb_elem_tot(), D, N);
101 calc_vort_elem(vort);
102 in.vort.resize(D, N);
103 }
104 if (is_turb)
105 {
106 nut.resize(domaine.nb_elem_tot(), N);
107 ref_cast(Viscosite_turbulente_base, (*ref_cast(Operateur_Diff_base, equation().operateur(0).l_op_base()).correlation_viscosite_turbulente())).eddy_viscosity(nut); //remplissage par la correlation
108 }
109 }
110 for (e = 0; e < domaine.nb_elem_tot(); e++) /* elements : a faire D fois par element */
111 {
112 /* phase majoritaire : directement dans l'element */
113 for (a_max = 0, k = -1, n = 0; n < N; n++)
114 if ((a_m = alpha(e, n)) > a_max) k = n, a_max = a_m;
115 if (k >= 0)
116 for (int i = nf_tot + D * e, d = 0; d < D; d++, i++) maj(i) = k;
117 else abort();
118
119 /* calcul de la vitesse de derive */
120 if (correlation_vd)
121 {
122 in.dh = dh_e(e) ;
123 for (n = 0; n < N; n++)
124 {
125 in.alpha(n) = alpha(e, n);
126 in.rho(n) = rho(!cR * e, n);
127 in.mu(n) = mu(!cM * e, n);
128 in.d_bulles(n) = (d_bulles) ? (*d_bulles)(e, n) : -1. ;
129 for (int d = 0; d < D; d++) in.v(d, n) = inco(nf_tot + D * e + d, n);
130 for (m = n+1; m < N; m++)
131 if (milc.has_interface(n, m))
132 {
133 const int ind_trav = (n*(N-1)-(n-1)*(n)/2) + (m-n-1); // Et oui ! matrice triang sup !
134 Interface_base& sat = milc.get_interface(n, m);
135 in.sigma(ind_trav) = res_en_T ? sat.sigma(temp_ou_enth(e, n), press(e, n * (Np > 1))) : sat.sigma_h(temp_ou_enth(e, n), press(e, n * (Np > 1)));
136 }
137 }
138 for (n = 0; n < Nk; n++) in.k(n) = (k_turb) ? (*k_turb)(e, n) : -1., in.nut(n) = (is_turb) ? nut(e, n) : -1. ;
139 for (int d = 0; d < D; d++) in.g(d) = (*gravity)(e,d);
140 if (correlation_vd->needs_grad_alpha())
141 for (n = 0; n < N; n++)
142 for (int d = 0; d < D; d++) in.gradAlpha(d, n) = gradAlpha(e, d, n);
143 if (correlation_vd->needs_vort())
144 for (n = 0; n < N; n++)
145 for (int d = 0; d < D; d++) in.vort(d, n) = vort(e, d, n);
146
147 correlation_vd->vitesse_relative(in, out);
148 }
149
150 /* coeff d'evanescence */
151 int i,d;
152 for (i = nf_tot + D * e, d = 0; d < D; d++, i++)
153 for (n = 0; n < N; n++)
154 if (n != k && (a_m = alpha(e, n)) < a_eps)
155 {
156 coeff(i, n, 1) = mat_diag(N * i + k, N * i + k) * (coeff(i, n, 0) = std::min(std::max((a_eps - a_m) / (a_eps - a_eps_min), 0.), 1.));
157 for (l=0 ; l<N ; l++) dvr_elem(D*e+d, n, k, l) = out.dvr(n, k, d, l*D+d) ;
158 double flux = coeff(i, n, 0) * secmem(i, n) + coeff(i, n, 1) * (inco(i, n) - inco(i, k) - out.vr(n, k, d));
159 secmem(i, k) += flux, secmem(i, n) -= flux;
160 }
161 }
162
163 /* lignes de matrices */
164 for (auto &&n_m: matrices)
165 if (n_m.second->nb_colonnes())
166 {
167 int diag = (n_m.first == ch.le_nom().getString()); //est-on sur le bloc diagonal?
168 Matrice_Morse& mat = *n_m.second;
169 auto type(mat.get_tab1()(0));
170 for (e = 0, l = nf_tot; e < domaine.nb_elem_tot(); e++) /* elements : l est l'indice de ligne */
171 for (int d = 0; d < D; d++, l++)
172 for (n = 0; n < N; n++)
173 if (coeff(l, n, 0))
174 {
175 auto i(type);
176 auto j(type);
177 for (k = maj(l), i = mat.get_tab1()(N * l + n) - 1, j = mat.get_tab1()(N * l + k) - 1;
178 i < mat.get_tab1()(N * l + n + 1) - 1; i++, j++)
179 {
180 assert(mat.get_tab2()(i) == mat.get_tab2()(j));
181 int c = diag * mat.get_tab2()(i) -
182 1; //indice de colonne (commun aux deux lignes grace au dimensionner_blocs())
183 mat.get_set_coeff()(j) += coeff(l, n, 0) * mat.get_set_coeff()(i) -
184 coeff(l, n, 1) * ((c == N * l + n) - (c == N * l + k));
185 mat.get_set_coeff()(i) += -coeff(l, n, 0) * mat.get_set_coeff()(i) +
186 coeff(l, n, 1) * ((c == N * l + n) - (c == N * l + k));
187
188 mat.get_set_coeff()(j) += -coeff(l, n, 1) *
189 (-dvr_elem(D * e + d, n, k, n) * (c == N * l + n) -
190 dvr_elem(D * e + d, n, k, k) * (c == N * l + k));
191 mat.get_set_coeff()(i) += +coeff(l, n, 1) *
192 (-dvr_elem(D * e + d, n, k, n) * (c == N * l + n) -
193 dvr_elem(D * e + d, n, k, k) * (c == N * l + k));
194 }
195 }
196 }
197}
198
200{
201 const Pb_Multiphase& pbm = ref_cast(Pb_Multiphase, equation().probleme());
202 const Domaine_VF& domaine = ref_cast(Domaine_VF, equation().domaine_dis());
203 const DoubleTab& alpha = pbm.equation_masse().inconnue().passe();
204 const IntTab& f_e = domaine.face_voisins(), &e_f = domaine.elem_faces();
205 const DoubleVect& fs = domaine.face_surfaces(), &ve = domaine.volumes();
206 const DoubleTab& xp = domaine.xp(), &xv = domaine.xv();
207
208 int N = alpha.line_size(), D = dimension, nf_tot = domaine.nb_faces_tot(), ne_tot = domaine.nb_elem_tot();;
209
210 /* calculaiton of the gradient of alpha at the face */
212 DoubleTrav grad_f_a(nf_tot, N);
213 ch_a.init_grad(0);
214 const IntTab& fg_d = ch_a.fgrad_d, &fg_e = ch_a.fgrad_e; // Tables utilisees dans domaine_PolyMAC_MPFA::fgrad pour le calcul du gradient
215 const DoubleTab& fg_w = ch_a.fgrad_w;
216 const Conds_lim& cls_a = ch_a.domaine_Cl_dis().les_conditions_limites(); // conditions aux limites du champ alpha
217 const IntTab& fcl_a = ch_a.fcl(); // tableaux utilitaires sur les CLs : fcl(f, .) = (type de la CL, no de la CL, indice dans la CL)
218
219 for (int n = 0; n < N; n++)
220 for (int f = 0; f < nf_tot; f++)
221 {
222 grad_f_a(f, n) = 0;
223 for (int j = fg_d(f); j < fg_d(f+1) ; j++)
224 {
225 int e = fg_e(j);
226 int f_bord;
227 if ( (f_bord = e-ne_tot) < 0) //contribution d'un element
228 grad_f_a(f, n) += fg_w(j) * alpha(e, n);
229 else if (fcl_a(f_bord, 0) == 1 || fcl_a(f_bord, 0) == 2) //Echange_impose_base
230 grad_f_a(f, n) += fg_w(j) ? fg_w(j) * ref_cast(Echange_impose_base, cls_a[fcl_a(f_bord, 1)].valeur()).T_ext(fcl_a(f_bord, 2), n) : 0;
231 else if (fcl_a(f_bord, 0) == 4) //Neumann non homogene
232 grad_f_a(f, n) += fg_w(j) ? fg_w(j) * ref_cast(Neumann_paroi , cls_a[fcl_a(f_bord, 1)].valeur()).flux_impose(fcl_a(f_bord, 2), n) : 0;
233 else if (fcl_a(f_bord, 0) == 6) // Dirichlet
234 grad_f_a(f, n) += fg_w(j) * ref_cast(Dirichlet, cls_a[fcl_a(f_bord, 1)].valeur()).val_imp(fcl_a(f_bord, 2), n);
235 }
236 }
237
238 /* Calcul du grad aux elems */
239 for (int n = 0; n < N; n++)
240 for (int e = 0; e < ne_tot; e++)
241 for (int d = 0; d < D; d++)
242 {
243 gradAlphaElem(e, d, n) = 0 ;
244 for (int j = 0, f; j < e_f.dimension(1) && (f = e_f(e, j)) >= 0; j++)
245 gradAlphaElem(e, d, n) += (e == f_e(f, 0) ? 1 : -1) * fs(f) * (xv(f, d) - xp(e, d)) / ve(e) * grad_f_a(f, n);
246 }
247}
248
250{
251 const Pb_Multiphase& pbm = ref_cast(Pb_Multiphase, equation().probleme());
252 const Domaine_VF& domaine = ref_cast(Domaine_VF, equation().domaine_dis());
253 const DoubleTab& alpha = pbm.equation_masse().inconnue().passe();
254 const DoubleTab& n_f = domaine.face_normales(), &vf_dir = domaine.volumes_entrelaces_dir();
255 const DoubleVect& vf = domaine.volumes_entrelaces(), &fs = domaine.face_surfaces(), &ve = domaine.volumes();
256 const IntTab& f_e = domaine.face_voisins(), &e_f = domaine.elem_faces();
257 const DoubleTab& xp = domaine.xp(), &xv = domaine.xv();
258
259 int N = alpha.line_size(), D = dimension, ne_tot = domaine.nb_elem_tot(), nf_tot = domaine.nb_faces_tot(), nf = domaine.nb_faces();
260
261 DoubleTrav gradAlphaElem(ne_tot, D, N);
262
263 /* calculaiton of the gradient of alpha at the face */
265 DoubleTrav grad_f_a(nf_tot, N);
266 ch_a.init_grad(0);
267 const IntTab& fg_d = ch_a.fgrad_d, &fg_e = ch_a.fgrad_e; // Tables utilisees dans domaine_PolyMAC_MPFA::fgrad pour le calcul du gradient
268 const DoubleTab& fg_w = ch_a.fgrad_w;
269 const Conds_lim& cls_a = ch_a.domaine_Cl_dis().les_conditions_limites(); // conditions aux limites du champ alpha
270 const IntTab& fcl_a = ch_a.fcl(); // tableaux utilitaires sur les CLs : fcl(f, .) = (type de la CL, no de la CL, indice dans la CL)
271
272 for (int n = 0; n < N; n++)
273 for (int f = 0; f < nf_tot; f++)
274 {
275 grad_f_a(f, n) = 0;
276 for (int j = fg_d(f); j < fg_d(f+1) ; j++)
277 {
278 int e = fg_e(j);
279 int f_bord;
280 if ( (f_bord = e-ne_tot) < 0) //contribution d'un element
281 grad_f_a(f, n) += fg_w(j) * alpha(e, n);
282 else if (fcl_a(f_bord, 0) == 1 || fcl_a(f_bord, 0) == 2) //Echange_impose_base
283 grad_f_a(f, n) += fg_w(j) ? fg_w(j) * ref_cast(Echange_impose_base, cls_a[fcl_a(f_bord, 1)].valeur()).T_ext(fcl_a(f_bord, 2), n) : 0;
284 else if (fcl_a(f_bord, 0) == 4) //Neumann non homogene
285 grad_f_a(f, n) += fg_w(j) ? fg_w(j) * ref_cast(Neumann_paroi , cls_a[fcl_a(f_bord, 1)].valeur()).flux_impose(fcl_a(f_bord, 2), n) : 0;
286 else if (fcl_a(f_bord, 0) == 6) // Dirichlet
287 grad_f_a(f, n) += fg_w(j) * ref_cast(Dirichlet, cls_a[fcl_a(f_bord, 1)].valeur()).val_imp(fcl_a(f_bord, 2), n);
288 }
289 }
290
291 /* Calcul du grad aux elems */
292 for (int n = 0; n < N; n++)
293 for (int e = 0; e < ne_tot; e++)
294 for (int d = 0; d < D; d++)
295 for (int j = 0, f; j < e_f.dimension(1) && (f = e_f(e, j)) >= 0; j++)
296 gradAlphaElem(e, d, n) += (e == f_e(f, 0) ? 1 : -1) * fs(f) * (xv(f, d) - xp(e, d)) / ve(e) * grad_f_a(f, n);
297
298 /* Calcul du grad vectoriel aux faces */
299 double scalGradElem=0.;
300 int c, e;
301 for (int n = 0; n < N; n++)
302 for (int f = 0; f < nf; f++)
303 {
304 for (c=0 ; c<2 && (e = f_e(f, c)) >= 0; c++)
305 for (int d = 0; d < D; d++)
306 gradAlphaFaces(f, d, n) += vf_dir(f, c)/vf(f)*gradAlphaElem(e, d, n);
307 scalGradElem=0;
308 for (int d = 0; d < D; d++)
309 scalGradElem += gradAlphaFaces(f, d, n)*n_f(f,d)/fs(f);
310 for (int d = 0; d < D; d++)
311 gradAlphaFaces(f, d, n) += (grad_f_a(f, n) - scalGradElem)*n_f(f,d)/fs(f);
312 }
313}
314
316{
317 const DoubleTab& vorticite = equation().probleme().get_champ("vorticite").valeurs();
318 int D = dimension, N = vort.dimension_tot(2), ne_tot = vort.dimension_tot(0);
319 int e, n, d ;
320
321 if (D == 2)
322 {
323 for (e = 0; e < ne_tot; e++)
324 for (n = 0; n < N; n++)
325 for (d = 0; d < D; d++)
326 vort(e, d, n) = vorticite(e, n);
327 }
328 else
329 {
330 for (e = 0; e < ne_tot; e++)
331 for (n = 0; n < N; n++)
332 for (d = 0; d < D; d++)
333 vort(e, d, n) = vorticite(e, N * d + n);
334 }
335}
: class Champ_Elem_PolyMAC_MPFA
void init_grad(int full_stencil) const
const IntTab & fcl() const
DoubleTab & passe(int i=1) override
Renvoie les valeurs du champs a l'instant t-i.
const Domaine_Cl_dis_base & domaine_Cl_dis() const
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
virtual DoubleTab & valeurs()=0
virtual DoubleTab & passe(int i=1)
Definition Champ_Proto.h:50
classe Conds_lim Cette classe represente un vecteur de conditions aux limites.
Definition Conds_lim.h:32
classe Dirichlet Cette classe est la classe de base de la hierarchie des conditions aux limites de ty...
Definition Dirichlet.h:31
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
class Domaine_VF
Definition Domaine_VF.h:44
classe Echange_impose_base: Cette condition limite sert uniquement pour l'equation d'energie.
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
virtual const Milieu_base & milieu() const =0
virtual const Champ_Inc_base & inconnue() const =0
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
const Nom & le_nom() const override
Renvoie le nom du champ.
double sigma_h(const double h, const double P) const
double sigma(const double T, const double P) const
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
const auto & get_tab2() const
const auto & get_tab1() const
auto & get_set_coeff()
virtual const Champ_base & masse_volumique() const
Renvoie la masse volumique du milieu.
DoubleTab & diametre_hydraulique_elem()
Definition Milieu_base.h:70
Classe Milieu_composite Cette classe represente un fluide reel ainsi que.
bool has_interface(int k, int l) const
Interface_base & get_interface(int k, int l) const
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
Definition MorEqn.h:62
Classe Neumann_paroi Cette condition limite correspond a un flux impose pour l'equation de.
const std::string & getString() const
Definition Nom.h:92
static int dimension
Definition Objet_U.h:99
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Objet_U.cpp:293
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
Classe Op_Evanescence_Homogene_Face_base.
void ajouter_blocs_aux(IntTrav &, DoubleTrav, matrices_t, DoubleTab &) const override
void dimensionner_blocs_aux(std::set< int > &, Stencil &, Matrice_Morse &) const override
classe Operateur_Diff_base Cette classe est la base de la hierarchie des operateurs representant
classe Pb_Multiphase Cette classe represente un probleme de thermohydraulique multiphase de type "3*N...
virtual bool resolution_en_T() const
virtual Equation_base & equation_qdm()
virtual Equation_base & equation_energie()
virtual Equation_base & equation_masse()
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
const Champ_base & get_champ(const Motcle &nom) const override
int has_correlation(std::string nom_correlation) const
const Correlation_base & get_correlation(std::string nom_correlation) const
static void abort()
Routine de sortie de Trio-U sur une erreur abort().
Definition Process.cpp:570
classe QDM_Multiphase Cette classe porte les termes de l'equation de la dynamique
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
void append_line(_TYPE_)
Definition TRUSTTab.tpp:213
int line_size() const
Definition TRUSTVect.tpp:67
void resize(_SIZE_, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTVect.tpp:91
classe Viscosite_turbulente_base correlations de viscosite turbulente decrivant le tenseur de Reynold...
classe Vitesse_relative_base
virtual bool needs_grad_alpha() const
virtual bool needs_vort() const
virtual void vitesse_relative(const input_t &input, output_t &output) const =0