TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Op_Conv_AmontNew_VEF_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_Conv_AmontNew_VEF_Face.h>
17#include <Neumann_sortie_libre.h>
18#include <Hexaedre_VEF.h>
19#include <Milieu_base.h>
20#include <Periodique.h>
21
22Implemente_base(Op_Conv_AmontNew_VEF_Face,"Op_Conv_AmontNew_VEF_P1NC",Op_Conv_VEF_base);
23
25{
26 return s << que_suis_je() ;
27}
28
30{
31 return s ;
32}
33
34//// convbis correspond au calcul de -1*terme_convection
35//
36static inline void convbis(const double psc,const int num1,const int num2,
37 double T1, double T2 , int comp, int ncomp,
38 DoubleTab& resu, DoubleVect& fluent)
39{
40 int amont;
41 double flux;
42
43 if (psc >= 0)
44 {
45 amont = num1;
46 if(comp==0)
47 fluent[num2] += psc;
48 }
49 else
50 {
51 amont = num2;
52 if(comp==0)
53 fluent[num1] -= psc;
54 }
55
56 if(amont==num1)
57 flux = T1*psc;
58 else
59 flux = T2*psc;
60 if(ncomp>1)
61 {
62 resu(num1,comp) -= flux;
63 resu(num2,comp) += flux;
64 }
65 else
66 {
67 resu(num1) -= flux;
68 resu(num2) += flux;
69 }
70}
71
72DoubleTab& Op_Conv_AmontNew_VEF_Face::ajouter(const DoubleTab& transporte, DoubleTab& resu) const
73{
74 const Domaine_Cl_VEF& domaine_Cl_VEF = la_zcl_vef.valeur();
75 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
76 const Champ_Inc_base& la_vitesse=vitesse_.valeur();
77 const IntTab& elem_faces=domaine_VEF.elem_faces();
78 const IntTab& face_voisins = domaine_VEF.face_voisins();
79 const DoubleTab& face_normales = domaine_VEF.face_normales();
80 const auto& facette_normales = domaine_VEF.facette_normales();
81 const DoubleVect& porosite_face = equation().milieu().porosite_face();
82 const Domaine& domaine = domaine_VEF.domaine();
83 const Elem_VEF_base& type_elem=domaine_VEF.type_elem();
84 const int nfa7 = type_elem.nb_facette();
85 int nb_faces_tot=domaine_VEF.nb_faces_tot();
86 int nb_elem_tot = domaine_VEF.nb_elem_tot();
87 const DoubleVect& volumes=domaine_VEF.volumes();
88 const IntVect& rang_elem_non_std = domaine_VEF.rang_elem_non_std();
89 const DoubleTab& normales_facettes_Cl = domaine_Cl_VEF.normales_facettes_Cl();
90 int ncomp_ch_transporte;
91
92 if (transporte.nb_dim() == 1)
93 ncomp_ch_transporte=1;
94 else
95 ncomp_ch_transporte= transporte.dimension(1);
96
97 DoubleTab TbarK(nb_elem_tot, ncomp_ch_transporte);
98 DoubleTab Ttilde1(nb_faces_tot, ncomp_ch_transporte);
99 DoubleTab Ttilde2(nb_faces_tot, ncomp_ch_transporte);
100 int f, j=0;
101 //
102 // calcul des Ttilde :
103 //
104 for(f=0; f<nb_faces_tot; f++)
105 {
106 int elem=face_voisins(f,0);
107 if(ncomp_ch_transporte>1)
108 for(j=0; j<ncomp_ch_transporte; j++)
109 TbarK(elem, j)+=transporte(f, j);
110 else
111 TbarK(elem, 0)+=transporte(f);
112 elem=face_voisins(f,1);
113 if(elem>-1)
114 {
115 if(ncomp_ch_transporte>1)
116 for(j=0; j<ncomp_ch_transporte; j++)
117 TbarK(elem, j)+=transporte(f, j);
118 else
119 TbarK(elem, 0)+=transporte(f);
120 }
121 }
122 double x=1./(dimension+1);
123 for(f=0; f<nb_faces_tot; f++)
124 {
125 int elem=face_voisins(f,0);
126 if(ncomp_ch_transporte>1)
127 for(j=0; j<ncomp_ch_transporte; j++)
128 Ttilde1(f, j)=x*(TbarK(elem, j)-transporte(f, j));
129 else
130 Ttilde1(f, j)=x*(TbarK(elem, j)-transporte(f));
131 elem=face_voisins(f,1);
132 if(elem>-1)
133 if(ncomp_ch_transporte>1)
134 for(j=0; j<ncomp_ch_transporte; j++)
135 Ttilde2(f, j)+=x*(TbarK(elem, j)-transporte(f, j));
136 else
137 Ttilde2(f, j)+=x*(TbarK(elem, j)-transporte(f));
138 else if(ncomp_ch_transporte>1)
139 Ttilde2(f, j)=transporte(f, j);
140 else
141 Ttilde2(f, j)=transporte(f);
142 }
143 // On recree les chocs ...
144 for(f=0; f<nb_faces_tot; f++)
145 {
146 int elem2=face_voisins(f,1);
147 if(elem2>-1)
148 {
149 int elem1=face_voisins(f,0);
150 double alpha=volumes(elem1)/(volumes(elem1)+volumes(elem2));
151 for(j=0; j<ncomp_ch_transporte; j++)
152 {
153 double epsilon;
154 double Tfj;
155 {
156 if(ncomp_ch_transporte>1)
157 Tfj=transporte(f, j);
158 else
159 Tfj=transporte(f);
160 if( ( (Tfj<Ttilde1(f, j)) &&
161 (Tfj<Ttilde2(f, j)) ) ||
162 ( (Tfj>Ttilde1(f, j)) &&
163 (Tfj>Ttilde2(f, j)) ) )
164 {
165 Ttilde1(f, j)=Ttilde2(f, j)=Tfj;
166 }
167 else
168 {
169 if(Ttilde1(f, j)<Ttilde2(f, j))
170 {
171 epsilon=(Tfj-alpha*Ttilde1(f, j)+
172 (1-alpha)*Ttilde2(f, j))/alpha;
173 Ttilde2(f, j)-=epsilon;
174 Ttilde1(f, j)=(Tfj-(1-alpha)*Ttilde2(f, j))
175 /alpha;
176 }
177 else
178 {
179 epsilon=(Tfj-(1-alpha)*Ttilde2(f, j)+
180 alpha*Ttilde1(f, j))/(1-alpha);
181 Ttilde1(f, j)-=epsilon;
182 Ttilde2(f, j)=(Tfj-alpha*Ttilde1(f, j))
183 /(1-alpha);
184 }
185 Cerr << "!!" << finl;
186 }
187 }
188 }
189 }
190 else if(ncomp_ch_transporte>1)
191 for(j=0; j<ncomp_ch_transporte; j++)
192 Ttilde1(f, j)=Ttilde2(f, j)=transporte(f, j);
193 else
194 Ttilde1(f, 0)=Ttilde2(f, 0)=transporte(f);
195
196 }
197 // pas d'inversion de pente :
198
199 for(int elem=0; elem<nb_elem_tot; elem++)
200 {
201 for(int f1=0; f1<dimension; f1++)
202 {
203 int face1=elem_faces(elem,f1);
204 int i1=0;
205 if(face_voisins(face1,0)!=elem)
206 i1=1;
207 for(int f2=f1; f2<dimension+1; f2++)
208 {
209 int face2=elem_faces(elem,f2);
210 int i2=0;
211 if(face_voisins(face2,0)!=elem)
212 i2=1;
213 for(j=0; j<ncomp_ch_transporte; j++)
214 {
215 double Tfj1;
216 if(ncomp_ch_transporte>1)
217 Tfj1=transporte(face1, j);
218 else
219 Tfj1=transporte(face1);
220 double Tfj2;
221 if(ncomp_ch_transporte>1)
222 Tfj2=transporte(face2, j);
223 else
224 Tfj2=transporte(face2);
225 double T1=Ttilde1(face1, j);
226 if (i1==1)
227 T1=Ttilde2(face1, j);
228 double T2=Ttilde1(face2, j);
229 if (i2==1)
230 T2=Ttilde2(face2, j);
231 //double Tbar=0.5*(Tfj1+Tfj2);
232 if((T1-T2)*(Tfj1-Tfj2)<1.e-12)
233 {
234 if (i1==0)
235 Ttilde1(face1, j)=Tfj1;
236 else
237 Ttilde2(face1, j)=Tfj1;
238 if (i2==0)
239 Ttilde1(face2, j)=Tfj2;
240 else
241 Ttilde2(face2, j)=Tfj2;
242 }
243 }
244 }
245 }
246 }
247 // calcul des flux ...
248 int nfac = domaine.nb_faces_elem();
249 int nsom = domaine.nb_som_elem();
250 int nb_som_facette = domaine.type_elem()->nb_som_face();
251 const Elem_geom_base& elem_geom = domaine.type_elem().valeur();
252 if ( sub_type(Hexaedre_VEF,elem_geom))
253 {
255 }
256 const Elem_VEF_base& type_elemvef= domaine_VEF.type_elem();
257 int istetra=0;
258 Nom nom_elem=type_elemvef.que_suis_je();
259 if ((nom_elem=="Tetra_VEF")||(nom_elem=="Tri_VEF"))
260 istetra=1;
261 double psc;
262 int poly,face_adj,fa7,i,n_bord;
263 int num_face, rang ,itypcl;
264 int num10,num20,num_som;
265
266 if (transporte.nb_dim() == 1)
267 ncomp_ch_transporte=1;
268 else
269 ncomp_ch_transporte= transporte.dimension(1);
270
271 IntVect face(nfac);
272 DoubleVect vs(dimension);
273 DoubleVect vc(dimension);
274 DoubleTab vsom(nsom,dimension);
275 DoubleVect cc(dimension);
276
277
278 // On remet a zero le tableau qui sert pour
279 // le calcul du pas de temps de stabilite
280 fluent_ = 0;
281
282 // Traitement particulier pour les faces de periodicite
283
284 int nb_faces_perio = 0;
285 // Boucle pour compter le nombre de faces de periodicite
286 for (n_bord=0; n_bord<domaine_VEF.nb_front_Cl(); n_bord++)
287 {
288 const Cond_lim& la_cl = domaine_Cl_VEF.les_conditions_limites(n_bord);
289 if (sub_type(Periodique,la_cl.valeur()))
290 {
291 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
292 nb_faces_perio += le_bord.nb_faces();
293 }
294 }
295
296 DoubleTab tab;
297 if (ncomp_ch_transporte == 1)
298 tab.resize(nb_faces_perio);
299 else
300 tab.resize(nb_faces_perio,ncomp_ch_transporte);
301
302 // Boucle pour remplir tab
303 nb_faces_perio=0;
304 for (n_bord=0; n_bord<domaine_VEF.nb_front_Cl(); n_bord++)
305 {
306 const Cond_lim& la_cl = domaine_Cl_VEF.les_conditions_limites(n_bord);
307 if (sub_type(Periodique,la_cl.valeur()))
308 {
309 // const Periodique& la_cl_perio = (Periodique&) la_cl.valeur();
310 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
311 int num1 = le_bord.num_premiere_face();
312 int num2 = num1 + le_bord.nb_faces();
313 for (num_face=num1; num_face<num2; num_face++)
314 {
315 if (ncomp_ch_transporte == 1)
316 tab(nb_faces_perio) = resu(num_face);
317 else
318 for (int comp=0; comp<ncomp_ch_transporte; comp++)
319 tab(nb_faces_perio,comp) = resu(num_face,comp);
320 nb_faces_perio++;
321 }
322 }
323 }
324
325 IntVect compteur(nsom);
326 compteur = 0;
327 vsom=0.;
328
329 // Les polyedres non standard sont ranges en 2 groupes dans le Domaine_VEF:
330 // - polyedres bords et joints
331 // - polyedres bords et non joints
332 // On traite les polyedres en suivant l'ordre dans lequel ils figurent
333 // dans le domaine
334
335 // boucle sur les polys
336
337 for (poly=0; poly<nb_elem_tot; poly++)
338 {
339
340 rang = rang_elem_non_std(poly);
341 if (rang==-1)
342 itypcl=0;
343 else
344 itypcl=domaine_Cl_VEF.type_elem_Cl(rang);
345
346 // calcul des numeros des faces du polyedre
347 for (face_adj=0; face_adj<nfac; face_adj++)
348 face[face_adj]= elem_faces(poly,face_adj);
349 // on conserve cette partie
350 for (j=0; j<dimension; j++)
351 {
352 vs[j] = la_vitesse.valeurs()(face[0],j)*porosite_face(face[0]);
353 for (i=1; i<nfac; i++)
354 vs[j]+= la_vitesse.valeurs()(face[i],j)*porosite_face(face[i]);
355 }
356
357 // calcul de la vitesse aux sommets des polyedres
358
359 //int ncomp;
360 if (istetra==1)
361 {
362 for (j=0; j<nsom; j++)
363 {
364 for (int ncomp=0; ncomp<Objet_U::dimension; ncomp++)
365 vsom(j,ncomp) =vs[ncomp] - Objet_U::dimension*la_vitesse.valeurs()(face[j],ncomp)*porosite_face(face[j]);
366 }
367 }
368 else
369 {
370 // pour que cela soit valide avec les hexa
371 // On va utliser les fonctions de forme implementees dans la classe Champs_P1_impl ou Champs_Q1_impl
372 int ncomp;
373 for (j=0; j<nsom; j++)
374 {
375 num_som = domaine.sommet_elem(poly,j);
376 for (ncomp=0; ncomp<dimension; ncomp++)
377 {
378 vsom(j,ncomp) = la_vitesse.valeur_a_sommet_compo(num_som,poly,ncomp);
379 }
380 }
381 }
382 // calcul de vc
383 domaine_VEF.type_elem().calcul_vc(face,vc,vs,vsom,vitesse(), itypcl,porosite_face);
384
385 //for (j=0; j<dimension; j++) vc(j) = vs(j)/nfac ;
386 type_elem.calcul_vc(face,vc,vs,vsom,vitesse(),
387 itypcl,porosite_face);
388
389 // Boucle sur les facettes du polyedre
390
391 for (fa7=0; fa7<nfa7; fa7++)
392 {
393 if (rang==-1)
394 for (i=0; i<dimension; i++)
395 cc[i] = facette_normales(poly,fa7,i);
396 else
397 for (i=0; i<dimension; i++)
398 cc[i] = normales_facettes_Cl(rang,fa7,i);
399 // On applique le schema de convection a chaque sommet de la facette
400
401 // On traite le ou les sommets qui sont aussi des sommets du polyedre
402
403 const IntTab& KEL=type_elem.KEL();
404 for (i=0; i<nb_som_facette-1; i++)
405 {
406 psc =0;
407 for (j=0; j<dimension; j++)
408 {
409 psc+= vsom(KEL(i+2,fa7),j)*cc[j];
410 }
411 type_elem.calcul_vc(face,vc,vs,vsom,vitesse(),itypcl,porosite_face);
412 // Boucle sur les facettes du polyedre
413 psc /= nb_som_facette;
414 num10 = face[KEL(0,fa7)];
415 num20 = face[KEL(1,fa7)];
416 double T1, T2;
417 for(int comp=0; comp<ncomp_ch_transporte; comp++)
418 {
419 if(face_voisins(num10,0)==poly)
420 T1 = Ttilde1(num10, comp);
421 else
422 T1 = Ttilde2(num10, comp);
423 if(face_voisins(num20,0)==poly)
424 T2 = Ttilde1(num20, comp);
425 else
426 T2 = Ttilde2(num20, comp);
427 if( (transporte(num20)-transporte(num10)) * (T1-transporte(num10)) < 0)
428 convbis(psc,num10,num20,T1, T2, comp,
429 ncomp_ch_transporte,
430 resu,fluent_);
431 }
432 }
433 // On traite le sommet confondu avec le centre de gravite du polyedre
434 psc=0;
435 for (j=0; j<dimension; j++)
436 psc += vc[j]*cc[j];
437 psc /= nb_som_facette;
438 num10 = face[KEL(0,fa7)];
439 num20 = face[KEL(1,fa7)];
440
441 double T1, T2;
442 for(int comp=0; comp<ncomp_ch_transporte; comp++)
443 {
444 if(face_voisins(num10,0)==poly)
445 T1 = Ttilde1(num10, comp);
446 else
447 T1 = Ttilde2(num10, comp);
448 if(face_voisins(num20,0)==poly)
449 T2 = Ttilde1(num20, comp);
450 else
451 T2 = Ttilde2(num20, comp);
452 convbis(psc,num10,num20,T1, T2, comp,
453 ncomp_ch_transporte,
454 resu,fluent_);
455 }
456 }
457
458 } // fin de la boucle
459
460 int voisine;
461 nb_faces_perio = 0;
462 double diff1,diff2;
463
464 // Dimensionnement du tableau des flux convectifs au bord du domaine
465 // de calcul
466 DoubleTab& flux_b = flux_bords_;
467 flux_b.resize(domaine_VEF.nb_faces_bord(),ncomp_ch_transporte);
468 flux_b = 0.;
469
470 // Boucle sur les bords pour traiter les conditions aux limites
471 // il y a prise en compte d'un terme de convection pour les
472 // conditions aux limites de Neumann_sortie_libre seulement
473
474 for (n_bord=0; n_bord<domaine_VEF.nb_front_Cl(); n_bord++)
475 {
476
477 const Cond_lim& la_cl = domaine_Cl_VEF.les_conditions_limites(n_bord);
478
479 if (sub_type(Neumann_sortie_libre,la_cl.valeur()))
480 {
481 const Neumann_sortie_libre& la_sortie_libre =
482 ref_cast(Neumann_sortie_libre, la_cl.valeur());
483 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
484 int num1 = le_bord.num_premiere_face();
485 int num2 = num1 + le_bord.nb_faces();
486 for (num_face=num1; num_face<num2; num_face++)
487 {
488 psc =0;
489 for (i=0; i<dimension; i++)
490 psc += la_vitesse.valeurs()(num_face,i)*face_normales(num_face,i)*porosite_face(num_face);
491 if (psc>0)
492 if (ncomp_ch_transporte == 1)
493 {
494 resu(num_face) -= psc*transporte(num_face);
495 flux_b(num_face,0) -= psc*transporte(num_face);
496 }
497 else
498 for (i=0; i<ncomp_ch_transporte; i++)
499 {
500 resu(num_face,i) -= psc*transporte(num_face,i);
501 flux_b(num_face,i) -= psc*transporte(num_face,i);
502 }
503 else
504 {
505 if (ncomp_ch_transporte == 1)
506 {
507 resu(num_face) -= psc*la_sortie_libre.val_ext(num_face-num1);
508 flux_b(num_face,0) -= psc*la_sortie_libre.val_ext(num_face-num1);
509 }
510 else
511 for (i=0; i<ncomp_ch_transporte; i++)
512 {
513 resu(num_face,i) -= psc*la_sortie_libre.val_ext(num_face-num1,i);
514 flux_b(num_face,i) -= psc*la_sortie_libre.val_ext(num_face-num1,i);
515 }
516 fluent_[num_face] -= psc;
517 }
518 }
519 }
520 else if (sub_type(Periodique,la_cl.valeur()))
521 {
522 const Periodique& la_cl_perio = ref_cast(Periodique, la_cl.valeur());
523 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
524 int num1 = le_bord.num_premiere_face();
525 int num2 = num1 + le_bord.nb_faces();
526 IntVect fait(le_bord.nb_faces());
527 fait = 0;
528 for (num_face=num1; num_face<num2; num_face++)
529 {
530 if (fait[num_face-num1] == 0)
531 {
532 voisine = la_cl_perio.face_associee(num_face-num1) + num1;
533
534 if (ncomp_ch_transporte == 1)
535 {
536 diff1 = resu(num_face)-tab(nb_faces_perio);
537 diff2 = resu(voisine)-tab(nb_faces_perio+voisine-num_face);
538 resu(voisine) += diff1;
539 resu(num_face) += diff2;
540 flux_b(voisine,0) += diff1;
541 flux_b(num_face,0) += diff2;
542 }
543 else
544 for (int comp=0; comp<ncomp_ch_transporte; comp++)
545 {
546 diff1 = resu(num_face,comp)-tab(nb_faces_perio,comp);
547 diff2 = resu(voisine,comp)-tab(nb_faces_perio+voisine-num_face,comp);
548 resu(voisine,comp) += diff1;
549 resu(num_face,comp) += diff2;
550 flux_b(voisine,comp) += diff1;
551 flux_b(num_face,comp) += diff2;
552 }
553
554 fait[num_face-num1]= 1;
555 fait[voisine-num1] = 1;
556 }
557 nb_faces_perio++;
558 }
559 }
560 }
561 modifier_flux(*this);
562 return resu;
563}
Classe Champ_Inc_base.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
virtual double valeur_a_sommet_compo(int, int, int) const
renvoi la compo eme corrdonne des valeurs a l'element le_poly au sommet sommet
classe Cond_lim Classe generique servant a representer n'importe quelle classe
Definition Cond_lim.h:31
int type_elem_Cl(int i) const
DoubleTab & normales_facettes_Cl()
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
class Domaine_VEF
Definition Domaine_VEF.h:54
IntVect & rang_elem_non_std()
Definition Domaine_VEF.h:86
const Elem_VEF_base & type_elem() const
Definition Domaine_VEF.h:75
auto & facette_normales()
Definition Domaine_VEF.h:84
int nb_faces_tot() const
renvoie le nombre total de faces.
Definition Domaine_VF.h:481
virtual double face_normales(int face, int comp) const
Definition Domaine_VF.h:47
double volumes(int i) const
Definition Domaine_VF.h:113
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est
Definition Domaine_VF.h:543
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
Definition Domaine_VF.h:418
int nb_faces_bord() const
renvoie le nombre de faces sur lesquelles sont appliquees les conditions limites :
Definition Domaine_VF.h:513
int nb_elem_tot() const
int nb_front_Cl() const
const Domaine & domaine() const
virtual void calcul_vc(const ArrOfInt &, ArrOfDouble &, const ArrOfDouble &, const DoubleTab &, const Champ_Inc_base &, int, const DoubleVect &) const =0
const IntTab & KEL() const
virtual int nb_facette() const =0
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
class Front_VF
Definition Front_VF.h:36
int nb_faces() const
Definition Front_VF.h:53
int num_premiere_face() const
Definition Front_VF.h:63
DoubleVect & porosite_face()
Definition Milieu_base.h:62
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
Definition MorEqn.h:62
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.
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
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 Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
class Op_Conv_AmontNew_VEF_Face
DoubleTab & ajouter(const DoubleTab &, DoubleTab &) const override
class Op_Conv_VEF_base
const Champ_Inc_base & vitesse() const
void modifier_flux(const Operateur_base &) const
DoubleTab flux_bords_
classe Periodique Cette classe represente une condition aux limites periodique.
Definition Periodique.h:31
int face_associee(int i) const
Definition Periodique.h:35
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
Classe de base des flux de sortie.
Definition Sortie.h:52
int nb_dim() const
Definition TRUSTTab.h:199
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTTab.tpp:469
_SIZE_ dimension(int d) const
Definition TRUSTTab.tpp:133