TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Eval_centre_PolyMAC_CDO_Elem.h
1/****************************************************************************
2* Copyright (c) 2025, 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#ifndef Eval_centre_PolyMAC_CDO_Elem_included
17#define Eval_centre_PolyMAC_CDO_Elem_included
18
19#include <Eval_Conv_PolyMAC_CDO.h>
20#include <Eval_PolyMAC_CDO_Elem.h>
21#include <Domaine_PolyMAC_CDO.h>
22#include <Champ_Elem_PolyMAC_CDO.h>
23
24/*! @brief class Eval_centre_PolyMAC_CDO_Elem
25 *
26 * Evaluateur PolyMAC_CDO pour la convection
27 * Le champ convecte est scalaire (Champ_Elem_PolyMAC_CDO)
28 * Schema de convection Centre
29 * Rq:Les evaluateurs de flux convectifs calculent en fait le terme
30 * convectif qui figure au second membre de l'equation d'evolution
31 * c.a.d l'oppose du flux convectif
32 *
33 */
35{
36
37public:
38
40
41 inline int calculer_flux_faces_echange_externe_impose() const override { return 0; }
42 inline int calculer_flux_faces_echange_global_impose() const override { return 0; }
43 inline int calculer_flux_faces_entree_fluide() const override { return 1; }
44 inline int calculer_flux_faces_paroi() const override { return 0; }
45 inline int calculer_flux_faces_paroi_adiabatique() const override { return 0; }
46 inline int calculer_flux_faces_paroi_defilante() const override { return 0; }
47 inline int calculer_flux_faces_paroi_fixe() const override { return 0; }
48 inline int calculer_flux_faces_sortie_libre() const override { return 1; }
49 inline int calculer_flux_faces_symetrie() const override { return 0; }
50 inline int calculer_flux_faces_periodique() const override { return 1; }
51
52 // Fonctions qui servent a calculer le flux de grandeurs scalaires
53 // Elles sont de type double et renvoient le flux
54
55 inline double flux_face(const DoubleTab&, int, const Dirichlet_entree_fluide&, int) const override;
56 inline double flux_face(const DoubleTab&, int, const Dirichlet_paroi_defilante&, int) const override { return 0; }
57 inline double flux_face(const DoubleTab&, int, const Dirichlet_paroi_fixe&, int) const override { return 0; }
58 inline double flux_face(const DoubleTab&, int, int, int, const Echange_externe_impose&, int) const override { return 0; }
59 inline double flux_face(const DoubleTab&, int, const Echange_global_impose&, int) const override { return 0; }
60 inline double flux_face(const DoubleTab&, int, const Neumann_paroi&, int) const override { return 0; }
61 inline double flux_face(const DoubleTab&, int, const Neumann_paroi_adiabatique&, int) const override { return 0; }
62 inline double flux_face(const DoubleTab&, int, const Neumann_sortie_libre&, int) const override;
63 inline double flux_face(const DoubleTab&, int, const Symetrie&, int) const override { return 0; }
64 inline double flux_face(const DoubleTab&, int, const Periodique&, int) const override;
65 inline double flux_faces_interne(const DoubleTab&, int) const override;
66
67 // Fonctions qui servent a calculer le flux de grandeurs vectorielles
68 // Elles sont de type void et remplissent le tableau flux
69
70 inline void flux_face(const DoubleTab&, int, const Symetrie&, int, DoubleVect& flux) const override { }
71 inline void flux_face(const DoubleTab&, int, const Periodique&, int, DoubleVect& flux) const override;
72 inline void flux_face(const DoubleTab&, int, const Neumann_sortie_libre&, int, DoubleVect& flux) const override;
73 inline void flux_face(const DoubleTab&, int, const Dirichlet_entree_fluide&, int, DoubleVect& flux) const override;
74 inline void flux_face(const DoubleTab&, int, const Dirichlet_paroi_fixe&, int, DoubleVect& flux) const override { }
75 inline void flux_face(const DoubleTab&, int, const Dirichlet_paroi_defilante&, int, DoubleVect& flux) const override { }
76 inline void flux_face(const DoubleTab&, int, const Neumann_paroi_adiabatique&, int, DoubleVect& flux) const override { }
77 inline void flux_face(const DoubleTab&, int, const Neumann_paroi&, int, DoubleVect& flux) const override { }
78 inline void flux_face(const DoubleTab&, int, int, int, const Echange_externe_impose&, int, DoubleVect& flux) const override { }
79 inline void flux_face(const DoubleTab&, int, const Echange_global_impose&, int, DoubleVect& flux) const override { }
80
81 inline void flux_faces_interne(const DoubleTab&, int, DoubleVect& flux) const override;
82
83 // Fonctions qui servent a calculer les coefficients de la matrice pour des grandeurs
84 // scalaires.
85
86 inline void coeffs_face(int, int, const Symetrie&, double& aii, double& ajj) const override { }
87 inline void coeffs_face(int, int, const Neumann_sortie_libre&, double& aii, double& ajj) const override;
88 inline void coeffs_face(int, int, const Dirichlet_entree_fluide&, double& aii, double& ajj) const override;
89 inline void coeffs_face(int, int, const Dirichlet_paroi_fixe&, double& aii, double& ajj) const override { }
90 inline void coeffs_face(int, int, const Dirichlet_paroi_defilante&, double& aii, double& ajj) const override { }
91 inline void coeffs_face(int, int, const Neumann_paroi_adiabatique&, double& aii, double& ajj) const override { }
92 inline void coeffs_face(int, int, const Neumann_paroi&, double& aii, double& ajj) const override { }
93 inline void coeffs_face(int, int, int, int, const Echange_externe_impose&, double& aii, double& ajj) const override { }
94 inline void coeffs_face(int, int, const Echange_global_impose&, double& aii, double& ajj) const override { }
95 inline void coeffs_face(int, int, const Periodique&, double& aii, double& ajj) const override;
96 inline void coeffs_faces_interne(int, double& aii, double& ajj) const override;
97
98 // Fonctions qui servent a calculer la contribution des conditions limites
99 // au second membre pour l'implicite pour les grandeurs scalaires.
100
101 inline double secmem_face(int, const Symetrie&, int) const override { return 0; }
102 inline double secmem_face(int, const Neumann_sortie_libre&, int) const override;
103 inline double secmem_face(int, const Dirichlet_entree_fluide&, int) const override;
104 inline double secmem_face(int, const Dirichlet_paroi_fixe&, int) const override { return 0; }
105 inline double secmem_face(int, const Dirichlet_paroi_defilante&, int) const override { return 0; }
106 inline double secmem_face(int, const Neumann_paroi_adiabatique&, int) const override { return 0; }
107 inline double secmem_face(int, const Neumann_paroi&, int) const override { return 0; }
108 inline double secmem_face(int, int, int, const Echange_externe_impose&, int) const override { return 0; }
109 inline double secmem_face(int, const Echange_global_impose&, int) const override { return 0; }
110 inline double secmem_face(int, const Periodique&, int) const override { return 0; }
111 inline double secmem_faces_interne(int) const override { return 0; }
112
113 // Fonctions qui servent a calculer les coefficients de la matrice pour des grandeurs
114 // vectorielles.
115
116 inline void coeffs_face(int, int, const Symetrie&, DoubleVect& aii, DoubleVect& ajj) const override { }
117 inline void coeffs_face(int, int, const Neumann_sortie_libre&, DoubleVect& aii, DoubleVect& ajj) const override;
118 inline void coeffs_face(int, int, const Dirichlet_entree_fluide&, DoubleVect& aii, DoubleVect& ajj) const override;
119 inline void coeffs_face(int, int, const Dirichlet_paroi_fixe&, DoubleVect& aii, DoubleVect& ajj) const override { }
120 inline void coeffs_face(int, int, const Dirichlet_paroi_defilante&, DoubleVect& aii, DoubleVect& ajj) const override { }
121 inline void coeffs_face(int, int, const Neumann_paroi_adiabatique&, DoubleVect& aii, DoubleVect& ajj) const override { }
122 inline void coeffs_face(int, int, const Neumann_paroi&, DoubleVect& aii, DoubleVect& ajj) const override { }
123 inline void coeffs_face(int, int, int, int, const Echange_externe_impose&, DoubleVect& aii, DoubleVect& ajj) const override { }
124 inline void coeffs_face(int, int, const Echange_global_impose&, DoubleVect& aii, DoubleVect& ajj) const override { }
125 inline void coeffs_face(int, int, const Periodique&, DoubleVect& aii, DoubleVect& ajj) const override;
126
127 inline void coeffs_faces_interne(int, DoubleVect& aii, DoubleVect& ajj) const override;
128
129 // Fonctions qui servent a calculer la contribution des conditions limites
130 // au second membre pour l'implicite pour les grandeurs vectorielles.
131
132 inline void secmem_face(int, const Symetrie&, int, DoubleVect&) const override { }
133 inline void secmem_face(int, const Neumann_sortie_libre&, int, DoubleVect&) const override;
134 inline void secmem_face(int, const Dirichlet_entree_fluide&, int, DoubleVect&) const override;
135 inline void secmem_face(int, const Dirichlet_paroi_fixe&, int, DoubleVect&) const override { }
136 inline void secmem_face(int, const Dirichlet_paroi_defilante&, int, DoubleVect&) const override { }
137 inline void secmem_face(int, const Neumann_paroi_adiabatique&, int, DoubleVect&) const override { }
138 inline void secmem_face(int, const Neumann_paroi&, int, DoubleVect&) const override { }
139 inline void secmem_face(int, int, int, const Echange_externe_impose&, int, DoubleVect&) const override { }
140 inline void secmem_face(int, const Echange_global_impose&, int, DoubleVect&) const override { }
141 inline void secmem_face(int, const Periodique&, int, DoubleVect&) const override { }
142 inline void secmem_faces_interne(int, DoubleVect&) const override { }
143
144protected:
145
146 inline int amont_amont(int, int) const;
147 inline double qcentre(const double, const int, const int, const int, const int, const int, const DoubleTab&) const;
148 inline void qcentre(const double, const int, const int, const int, const int, const int, const DoubleTab&, ArrOfDouble&) const;
149
150};
151
152inline double Eval_centre_PolyMAC_CDO_Elem::flux_face(const DoubleTab& inco, int face, const Dirichlet_entree_fluide& la_cl, int num1) const
153{
154 int n0 = elem_(face, 0);
155 int n1 = elem_(face, 1);
156 double flux;
157 double psc = dt_vitesse[face] * surface(face) * porosite(face);
158 double T_imp = la_cl.val_imp(face - num1);
159 if (n0 != -1)
160 {
161 if (psc > 0)
162 flux = psc * inco[n0];
163 else
164 flux = psc * T_imp;
165 }
166 else // n1 != -1
167 {
168 if (psc > 0)
169 flux = psc * T_imp;
170 else
171 flux = psc * inco[n1];
172 }
173 return -flux;
174}
175
176inline void Eval_centre_PolyMAC_CDO_Elem::coeffs_face(int face, int num1, const Dirichlet_entree_fluide& la_cl, double& aii, double& ajj) const
177{
178 int i = elem_(face, 0);
179 double psc = dt_vitesse[face] * surface[face] * porosite[face];
180
181 if (i != -1)
182 {
183 if (psc > 0)
184 aii = -psc;
185 }
186 else // j != -1
187 {
188 if (psc < 0)
189 ajj = -psc;
190 }
191}
192
193inline double Eval_centre_PolyMAC_CDO_Elem::secmem_face(int face, const Dirichlet_entree_fluide& la_cl, int num1) const
194{
195 int i = elem_(face, 0);
196 double psc = dt_vitesse[face] * surface[face] * porosite[face];
197 double flux = 0;
198 double T_imp = la_cl.val_imp(face - num1);
199 if (i != -1)
200 {
201 if (psc < 0)
202 flux = psc * T_imp;
203 }
204 else // j != -1
205 {
206 if (psc > 0)
207 flux = psc * T_imp;
208 }
209 return -flux;
210}
211
212inline double Eval_centre_PolyMAC_CDO_Elem::flux_face(const DoubleTab& inco, int face, const Neumann_sortie_libre& la_cl, int num1) const
213{
214 int n0 = elem_(face, 0);
215 int n1 = elem_(face, 1);
216 double flux;
217 double psc = dt_vitesse[face] * surface(face) * porosite(face);
218 if (n0 != -1)
219 {
220 if (psc > 0)
221 flux = psc * inco[n0];
222 else
223 flux = psc * la_cl.val_ext(face - num1);
224 }
225 else // n1 != -1
226 {
227 if (psc > 0)
228 flux = psc * la_cl.val_ext(face - num1);
229 else
230 flux = psc * inco[n1];
231 }
232 return -flux;
233}
234
235inline void Eval_centre_PolyMAC_CDO_Elem::coeffs_face(int face, int num1, const Neumann_sortie_libre& la_cl, double& aii, double& ajj) const
236{
237 int i = elem_(face, 0);
238 double psc = dt_vitesse[face] * surface(face) * porosite(face);
239 if (i != -1)
240 {
241 if (psc > 0)
242 aii = -psc;
243 }
244 else // n1 != -1
245 {
246 if (psc < 0)
247 ajj = -psc;
248 }
249}
250
251inline double Eval_centre_PolyMAC_CDO_Elem::secmem_face(int face, const Neumann_sortie_libre& la_cl, int num1) const
252{
253 double flux = 0;
254 int i = elem_(face, 0);
255 double psc = dt_vitesse[face] * surface(face) * porosite(face);
256 if (i != -1)
257 {
258 if (psc < 0)
259 flux = psc * la_cl.val_ext(face - num1);
260 }
261 else // j != -1
262 {
263 if (psc > 0)
264 flux = psc * la_cl.val_ext(face - num1);
265 }
266 return -flux;
267}
268
269inline double Eval_centre_PolyMAC_CDO_Elem::flux_face(const DoubleTab& inco, int face, const Periodique& la_cl, int) const
270{
271 // 30/05/2002 : Codage Periodicite.
272 // ALEX C.
273 double flux;
274 double psc = dt_vitesse[face] * surface(face) * porosite(face);
275 int n0 = elem_(face, 0);
276 int n1 = elem_(face, 1);
277 int n0_0 = amont_amont(face, 0);
278 int n1_1 = amont_amont(face, 1);
279
280 // on applique le schema centre2
281 flux = qcentre(psc, n0, n1, n0_0, n1_1, face, inco);
282 return -flux;
283}
284
285inline void Eval_centre_PolyMAC_CDO_Elem::coeffs_face(int face, int, const Periodique& la_cl, double& aii, double& ajj) const
286{
287 // 30/05/2002 : Codage Periodicite.
288 // // ALEX C.
289 int i = elem_(face, 0);
290 int j = elem_(face, 1);
291 int i0_0 = amont_amont(face, 0);
292 int j1_1 = amont_amont(face, 1);
293 double psc = dt_vitesse[face] * surface[face] * porosite[face];
294
295 // on applique le schema centre
296 if (psc > 0)
297 aii = -qcentre(psc, i, j, i0_0, j1_1, face, inconnue->valeurs());
298 else
299 ajj = -qcentre(psc, i, j, i0_0, j1_1, face, inconnue->valeurs());
300}
301
302inline double Eval_centre_PolyMAC_CDO_Elem::flux_faces_interne(const DoubleTab& inco, int face) const
303{
304 double flux;
305 double psc = dt_vitesse[face] * surface(face) * porosite(face);
306 int n0 = elem_(face, 0);
307 int n1 = elem_(face, 1);
308 int n0_0 = amont_amont(face, 0);
309 int n1_1 = amont_amont(face, 1);
310
311 flux = qcentre(psc, n0, n1, n0_0, n1_1, face, inco);
312 return -flux;
313}
314
315inline void Eval_centre_PolyMAC_CDO_Elem::coeffs_faces_interne(int face, double& aii, double& ajj) const
316{
317 int i = elem_(face, 0);
318 int j = elem_(face, 1);
319 int i0_0 = amont_amont(face, 0);
320 int j1_1 = amont_amont(face, 1);
321 double psc = dt_vitesse[face] * surface[face] * porosite[face];
322
323 if ((i0_0 == -1) || (j1_1 == -1)) // on applique le schema amont
324 if (psc > 0)
325 aii = -psc;
326 else
327 ajj = -psc;
328
329 else // on applique le schema centre
330 if (psc > 0)
331 aii = -qcentre(psc, i, j, i0_0, j1_1, face, inconnue->valeurs());
332 else
333 ajj = -qcentre(psc, i, j, i0_0, j1_1, face, inconnue->valeurs());
334}
335
336inline void Eval_centre_PolyMAC_CDO_Elem::flux_face(const DoubleTab& inco, int face, const Dirichlet_entree_fluide& la_cl, int num1, DoubleVect& flux) const
337{
338 int k;
339 int n0 = elem_(face, 0);
340 int n1 = elem_(face, 1);
341 double psc = dt_vitesse(face) * surface(face) * porosite(face);
342
343 if (n0 != -1)
344 {
345 if (psc > 0)
346 for (k = 0; k < flux.size(); k++)
347 flux(k) = -psc * inco(n0, k);
348 else
349 for (k = 0; k < flux.size(); k++)
350 flux(k) = -psc * la_cl.val_imp(face - num1, k);
351 }
352 else // n1 != -1
353 {
354 if (psc > 0)
355 for (k = 0; k < flux.size(); k++)
356 flux(k) = -psc * la_cl.val_imp(face - num1, k);
357 else
358 for (k = 0; k < flux.size(); k++)
359 flux(k) = -psc * inco(n1, k);
360 }
361}
362
363inline void Eval_centre_PolyMAC_CDO_Elem::coeffs_face(int face, int num1, const Dirichlet_entree_fluide& la_cl, DoubleVect& aii, DoubleVect& ajj) const
364{
365 int k;
366 int i = elem_(face, 0);
367 double psc = dt_vitesse[face] * surface(face) * porosite(face);
368 if (i != -1)
369 {
370 if (psc > 0)
371 for (k = 0; k < aii.size(); k++)
372 aii(k) = -psc;
373 }
374 else // j != -1
375 {
376 if (psc < 0)
377 for (k = 0; k < ajj.size(); k++)
378 ajj(k) = -psc;
379 }
380}
381
382inline void Eval_centre_PolyMAC_CDO_Elem::secmem_face(int face, const Dirichlet_entree_fluide& la_cl, int num1, DoubleVect& flux) const
383{
384 int k;
385 int i = elem_(face, 0);
386 double psc = dt_vitesse[face] * surface(face) * porosite(face);
387 if (i != -1)
388 {
389 if (psc < 0)
390 for (k = 0; k < flux.size(); k++)
391 flux(k) = -psc * la_cl.val_imp(face - num1);
392 }
393 else // j != -1
394 {
395 if (psc > 0)
396 for (k = 0; k < flux.size(); k++)
397 flux(k) = -psc * la_cl.val_imp(face - num1);
398 }
399}
400
401inline void Eval_centre_PolyMAC_CDO_Elem::flux_face(const DoubleTab& inco, int face, const Neumann_sortie_libre& la_cl, int num1, DoubleVect& flux) const
402{
403 int k;
404 int n0 = elem_(face, 0);
405 int n1 = elem_(face, 1);
406 double psc = dt_vitesse[face] * surface(face) * porosite(face);
407 if (n0 != -1)
408 {
409 if (psc > 0)
410 for (k = 0; k < flux.size(); k++)
411 flux(k) = -psc * inco(n0, k);
412 else
413 for (k = 0; k < flux.size(); k++)
414 flux(k) = -psc * la_cl.val_ext(face - num1, k);
415 }
416 else // n1 != -1
417 {
418 if (psc > 0)
419 for (k = 0; k < flux.size(); k++)
420 flux(k) = -psc * la_cl.val_ext(face - num1, k);
421 else
422 for (k = 0; k < flux.size(); k++)
423 flux(k) = -psc * inco(n1, k);
424 }
425}
426
427inline void Eval_centre_PolyMAC_CDO_Elem::coeffs_face(int face, int num1, const Neumann_sortie_libre& la_cl, DoubleVect& aii, DoubleVect& ajj) const
428{
429 int k;
430 int i = elem_(face, 0);
431 double psc = dt_vitesse[face] * surface(face) * porosite(face);
432 if (i != -1)
433 {
434 if (psc > 0)
435 for (k = 0; k < aii.size(); k++)
436 aii(k) = -psc;
437 }
438 else // n1 != -1
439 {
440 if (psc < 0)
441 for (k = 0; k < ajj.size(); k++)
442 ajj(k) = -psc;
443 }
444}
445
446inline void Eval_centre_PolyMAC_CDO_Elem::secmem_face(int face, const Neumann_sortie_libre& la_cl, int num1, DoubleVect& flux) const
447{
448 int k;
449 int i = elem_(face, 0);
450 double psc = dt_vitesse[face] * surface(face) * porosite(face);
451 if (i != -1)
452 {
453 if (psc < 0)
454 for (k = 0; k < flux.size(); k++)
455 flux(k) = -psc * la_cl.val_ext(face - num1);
456 }
457 else // j != -1
458 {
459 if (psc > 0)
460 for (k = 0; k < flux.size(); k++)
461 flux(k) = -psc * la_cl.val_ext(face - num1);
462 }
463}
464
465inline void Eval_centre_PolyMAC_CDO_Elem::flux_face(const DoubleTab& inco, int face, const Periodique& la_cl, int, DoubleVect& flux) const
466{
467 int k;
468 double psc = dt_vitesse[face] * surface(face) * porosite(face);
469 int n0 = elem_(face, 0);
470 int n1 = elem_(face, 1);
471 int n0_0 = amont_amont(face, 0);
472 int n1_1 = amont_amont(face, 1);
473
474 // on applique le schema centre
475 qcentre(psc, n0, n1, n0_0, n1_1, face, inco, flux);
476 for (k = 0; k < flux.size(); k++)
477 flux(k) *= -1;
478}
479
480inline void Eval_centre_PolyMAC_CDO_Elem::coeffs_face(int face, int, const Periodique& la_cl, DoubleVect& aii, DoubleVect& ajj) const
481{
482 int k;
483 int i = elem_(face, 0);
484 int j = elem_(face, 1);
485 int i0_0 = amont_amont(face, 0);
486 int j1_1 = amont_amont(face, 1);
487 double psc = dt_vitesse[face] * surface[face] * porosite[face];
488 ArrOfDouble flux(aii.size());
489
490 // on applique le schema centre2
491 qcentre(psc, i, j, i0_0, j1_1, face, inconnue->valeurs(), flux);
492 if (psc > 0)
493 for (k = 0; k < aii.size(); k++)
494 aii(k) = -flux[k];
495 else
496 for (k = 0; k < ajj.size(); k++)
497 ajj(k) = -flux[k];
498}
499
500inline void Eval_centre_PolyMAC_CDO_Elem::flux_faces_interne(const DoubleTab& inco, int face, DoubleVect& flux) const
501{
502 int k;
503 double psc = dt_vitesse[face] * surface(face) * porosite(face);
504 int n0 = elem_(face, 0);
505 int n1 = elem_(face, 1);
506 int n0_0 = amont_amont(face, 0);
507 int n1_1 = amont_amont(face, 1);
508
509 qcentre(psc, n0, n1, n0_0, n1_1, face, inco, flux);
510 for (k = 0; k < flux.size(); k++)
511 flux(k) *= -1;
512}
513
514inline void Eval_centre_PolyMAC_CDO_Elem::coeffs_faces_interne(int face, DoubleVect& aii, DoubleVect& ajj) const
515{
516 int k;
517 int i = elem_(face, 0);
518 int j = elem_(face, 1);
519 int i0_0 = amont_amont(face, 0);
520 int j1_1 = amont_amont(face, 1);
521 double psc = dt_vitesse[face] * surface[face] * porosite[face];
522 ArrOfDouble flux(aii.size());
523
524 qcentre(psc, i, j, i0_0, j1_1, face, inconnue->valeurs(), flux);
525 if (psc > 0)
526 for (k = 0; k < aii.size(); k++)
527 aii(k) = -flux[k];
528 else
529 for (k = 0; k < ajj.size(); k++)
530 ajj(k) = -flux[k];
531}
532
533inline int Eval_centre_PolyMAC_CDO_Elem::amont_amont(int face, int i) const
534{
535 return 0; //le_domaine->amont_amont(face, i);
536}
537
538inline double Eval_centre_PolyMAC_CDO_Elem::qcentre(const double psc, const int num0, const int num1, const int num0_0, const int num1_1, const int face, const DoubleTab& transporte) const
539{
540 double flux;
541
542 double T0 = transporte[num0];
543 double T1 = transporte[num1];
544
545 flux = 0.5 * (T0 + T1);
546
547 return flux * psc;
548}
549
550inline void Eval_centre_PolyMAC_CDO_Elem::qcentre(const double psc, const int num0, const int num1, const int num0_0, const int num1_1, const int face, const DoubleTab& transporte,
551 ArrOfDouble& flux) const
552{
553
554 int k;
555 int ncomp = flux.size_array();
556
557 ArrOfDouble T0(ncomp);
558 ArrOfDouble T0_0(ncomp);
559 ArrOfDouble T1(ncomp);
560 ArrOfDouble T1_1(ncomp);
561
562 for (k = 0; k < ncomp; k++)
563 {
564 T0[k] = transporte(num0, k);
565 T0_0[k] = transporte(num0_0, k);
566 T1[k] = transporte(num1, k);
567 T1_1[k] = transporte(num1_1, k);
568 }
569
570 for (k = 0; k < ncomp; k++)
571 flux[k] = 0.5 * (T0[k] + T1[k]) * psc;
572}
573
574#endif /* Eval_centre_PolyMAC_CDO_Elem_included */
classe Dirichlet_entree_fluide Cette classe represente une condition aux limite imposant une grandeur
classe Dirichlet_paroi_defilante Impose la vitesse de paroi dnas une equation de type Navier_Stokes.
classe Dirichlet_paroi_fixe Represente une paroi immobile dans une equation de type Navier_Stokes.
virtual double val_imp(int i) const
Renvoie la valeur imposee sur la i-eme composante du champ a la frontiere au temps par defaut du cham...
Definition Dirichlet.cpp:35
Classe Echange_externe_impose: Cette classe represente le cas particulier de la classe.
Classe Echange_global_impose Cette classe represente le cas particulier de la classe.
Eval_Conv_PolyMAC_CDO()
constructeur par defaut
double flux_faces_interne(const DoubleTab &, int) const override
int calculer_flux_faces_entree_fluide() const override
void coeffs_faces_interne(int, double &aii, double &ajj) const override
void coeffs_face(int, int, const Neumann_paroi &, DoubleVect &aii, DoubleVect &ajj) const override
void coeffs_face(int, int, const Neumann_paroi_adiabatique &, double &aii, double &ajj) const override
void flux_face(const DoubleTab &, int, int, int, const Echange_externe_impose &, int, DoubleVect &flux) const override
int calculer_flux_faces_sortie_libre() const override
double flux_face(const DoubleTab &, int, const Dirichlet_paroi_fixe &, int) const override
void flux_face(const DoubleTab &, int, const Dirichlet_paroi_defilante &, int, DoubleVect &flux) const override
double flux_face(const DoubleTab &, int, int, int, const Echange_externe_impose &, int) const override
double secmem_face(int, const Dirichlet_paroi_fixe &, int) const override
int calculer_flux_faces_paroi_defilante() const override
double flux_face(const DoubleTab &, int, const Echange_global_impose &, int) const override
void coeffs_face(int, int, const Neumann_paroi_adiabatique &, DoubleVect &aii, DoubleVect &ajj) const override
double flux_face(const DoubleTab &, int, const Symetrie &, int) const override
void coeffs_face(int, int, const Symetrie &, DoubleVect &aii, DoubleVect &ajj) const override
double secmem_faces_interne(int) const override
void coeffs_face(int, int, const Dirichlet_paroi_defilante &, DoubleVect &aii, DoubleVect &ajj) const override
void coeffs_face(int, int, const Dirichlet_paroi_fixe &, DoubleVect &aii, DoubleVect &ajj) const override
void coeffs_face(int, int, const Symetrie &, double &aii, double &ajj) const override
void secmem_face(int, int, int, const Echange_externe_impose &, int, DoubleVect &) const override
void secmem_face(int, const Neumann_paroi &, int, DoubleVect &) const override
void secmem_face(int, const Neumann_paroi_adiabatique &, int, DoubleVect &) const override
int calculer_flux_faces_periodique() const override
double secmem_face(int, const Echange_global_impose &, int) const override
void flux_face(const DoubleTab &, int, const Neumann_paroi &, int, DoubleVect &flux) const override
void coeffs_face(int, int, const Dirichlet_paroi_defilante &, double &aii, double &ajj) const override
void flux_face(const DoubleTab &, int, const Neumann_paroi_adiabatique &, int, DoubleVect &flux) const override
int calculer_flux_faces_echange_global_impose() const override
void secmem_faces_interne(int, DoubleVect &) const override
void secmem_face(int, const Echange_global_impose &, int, DoubleVect &) const override
void coeffs_face(int, int, int, int, const Echange_externe_impose &, DoubleVect &aii, DoubleVect &ajj) const override
double flux_face(const DoubleTab &, int, const Dirichlet_paroi_defilante &, int) const override
double secmem_face(int, const Periodique &, int) const override
void secmem_face(int, const Dirichlet_paroi_fixe &, int, DoubleVect &) const override
double secmem_face(int, int, int, const Echange_externe_impose &, int) const override
void coeffs_face(int, int, const Dirichlet_paroi_fixe &, double &aii, double &ajj) const override
int calculer_flux_faces_echange_externe_impose() const override
double flux_face(const DoubleTab &, int, const Dirichlet_entree_fluide &, int) const override
void coeffs_face(int, int, const Echange_global_impose &, DoubleVect &aii, DoubleVect &ajj) const override
double secmem_face(int, const Neumann_paroi &, int) const override
void coeffs_face(int, int, int, int, const Echange_externe_impose &, double &aii, double &ajj) const override
int calculer_flux_faces_paroi_adiabatique() const override
void flux_face(const DoubleTab &, int, const Symetrie &, int, DoubleVect &flux) const override
double secmem_face(int, const Dirichlet_paroi_defilante &, int) const override
void secmem_face(int, const Periodique &, int, DoubleVect &) const override
void secmem_face(int, const Symetrie &, int, DoubleVect &) const override
void secmem_face(int, const Dirichlet_paroi_defilante &, int, DoubleVect &) const override
void flux_face(const DoubleTab &, int, const Echange_global_impose &, int, DoubleVect &flux) const override
void flux_face(const DoubleTab &, int, const Dirichlet_paroi_fixe &, int, DoubleVect &flux) const override
void coeffs_face(int, int, const Echange_global_impose &, double &aii, double &ajj) const override
double flux_face(const DoubleTab &, int, const Neumann_paroi &, int) const override
double flux_face(const DoubleTab &, int, const Neumann_paroi_adiabatique &, int) const override
double qcentre(const double, const int, const int, const int, const int, const int, const DoubleTab &) const
void coeffs_face(int, int, const Neumann_paroi &, double &aii, double &ajj) const override
double secmem_face(int, const Neumann_paroi_adiabatique &, int) const override
int calculer_flux_faces_paroi_fixe() const override
double secmem_face(int, const Symetrie &, int) const override
Classe Neumann_paroi_adiabatique Cette condition limite correspond a une paroi adiabatique dans une.
Classe Neumann_paroi Cette condition limite correspond a un flux impose pour l'equation de.
classe Neumann_sortie_libre Cette classe represente une frontiere ouverte sans vitesse imposee
double val_ext(int i) const override
Renvoie la valeur de la i-eme composante du champ impose a l'exterieur de la frontiere.
classe Periodique Cette classe represente une condition aux limites periodique.
Definition Periodique.h:31
classe Symetrie Sur les faces de symetrie on a les proprietes suivantes:
Definition Symetrie.h:37
_SIZE_ size_array() const
_SIZE_ size() const
Definition TRUSTVect.tpp:45