TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Portance_interfaciale_PolyMAC_MPFA.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 <Portance_interfaciale_PolyMAC_MPFA.h>
17#include <Portance_interfaciale_base.h>
18#include <Champ_Face_PolyMAC_MPFA.h>
19#include <Milieu_composite.h>
20#include <Pb_Multiphase.h>
21
22Implemente_instanciable(Portance_interfaciale_PolyMAC_MPFA, "Portance_interfaciale_Face_PolyMAC_MPFA", Source_Portance_interfaciale_base);
23
26
27void Portance_interfaciale_PolyMAC_MPFA::ajouter_blocs(matrices_t matrices, DoubleTab& secmem, const tabs_t& semi_impl) const
28{
29 const Pb_Multiphase& pbm = ref_cast(Pb_Multiphase, equation().probleme());
30 const Champ_Face_PolyMAC_MPFA& ch = ref_cast(Champ_Face_PolyMAC_MPFA, equation().inconnue());
31 const Domaine_PolyMAC_MPFA& domaine = ref_cast(Domaine_PolyMAC_MPFA, equation().domaine_dis());
32 const IntTab& f_e = domaine.face_voisins(), &fcl = ch.fcl();
33 const DoubleTab& n_f = domaine.face_normales(), &vf_dir = domaine.volumes_entrelaces_dir();
34 const DoubleVect& pe = equation().milieu().porosite_elem(), &pf = equation().milieu().porosite_face(), &ve = domaine.volumes(), &vf = domaine.volumes_entrelaces(), &fs = domaine.face_surfaces();
35 const DoubleTab& pvit = ch.passe(),
36 &alpha = pbm.equation_masse().inconnue().passe(),
37 &press = ref_cast(QDM_Multiphase, pbm.equation_qdm()).pression().passe(),
38 &temp = pbm.equation_energie().inconnue().passe(),
39 &rho = equation().milieu().masse_volumique().passe(),
40 &mu = ref_cast(Fluide_base, equation().milieu()).viscosite_dynamique().passe(),
41 &grad_v = equation().probleme().get_champ("gradient_vitesse").passe(),
42 &vort = equation().probleme().get_champ("vorticite").passe(),
43 *d_bulles = (equation().probleme().has_champ("diametre_bulles")) ? &equation().probleme().get_champ("diametre_bulles").passe() : nullptr,
44 *k_turb = (equation().probleme().has_champ("k")) ? &equation().probleme().get_champ("k").passe() : nullptr ;
45
46 const Milieu_composite& milc = ref_cast(Milieu_composite, equation().milieu());
47
48 int e, f, c, d, d2, i, k, l, n, N = ch.valeurs().line_size(), Np = press.line_size(), D = dimension, Nk = (k_turb) ? (*k_turb).dimension(1) : 1 ,
49 cR = (rho.dimension_tot(0) == 1), cM = (mu.dimension_tot(0) == 1), nf_tot = domaine.nb_faces_tot();
50 DoubleTrav vr_l(N,D), scal_ur(N), scal_u(N), pvit_l(N, D), vort_l( D==2 ? 1 :D), grad_l(D,D), scal_grad(D); // Requis pour corrections vort et u_l-u-g
51 double fac_e, fac_f, vl_norm;
52 const Portance_interfaciale_base& correlation_pi = ref_cast(Portance_interfaciale_base, correlation_.valeur());
53
56 in.alpha.resize(N), in.T.resize(N), in.p.resize(N), in.rho.resize(N), in.mu.resize(N), in.sigma.resize(N*(N-1)/2), in.k_turb.resize(N), in.d_bulles.resize(N), in.nv.resize(N, N);
57 out.Cl.resize(N, N);
58
59 // Et pour les methodes span de la classe Interface pour choper la tension de surface
60 const int ne_tot = domaine.nb_elem_tot(), nb_max_sat = N * (N-1) /2; // oui !! suite arithmetique !!
61 DoubleTrav Sigma_tab(ne_tot,nb_max_sat);
62
63 // remplir les tabs ...
64 for (k = 0; k < N; k++)
65 for (l = k + 1; l < N; l++)
66 {
67 if (milc.has_saturation(k, l))
68 {
69 Saturation_base& z_sat = milc.get_saturation(k, l);
70 const int ind_trav = (k*(N-1)-(k-1)*(k)/2) + (l-k-1); // Et oui ! matrice triang sup !
71 // recuperer sigma ...
72 const DoubleTab& sig = z_sat.get_sigma_tab();
73 // fill in the good case
74 for (int ii = 0; ii < ne_tot; ii++) Sigma_tab(ii, ind_trav) = sig(ii);
75 }
76 else if (milc.has_interface(k, l))
77 {
78 Interface_base& sat = milc.get_interface(k,l);
79 const int ind_trav = (k*(N-1)-(k-1)*(k)/2) + (l-k-1); // Et oui ! matrice triang sup !
80 for (i = 0 ; i<ne_tot ; i++) Sigma_tab(i,ind_trav) = sat.sigma(temp(i,k),press(i,k * (Np > 1))) ;
81 }
82 }
83
84
85 /* elements */
86 for (e = 0; e < ne_tot; e++)
87 {
88 /* arguments de coeff */
89 for (n=0; n<N; n++)
90 {
91 in.alpha[n] = alpha(e, n);
92 in.p[n] = press(e, n * (Np > 1));
93 in.T[n] = temp(e, n);
94 in.rho[n] = rho(!cR * e, n);
95 in.mu[n] = mu(!cM * e, n);
96 in.d_bulles[n] = (d_bulles) ? (*d_bulles)(e,n) : 0 ;
97 for (k = n+1; k < N; k++)
98 if (milc.has_interface(n,k))
99 {
100 const int ind_trav = (n*(N-1)-(n-1)*(n)/2) + (k-n-1);
101 in.sigma[ind_trav] = Sigma_tab(e, ind_trav);
102 }
103 for (k = 0; k < N; k++)
104 in.nv(k, n) = ch.v_norm(pvit, pvit, e, -1, k, n, nullptr, nullptr);
105 }
106 for (n = 0; n <Nk; n++) in.k_turb[n] = (k_turb) ? (*k_turb)(e,0) : 0;
107
108 correlation_pi.coefficient(in, out);
109
110 fac_e = beta_*pe(e) * ve(e);
111 i = nf_tot + D * e;
112
113 // Experimentation sur la portance : on enleve la partie parallele a la vitesse du liquide
114 vl_norm = 0;
115 scal_ur = 0;
116 for (d = 0 ; d < D ; d++) vl_norm += pvit(i+d, n_l)*pvit(i+d, n_l);
117 vl_norm = std::sqrt(vl_norm);
118 if (vl_norm > 1.e-6)
119 {
120 for (k = 0; k < N; k++)
121 for (d = 0 ; d < D ; d++) scal_ur(k) += pvit(i+d, n_l)/vl_norm * (pvit(i+d, k) -pvit(i+d, n_l));
122 for (k = 0; k < N; k++)
123 for (d = 0 ; d < D ; d++) vr_l(k, d) = pvit(i+d, n_l)/vl_norm * scal_ur(k) ;
124 }
125 else for (k=0 ; k<N ; k++)
126 for (d=0 ; d<D ; d++) vr_l(k, d) = pvit(i+d, k) -pvit(i+d, n_l) ;
127
128
129 if (D==2)
130 {
131 for (k = 0; k < N; k++)
132 if (k!= n_l) // gas phase
133 {
134 secmem(i, n_l) += fac_e * out.Cl(n_l, k) * vr_l(k, 1) * vort(e, 0) ;
135 secmem(i, k ) -= fac_e * out.Cl(n_l, k) * vr_l(k, 1) * vort(e, 0) ;
136 secmem(i+1,n_l)-= fac_e * out.Cl(n_l, k) * vr_l(k, 0) * vort(e, 0) ;
137 secmem(i+1, k )+= fac_e * out.Cl(n_l, k) * vr_l(k, 0) * vort(e, 0) ;
138 } // 100% explicit
139 }
140
141 if (D==3)
142 {
143 for (k = 0; k < N; k++)
144 if (k!= n_l) // gas phase
145 {
146 secmem(i, n_l) += fac_e * out.Cl(n_l, k) * (vr_l(k, 1) * vort(e, 2*N+n_l) - vr_l(k, 2) * vort(e, 1*N+n_l)) ;
147 secmem(i, k ) -= fac_e * out.Cl(n_l, k) * (vr_l(k, 1) * vort(e, 2*N+n_l) - vr_l(k, 2) * vort(e, 1*N+n_l)) ;
148 secmem(i+1,n_l)+= fac_e * out.Cl(n_l, k) * (vr_l(k, 2) * vort(e, 0*N+n_l) - vr_l(k, 0) * vort(e, 2*N+n_l)) ;
149 secmem(i+1, k )-= fac_e * out.Cl(n_l, k) * (vr_l(k, 2) * vort(e, 0*N+n_l) - vr_l(k, 0) * vort(e, 2*N+n_l)) ;
150 secmem(i+2,n_l)+= fac_e * out.Cl(n_l, k) * (vr_l(k, 0) * vort(e, 1*N+n_l) - vr_l(k, 1) * vort(e, 0*N+n_l)) ;
151 secmem(i+2, k )-= fac_e * out.Cl(n_l, k) * (vr_l(k, 0) * vort(e, 1*N+n_l) - vr_l(k, 1) * vort(e, 0*N+n_l)) ;
152 } // 100% explicit
153 }
154
155 }
156
157 // Faces en dimension 2 et 3
158 for (f = 0 ; f<domaine.nb_faces() ; f++)
159 if (fcl(f, 0) < 2)
160 {
161 in.alpha=0., in.T=0., in.p=0., in.rho=0., in.mu=0., in.sigma=0., in.k_turb=0., in.d_bulles=0., in.nv=0.;
162 for ( c = 0; c < 2 && (e = f_e(f, c)) >= 0; c++)
163 {
164 for (n = 0; n < N; n++)
165 {
166 in.alpha[n] += vf_dir(f, c)/vf(f) * alpha(e, n);
167 in.p[n] += vf_dir(f, c)/vf(f) * press(e, n * (Np > 1));
168 in.T[n] += vf_dir(f, c)/vf(f) * temp(e, n);
169 in.rho[n] += vf_dir(f, c)/vf(f) * rho(!cR * e, n);
170 in.mu[n] += vf_dir(f, c)/vf(f) * mu(!cM * e, n);
171 in.d_bulles[n] += (d_bulles) ? vf_dir(f, c)/vf(f) *(*d_bulles)(e,n) : 0 ;
172 for (k = n+1; k < N; k++)
173 if (milc.has_interface(n,k))
174 {
175 const int ind_trav = (n*(N-1)-(n-1)*(n)/2) + (k-n-1);
176 in.sigma[ind_trav] += vf_dir(f, c) / vf(f) * Sigma_tab(e, ind_trav);
177 }
178 for (k = 0; k < N; k++)
179 in.nv(k, n) += vf_dir(f, c)/vf(f) * ch.v_norm(pvit, pvit, e, f, k, n, nullptr, nullptr);
180 }
181 for (n = 0; n <Nk; n++) in.k_turb[n] += (k_turb) ? vf_dir(f, c)/vf(f) * (*k_turb)(e,0) : 0;
182 }
183
184 correlation_pi.coefficient(in, out);
185
186 grad_l = 0; // we fill grad_l so that grad_l(d, d2) = du_d/dx_d2 by averaging between both elements
187 for (d = 0 ; d<D ; d++)
188 for (d2 = 0 ; d2<D ; d2++)
189 for (c=0 ; c<2 && (e = f_e(f, c)) >= 0; c++)
190 grad_l(d, d2) += vf_dir(f, c)/vf(f)*grad_v(nf_tot + D*e + d2 , n_l * D + d) ;
191 //We replace the n_l components by the one calculated without interpolation to elements
192 scal_grad = 0 ; // scal_grad(d) = grad(u_d).n_f
193 for (d = 0 ; d<D ; d++)
194 for (d2 = 0 ; d2<D ; d2++)
195 scal_grad(d) += grad_l(d, d2)*n_f(f, d2)/fs(f);
196 for (d = 0 ; d<D ; d++)
197 for (d2 = 0 ; d2<D ; d2++)
198 grad_l(d, d2) += (grad_v(f ,n_l*D+d) - scal_grad(d)) * n_f(f, d2)/fs(f);
199 // We calculate the local vorticity using this local gradient
200 if (D==2)
201 {
202 vort_l(0) = grad_l(1, 0) - grad_l(0, 1); // dUy/dx - dUx/dy
203 }
204 else if (D==3)
205 {
206 vort_l(0) = grad_l(2, 1) - grad_l(1, 2); // dUz/dy - dUy/dz
207 vort_l(1) = grad_l(0, 2) - grad_l(2, 0); // dUx/dz - dUz/dx
208 vort_l(2) = grad_l(1, 0) - grad_l(0, 1); // dUy/dx - dUx/dy
209 }
210 // We also need to calculate relative velocity at the face
211 pvit_l = 0 ;
212 for (d = 0 ; d<D ; d++)
213 for (k = 0 ; k<N ; k++)
214 for (c=0 ; c<2 && (e = f_e(f, c)) >= 0; c++)
215 pvit_l(k, d) += vf_dir(f, c)/vf(f)*pvit(nf_tot+D*e+d, k) ;
216 scal_u = 0;
217 for (k = 0 ; k<N ; k++)
218 for (d = 0 ; d<D ; d++)
219 scal_u(k) += pvit_l(k, d)*n_f(f, d)/fs(f);
220 for (k = 0 ; k<N ; k++)
221 for (d = 0 ; d<D ; d++)
222 pvit_l(k, d) += (pvit(f, k) - scal_u(k)) * n_f(f, d)/fs(f) ; // Corect velocity at the face
223
224 // Relative velocity parallel to the liquid flow
225 vl_norm = 0;
226 scal_ur = 0;
227 for (d = 0 ; d < D ; d++) vl_norm += pvit_l(n_l, d)*pvit_l(n_l, d);
228 vl_norm = std::sqrt(vl_norm);
229 if (vl_norm > 1.e-6)
230 {
231 for (k = 0; k < N; k++)
232 for (d = 0 ; d < D ; d++) scal_ur(k) += pvit_l(n_l, d)/vl_norm * (pvit_l(k, d) -pvit_l(n_l, d));
233 for (k = 0; k < N; k++)
234 for (d = 0 ; d < D ; d++) vr_l(k, d) = pvit_l(n_l, d)/vl_norm * scal_ur(k) ;
235 }
236 else for (k=0 ; k<N ; k++)
237 for (d=0 ; d<D ; d++) vr_l(k, d) = pvit_l(k, d)-pvit_l(n_l, d) ;
238
239
240 // Use local vairables for the calculation of secmem ; 100% explicit
241 fac_f = beta_*pf(f) * vf(f);
242 for (k = 0; k < N; k++)
243 if (k!= n_l) // gas phase
244 {
245 if (D==2)
246 {
247 secmem(f, n_l) += fac_f * n_f(f, 0)/fs(f) * out.Cl(n_l, k) * vr_l(k, 1) * vort_l(0) ;
248 secmem(f, k ) -= fac_f * n_f(f, 0)/fs(f) * out.Cl(n_l, k) * vr_l(k, 1) * vort_l(0) ;
249 secmem(f, n_l) -= fac_f * n_f(f, 1)/fs(f) * out.Cl(n_l, k) * vr_l(k, 0) * vort_l(0) ;
250 secmem(f, k ) += fac_f * n_f(f, 1)/fs(f) * out.Cl(n_l, k) * vr_l(k, 0) * vort_l(0) ;
251 }
252 else if (D==3)
253 {
254 secmem(f, n_l) += fac_f * n_f(f, 0)/fs(f) * out.Cl(n_l, k) * (vr_l(k, 1) * vort_l(2) - vr_l(k, 2) * vort_l(1)) ;
255 secmem(f, k ) -= fac_f * n_f(f, 0)/fs(f) * out.Cl(n_l, k) * (vr_l(k, 1) * vort_l(2) - vr_l(k, 2) * vort_l(1)) ;
256 secmem(f, n_l) += fac_f * n_f(f, 1)/fs(f) * out.Cl(n_l, k) * (vr_l(k, 2) * vort_l(0) - vr_l(k, 0) * vort_l(2)) ;
257 secmem(f, k ) -= fac_f * n_f(f, 1)/fs(f) * out.Cl(n_l, k) * (vr_l(k, 2) * vort_l(0) - vr_l(k, 0) * vort_l(2)) ;
258 secmem(f, n_l) += fac_f * n_f(f, 2)/fs(f) * out.Cl(n_l, k) * (vr_l(k, 0) * vort_l(1) - vr_l(k, 1) * vort_l(0)) ;
259 secmem(f, k ) -= fac_f * n_f(f, 2)/fs(f) * out.Cl(n_l, k) * (vr_l(k, 0) * vort_l(1) - vr_l(k, 1) * vort_l(0)) ;
260 }
261 }
262 }
263}
264
266{
267 const Pb_Multiphase& pbm = ref_cast(Pb_Multiphase, equation().probleme());
268 /* Wobble si besoin */
269 if ((bool(wobble)) || (bool(C_lift)))
270 {
271 const Champ_Face_PolyMAC_MPFA& ch = ref_cast(Champ_Face_PolyMAC_MPFA, equation().inconnue());
272 const DoubleTab& pvit = equation().inconnue().passe(),
273 &alpha = pbm.equation_masse().inconnue().passe(),
274 &mu = ref_cast(Fluide_base, equation().milieu()).viscosite_dynamique().passe(),
275 &rho = equation().milieu().masse_volumique().passe(),
276 &press = ref_cast(QDM_Multiphase, pbm.equation_qdm()).pression().passe(),
277 &temp = pbm.equation_energie().inconnue().passe(),
278 *d_bulles = (equation().probleme().has_champ("diametre_bulles")) ? &equation().probleme().get_champ("diametre_bulles").passe() : nullptr,
279 *k_turb = (equation().probleme().has_champ("k")) ? &equation().probleme().get_champ("k").passe() : nullptr ;
280
281 const Domaine_VF& domaine = ref_cast(Domaine_VF, equation().domaine_dis());
282 const Milieu_composite& milc = ref_cast(Milieu_composite, equation().milieu());
283
284 int i, k, l, e, n,
285 N = pvit.line_size(), Np = press.line_size(), Nk = (k_turb) ? (*k_turb).dimension(1) : 1 , ne_tot=domaine.nb_elem_tot(),
286 cR = (rho.dimension_tot(0) == 1), cM = (mu.dimension_tot(0) == 1);
287 DoubleTrav Sigma_tab(ne_tot,N*(N-1)/2);
288
289 for (k = 0; k < N; k++)
290 for (l = k + 1; l < N; l++)
291 {
292 if (milc.has_saturation(k, l))
293 {
294 Saturation_base& z_sat = milc.get_saturation(k, l);
295 const int ind_trav = (k*(N-1)-(k-1)*(k)/2) + (l-k-1); // Et oui ! matrice triang sup !
296 // recuperer sigma ...
297 const DoubleTab& sig = z_sat.get_sigma_tab();
298 // fill in the good case
299 for (int ii = 0; ii < ne_tot; ii++) Sigma_tab(ii, ind_trav) = sig(ii);
300 }
301 else if (milc.has_interface(k, l))
302 {
303 Interface_base& sat = milc.get_interface(k,l);
304 const int ind_trav = (k*(N-1)-(k-1)*(k)/2) + (l-k-1); // Et oui ! matrice triang sup !
305 for (i = 0 ; i<ne_tot ; i++) Sigma_tab(i,ind_trav) = sat.sigma(temp(i,k),press(i,k * (Np > 1))) ;
306 }
307 }
308
309 if ((bool(wobble)))
310 {
311 DoubleTab& tab_wobble = wobble->valeurs();
312 for (k=0 ; k<N ; k++)
313 if (k!=n_l) // k gas phase
314 for (e=0 ; e<ne_tot ; e++)
315 {
316 int ind_trav = (k>n_l) ? (n_l*(N-1)-(n_l-1)*(n_l)/2) + (k-n_l-1) : (k*(N-1)-(k-1)*(k)/2) + (n_l-k-1);
317 double dv_loc = std::max(ch.v_norm(pvit, pvit, e, -1, k, n_l, nullptr, nullptr), 1.e-6);
318 double Eo = g_ * std::abs(rho(e,n_l)-rho(e,k)) * (*d_bulles)(e,k)*(*d_bulles)(e,k)/std::max(Sigma_tab(e,ind_trav), 1.e-6);
319 tab_wobble(e,k) = Eo * (*k_turb)(e,n_l)/(dv_loc*dv_loc) ;
320 }
321 }
322
323 if (C_lift)
324 {
325 DoubleTab& tab_cl = C_lift->valeurs();
326
327 const Portance_interfaciale_base& correlation_pi = ref_cast(Portance_interfaciale_base, correlation_.valeur());
328
331 in.alpha.resize(N), in.T.resize(N), in.p.resize(N), in.rho.resize(N), in.mu.resize(N), in.sigma.resize(N*(N-1)/2), in.k_turb.resize(N), in.d_bulles.resize(N), in.nv.resize(N, N);
332 out.Cl.resize(N, N);
333 for (e = 0; e < ne_tot; e++)
334 {
335 /* arguments de coeff */
336 for (n=0; n<N; n++)
337 {
338 in.alpha[n] = alpha(e, n);
339 in.p[n] = press(e, n * (Np > 1));
340 in.T[n] = temp(e, n);
341 in.rho[n] = rho(!cR * e, n);
342 in.mu[n] = mu(!cM * e, n);
343 in.d_bulles[n] = (d_bulles) ? (*d_bulles)(e,n) : 0 ;
344 for (k = n+1; k < N; k++)
345 if (milc.has_interface(n,k))
346 {
347 const int ind_trav = (n*(N-1)-(n-1)*(n)/2) + (k-n-1);
348 in.sigma[ind_trav] = Sigma_tab(e, ind_trav);
349 }
350 for (k = 0; k < N; k++)
351 in.nv(k, n) = ch.v_norm(pvit, pvit, e, -1, k, n, nullptr, nullptr);
352 }
353 for (n = 0; n <Nk; n++) in.k_turb[n] = (k_turb) ? (*k_turb)(e,0) : 0;
354
355 correlation_pi.coefficient(in, out);
356
357 for (k=0 ; k<N ; k++)
358 if (k!=n_l) // k gas phase
359 tab_cl(e,k) = out.Cl(n_l, k) / ( std::max(in.rho[n_l], 1.e-6) * std::max(in.alpha[k], 1.e-6) ) ;
360 }
361 }
362 }
363}
: class Champ_Face_PolyMAC_MPFA
double v_norm(const DoubleTab &val, const DoubleTab &val_f, int e, int f, int k, int l, double *v_ext, double *dnv) const
const IntTab & fcl() const
DoubleTab & passe(int i=1) override
Renvoie les valeurs du champs a l'instant t-i.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
virtual DoubleTab & passe(int i=1)
Definition Champ_Proto.h:50
class Domaine_VF
Definition Domaine_VF.h:44
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.
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
Definition Fluide_base.h:38
DoubleTab & get_sigma_tab()
double sigma(const double T, const double P) const
DoubleVect & porosite_elem()
Definition Milieu_base.h:58
virtual const Champ_base & masse_volumique() const
Renvoie la masse volumique du milieu.
DoubleVect & porosite_face()
Definition Milieu_base.h:62
Classe Milieu_composite Cette classe represente un fluide reel ainsi que.
bool has_interface(int k, int l) const
bool has_saturation(int k, int l) const
Interface_base & get_interface(int k, int l) const
Saturation_base & get_saturation(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
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 Pb_Multiphase Cette classe represente un probleme de thermohydraulique multiphase de type "3*N...
virtual Equation_base & equation_qdm()
virtual Equation_base & equation_energie()
virtual Equation_base & equation_masse()
void ajouter_blocs(matrices_t matrices, DoubleTab &secmem, const tabs_t &semi_impl={}) const override
void mettre_a_jour(double temps) override
DOES NOTHING - to override in derived classes.
classe Portance_interfaciale_base utilitaire pour les operateurs de frottement interfacial prenant la...
virtual void coefficient(const input_t &input, output_t &output) const =0
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
const Champ_base & get_champ(const Motcle &nom) const override
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
Classe Source_Portance_interfaciale_base.
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTTab.tpp:469
int line_size() const
Definition TRUSTVect.tpp:67