TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Champ_Face_VDF_implementation.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 <Champ_Face_VDF_implementation.h>
17#include <Frontiere_dis_base.h>
18#include <Champ_Inc_base.h>
19#include <LecFicDiffuse.h>
20#include <Domaine_VDF.h>
21#include <TRUSTTab.h>
22
23DoubleTab& Champ_Face_VDF_implementation::valeur_aux_elems(const DoubleTab& positions, const IntVect& les_polys, DoubleTab& val_elem) const
24{
25 return valeur_aux_elems_(le_champ().valeurs(), positions, les_polys, val_elem);
26}
27
28DoubleTab& Champ_Face_VDF_implementation::valeur_aux_elems_passe(const DoubleTab& positions, const IntVect& les_polys, DoubleTab& val_elem) const
29{
30 return valeur_aux_elems_(le_champ().passe(), positions, les_polys, val_elem);
31}
32
33DoubleVect& Champ_Face_VDF_implementation::valeur_a_elem(const DoubleVect& position, DoubleVect& val, int e) const
34{
35 return valeur_a_elem_(le_champ().valeurs(), position, val, e);
36}
37
38DoubleTab& Champ_Face_VDF_implementation::valeur_aux_elems_(const DoubleTab& val_face, const DoubleTab& positions, const IntVect& les_polys, DoubleTab& val_elem) const
39{
40 if (val_elem.nb_dim() > 2)
41 {
42 Cerr << "Erreur TRUST dans Champ_Face_implementation::valeur_aux_elems()" << finl;
43 Cerr << "Le DoubleTab val a plus de 2 entrees" << finl;
45 }
46
47
48 const int N = val_face.line_size(), D = Objet_U::dimension, M = le_champ().nb_comp();
49 DoubleVect val_e(N * D), x(D);
50 val_elem = 0.0;
51 //assert(val_elem.line_size()==N * std::min(D, M));
52
53 for (int p = 0; p < les_polys.size(); p++)
54 {
55 for (int d = 0; d < D; d++) x(d) = positions(p, d);
56 valeur_a_elem_(val_face, x, val_e, les_polys(p));
57 for (int i = 0; i < N * std::min(D, M); i++) val_elem(p, i) = val_e(i);
58 }
59
60 return val_elem;
61}
62
63/* Elie SAIKALI : utilise pour CGNS => passer champ face a un champ vect aux faces ! */
64DoubleTab& Champ_Face_VDF_implementation::valeur_aux_faces_post_impl(const Domaine_VDF& vdf, DoubleTab& result) const
65{
66 const Champ_base& cha = le_champ();
67 const DoubleTab& val = cha.valeurs();
68 const int nb_compo = cha.nb_comp(), N = val.line_size(), D = Objet_U::dimension;
69
70 if (nb_compo == 1)
71 Process::exit("TRUST error in Champ_Face_VDF_implementation::valeur_aux_faces_post_impl : A scalar field cannot be of Champ_Face type !");
72
73 const int nb_faces = vdf.nb_faces();
74
75 assert(nb_faces == val.dimension(0));
76
77 result.resize(nb_faces, N * D);
78
79 for (int f = 0; f < nb_faces; f++)
80 for (int d = 0; d < D; d++)
81 for (int n = 0; n < N; n++)
82 result(f, N * d + n) = val(f, n) * vdf.face_normales(f, d) / vdf.face_surfaces(f);
83
84 return result;
85}
86
87DoubleVect& Champ_Face_VDF_implementation::valeur_a_elem_(const DoubleTab& val_face, const DoubleVect& position, DoubleVect& val, int e) const
88{
89 val = 0.0;
90 if (e == -1) return val;
91
92 const int N = le_champ().valeurs().line_size(), D = Objet_U::dimension;
93 const Domaine_VDF& domaine_VDF = domaine_vdf();
94 const Domaine& domaine_geom = get_domaine_geom();
95 const IntTab& f_s = domaine_VDF.face_sommets(), &e_f = domaine_VDF.elem_faces();
96
97 for (int d = 0; d < D; d++)
98 {
99 const int som0 = f_s(e_f(e, d), 0), som1 = f_s(e_f(e, d + D), 0);
100 const double psi = (position(d) - domaine_geom.coord(som0, d)) / (domaine_geom.coord(som1, d) - domaine_geom.coord(som0, d));
101 for (int n = 0; n < N; n++)
102 {
103 // TODO : FIXME : cas avec line_size 1 mais nb_dim != 2 ... vu dans cathare3D
104 const double val1 = (N == 1) ? val_face(e_f(e, d)) : val_face(e_f(e, d), n);
105 const double val2 = (N == 1) ? val_face(e_f(e, d + D)) : val_face(e_f(e, d + D), n);
106 if (le_champ().nb_comp() == 1)
107 {
108 if (est_egal(psi, 0) || est_egal(psi, 1))
109 val(0) = interpolation(val1, val2, psi);
110 }
111 else
112 val(N * d + n) = interpolation(val1, val2, psi);
113 }
114 }
115 return val;
116}
117
118DoubleVect& Champ_Face_VDF_implementation::valeur_aux_elems_compo(const DoubleTab& positions, const IntVect& les_polys, DoubleVect& val, int ncomp) const
119{
120 assert(val.size_totale() >= les_polys.size());
121 const int D = Objet_U::dimension;
122 const DoubleTab& coord = domaine_vdf().domaine().coord_sommets();
123 const IntTab& f_s = domaine_vdf().face_sommets(), &e_f = domaine_vdf().elem_faces();
124 const DoubleTab& vals = le_champ().valeurs();
125 int size = les_polys.size();
126 for(int p = 0; p < size; p++)
127 {
128 int e = les_polys(p);
129 if (e<0)
130 {
131 val(p) = 0;
132 }
133 else
134 {
135 const double val1 = vals(e_f(e, ncomp)), val2 = vals(e_f(e, D + ncomp));
136 const int som0 = f_s(e_f(e, ncomp), 0), som1 = f_s(e_f(e, D + ncomp), 0);
137 const double psi = (positions(p, ncomp) - coord(som0, ncomp)) / (coord(som1, ncomp) - coord(som0, ncomp));
138 val(p) = interpolation(val1, val2, psi);
139 }
140 }
141 return val;
142}
143
144double Champ_Face_VDF_implementation::valeur_a_elem_compo(const DoubleVect& position, int e, int d) const
145{
146 if (le_champ().valeurs().line_size() > 1)
147 {
148 Cerr<<"Champ_Face_VDF_implementation::valeur_a_elem_compo"<<finl;
149 Cerr <<"Not compatible with multi-phase ... Call the 911 ! " << finl;
151 }
152
153 assert (le_champ().nb_comp() > 1); // a scalar field should not be a champ_face
154 assert(le_champ().valeurs().line_size() == 1); // not compatible with multiphase
155 if (e == -1) return 0;
156
157 const IntTab& f_s = domaine_vdf().face_sommets(), &e_f = domaine_vdf().elem_faces();
158 const DoubleTab& vals = le_champ().valeurs();
159 const Domaine& dom = domaine_vdf().domaine();
160 const int D = Objet_U::dimension;
161
162 const double val1 = vals(e_f(e, d)), val2 = vals(e_f(e, D + d));
163 const int som0 = f_s(e_f(e, d), 0), som1 = f_s(e_f(e, D + d), 0);
164 const double psi = (position(d) - dom.coord(som0, d)) / (dom.coord(som1, d) - dom.coord(som0, d));
165
166 return interpolation(val1, val2, psi);
167}
168
169DoubleTab& Champ_Face_VDF_implementation::valeur_aux_sommets(const Domaine& dom, DoubleTab& ch_som) const
170{
171 if (le_champ().nb_comp() == 1)
172 {
173 Cerr<<"Champ_Face_VDF_implementation::valeur_aux_sommets"<<finl;
174 Cerr <<"A scalar field cannot be of Champ_Face type." << finl;
176 }
177
178 const int nb_elem_tot = dom.nb_elem_tot(), nb_som = dom.nb_som(), nb_som_elem = dom.nb_som_elem();
179 const int N = le_champ().valeurs().line_size(), D = Objet_U::dimension;
180 IntVect compteur(nb_som);
181 ch_som = 0, compteur = 0;
182
183 DoubleVect position(D), val_e(N * D);
184 for (int e = 0; e < nb_elem_tot; e++)
185 for (int j = 0, s; j < nb_som_elem; j++)
186 if ((s = dom.sommet_elem(e, j)) < nb_som)
187 {
188 for(int d = 0; d < D; d++)
189 position(d) = dom.coord(s, d);
190
191 compteur[s]++;
192 valeur_a_elem(position, val_e, e);
193 for (int n = 0; n < N; n++)
194 for (int d = 0; d < D; d++)
195 ch_som(s, N * d + n) += val_e(N * d + n);
196 }
197
198 for (int s = 0; s < nb_som; s++)
199 for (int n = 0; n < N; n++)
200 for (int d = 0; d < D; d++)
201 ch_som(s, N * d + n) /= compteur[s];
202
203 return ch_som;
204}
206 DoubleVect& ch_som,
207 int ncomp) const
208{
209 if (le_champ().nb_comp() == 1)
210 {
211 Cerr<<"Champ_Face_VDF_implementation::valeur_aux_sommets_compo"<<finl;
212 Cerr <<"A scalar field cannot be of Champ_Face type." << finl;
214 }
215 assert(le_champ().valeurs().line_size() == 1); // not compatible with multiphase
216
217 int nb_elem_tot = dom.nb_elem_tot();
218 int nb_som = dom.nb_som();
219 int nb_som_elem = dom.nb_som_elem();
220 IntVect compteur(nb_som);
221 int num_elem,num_som,j;
222 ch_som = 0;
223 compteur = 0;
224
225 DoubleVect position(Objet_U::dimension);
226 for (num_elem=0; num_elem<nb_elem_tot; num_elem++)
227 for (j=0; j<nb_som_elem; j++)
228 {
229 num_som = dom.sommet_elem(num_elem,j);
230 for(int k=0; k<Objet_U::dimension; k++)
231 position(k)=dom.coord(num_som,k);
232 if(num_som < nb_som)
233 {
234 compteur[num_som]++;
235 ch_som(num_som) += valeur_a_elem_compo(position,num_elem,ncomp);
236 }
237 }
238
239 for (num_som=0; num_som<nb_som; num_som++)
240 ch_som(num_som) /= compteur[num_som];
241
242 return ch_som;
243}
244
245DoubleTab& Champ_Face_VDF_implementation::remplir_coord_noeuds(DoubleTab& positions) const
246{
247 const Domaine_VDF& le_dom_vdf = ref_cast(Domaine_VDF,get_domaine_dis());
248 const DoubleTab& xv = le_dom_vdf.xv();
249 int nb_fac = le_dom_vdf.nb_faces_tot();
250 if ( (xv.dimension(0) == nb_fac ) && (xv.dimension(1) == Objet_U::dimension) )
251 positions.ref(xv);
252 else
253 {
254 Cerr << "Erreur dans Champ_Face::remplir_coord_noeuds()" << finl;
255 Cerr << "Les centres de gravite des faces n'ont pas ete calcules" << finl;
257 }
258 return positions;
259}
260
262 IntVect& polys) const
263{
264 const IntTab& face_voisins = domaine_vdf().face_voisins();
265 int nb_faces=domaine_vdf().nb_faces();
266 remplir_coord_noeuds(positions);
267 polys.resize(nb_faces);
268
269 for(int face=0; face<nb_faces; face++)
270 if( (polys(face)=face_voisins(face,0)) == -1)
271 polys(face)=face_voisins(face,1);
272 return 1;
273}
274
276{
277 const Champ_base& champ=le_champ();
278 int ni,nj,nk=-1;
279 IntVect m(3);
280 int i,j,k;
281 int np,elem;
282 int cmax=7;
283 DoubleVect xi,yj,zk;
284 DoubleTab Grille;
285 //Lecture de xi,yj,zk dans un fichier .xiyjzk
286 Nom nomfic(Objet_U::nom_du_cas());
287 nomfic+=".xiyjzk";
288 LecFicDiffuse ficijk(nomfic);
289 ficijk >> xi;
290 ni=xi.size();
291 ficijk >> yj;
292 nj=yj.size();
293 if (Objet_U::dimension==3)
294 {
295 ficijk >> zk;
296 nk=zk.size();
297 }
298 m=1;
299 m(ncomp)=0;
300 if (Objet_U::dimension==3)
301 {
302 // Grille ordonnee sur les faces des elements
303 ni-=m(0);
304 nj-=m(1);
305 nk-=m(2);
306 np=ni*nj*nk;
307 Grille.resize(np,Objet_U::dimension);
308 for(k=0; k<nk; k++)
309 for(i=0; i<ni; i++)
310 for(j=0; j<nj; j++)
311 {
312 elem=j+nj*(i+k*ni);
313 if (ncomp==0)
314 Grille(elem,0)=xi(i);
315 else
316 Grille(elem,0)=0.5*(xi(i)+xi(i+1));
317 if (ncomp==1)
318 Grille(elem,1)=yj(j);
319 else
320 Grille(elem,1)=0.5*(yj(j)+yj(j+1));
321 if (ncomp==2)
322 Grille(elem,2)=zk(k);
323 else
324 Grille(elem,2)=0.5*(zk(k)+zk(k+1));
325 }
326 DoubleVect valeurs(np);
327 champ.valeur_aux_compo(Grille, valeurs, ncomp);
328 for(k=0; k<nk; k++)
329 {
330 os << finl;
331 os << "Coupe a K= " << k << finl;
332 int n1=0,n2=0;
333 while (n2<ni)
334 {
335 n1=n2;
336 n2=std::min(ni,n2+cmax);
337 os << finl;
338 os << "I= ";
339 for(i=n1; i<n2; i++)
340 os << i << " ";
341 os << finl;
342 for(j=nj-1; j>-1; j--)
343 {
344 os << "J= " << j << " ";
345 for(i=n1; i<n2; i++)
346 {
347 elem=j+nj*(i+k*ni);
348 os << valeurs(elem) << " ";
349 }
350 os << finl;
351 }
352 }
353 }
354 }
355 else if (Objet_U::dimension==2)
356 {
357 ni-=m(0);
358 nj-=m(1);
359 np=ni*nj;
360 Grille.resize(np,Objet_U::dimension);
361 for(i=0; i<ni; i++)
362 for(j=0; j<nj; j++)
363 {
364 elem=j+nj*i;
365 if (ncomp==0)
366 Grille(elem,0)=xi(i);
367 else
368 Grille(elem,0)=0.5*(xi(i)+xi(i+1));
369 if (ncomp==1)
370 Grille(elem,1)=yj(j);
371 else
372 Grille(elem,1)=0.5*(yj(j)+yj(j+1));
373 }
374 DoubleVect valeurs(np);
375 champ.valeur_aux_compo(Grille, valeurs, ncomp);
376 int n1=0,n2=0;
377 while (n2<ni)
378 {
379 n1=n2;
380 n2=std::min(ni,n2+cmax);
381 os << finl;
382 os << "I= ";
383 for(i=n1; i<n2; i++)
384 os << i << " ";
385 os << finl;
386 for(j=nj-1; j>-1; j--)
387 {
388 os << "J= " << j << " ";
389 for(i=n1; i<n2; i++)
390 {
391 elem=j+nj*i;
392 os << valeurs(elem) << " ";
393 }
394 os << finl;
395 }
396 }
397 }
398 return 1;
399}
400
401DoubleTab& Champ_Face_VDF_implementation::trace(const Frontiere_dis_base& fr, const DoubleTab& y, DoubleTab& x,int distant) const
402{
403 assert(distant==0);
404 const Front_VF& fr_vf=ref_cast(Front_VF, fr);
405 const Domaine_VDF& zvdf=domaine_vdf();
406 const IntVect& ori = zvdf.orientation();
407 const IntTab& face_voisins = zvdf.face_voisins();
408 const IntTab& elem_faces = zvdf.elem_faces();
409 int elem1,elem2;
410 int face,i,f1,f2,f3,f4;
411 int nb_faces = fr_vf.nb_faces();
412 if (x.dimension(0)!=nb_faces)
413 {
414 Cerr << "The number of faces " << nb_faces << " on the remote boundary " << fr.le_nom() << finl;
415 Cerr << "does not match the number of faces " << x.dimension(0) << " on the local boundary." << finl;
416 Cerr << "Please, check if the boundary condition is not applied on wrong boundaries." << finl;
418 }
419// assert(x.dimension(1)==Objet_U::dimension);
420
421 if (x.dimension(1) == 1)
422 {
423 for (i=0; i<fr_vf.nb_faces(); i++)
424 {
425 face=fr_vf.num_premiere_face()+i;
426 x(i,0)=y(face);
427 }
428 return x;
429 }
430
431 for (i=0; i<fr_vf.nb_faces(); i++)
432 {
433 face=fr_vf.num_premiere_face()+i;
434 x(i,ori[face])=y(face);
435 }
436
437 for (i=0; i<fr_vf.nb_faces(); i++)
438 {
439 face=fr_vf.num_premiere_face()+i;
440 elem1 = face_voisins(face,0);
441 if (elem1 != -1)
442 {
443 if (Objet_U::dimension == 2)
444 {
445 if (ori[face] == 0)
446 {
447 f1 = elem_faces(elem1,1);
448 f2 = elem_faces(elem1,3);
449 x(i,1)= 0.5*(y[f1] + y[f2]);
450 }
451 else
452 {
453 f1 = elem_faces(elem1,0);
454 f2 = elem_faces(elem1,2);
455 x(i,0)= 0.5*(y[f1] + y[f2]);
456 }
457 }
458 else if (Objet_U::dimension == 3)
459 {
460 if (ori[face] == 0)
461 {
462 f1 = elem_faces(elem1,1);
463 f2 = elem_faces(elem1,4);
464 f3 = elem_faces(elem1,2);
465 f4 = elem_faces(elem1,5);
466 x(i,1)= 0.5*(y[f1] + y[f2]);
467 x(i,2)= 0.5*(y[f3] + y[f4]);
468 }
469 else if (ori[face] == 1)
470 {
471 f1 = elem_faces(elem1,0);
472 f2 = elem_faces(elem1,3);
473 f3 = elem_faces(elem1,2);
474 f4 = elem_faces(elem1,5);
475 x(i,0)= 0.5*(y[f1] + y[f2]);
476 x(i,2)= 0.5*(y[f3] + y[f4]);
477 }
478 else // ori[face] = 2
479 {
480 f1 = elem_faces(elem1,0);
481 f2 = elem_faces(elem1,3);
482 f3 = elem_faces(elem1,1);
483 f4 = elem_faces(elem1,4);
484 x(i,0)= 0.5*(y[f1] + y[f2]);
485 x(i,1)= 0.5*(y[f3] + y[f4]);
486 }
487 }
488 }
489 else // elem1 = -1
490 {
491 elem2 = face_voisins(face,1);
492 if (Objet_U::dimension == 2)
493 {
494 if (ori[face] == 0)
495 {
496 f1 = elem_faces(elem2,1);
497 f2 = elem_faces(elem2,3);
498 x(i,1)= 0.5*(y[f1] + y[f2]);
499 }
500 else
501 {
502 f1 = elem_faces(elem2,0);
503 f2 = elem_faces(elem2,2);
504 x(i,0)= 0.5*(y[f1] + y[f2]);
505 }
506 }
507 else if (Objet_U::dimension == 3)
508 {
509 if (ori[face] == 0)
510 {
511 f1 = elem_faces(elem2,1);
512 f2 = elem_faces(elem2,4);
513 f3 = elem_faces(elem2,2);
514 f4 = elem_faces(elem2,5);
515 x(i,1)= 0.5*(y[f1] + y[f2]);
516 x(i,2)= 0.5*(y[f3] + y[f4]);
517 }
518 else if (ori[face] == 1)
519 {
520 f1 = elem_faces(elem2,0);
521 f2 = elem_faces(elem2,3);
522 f3 = elem_faces(elem2,2);
523 f4 = elem_faces(elem2,5);
524 x(i,0)= 0.5*(y[f1] + y[f2]);
525 x(i,2)= 0.5*(y[f3] + y[f4]);
526 }
527 else // ori[face] = 2
528 {
529 f1 = elem_faces(elem2,0);
530 f2 = elem_faces(elem2,3);
531 f3 = elem_faces(elem2,1);
532 f4 = elem_faces(elem2,4);
533 x(i,0)= 0.5*(y[f1] + y[f2]);
534 x(i,1)= 0.5*(y[f3] + y[f4]);
535 }
536 }
537 }
538 }
539 // Useless ?x.echange_espace_virtuel();
540 return x;
541}
double valeur_a_elem_compo(const DoubleVect &position, int le_poly, int ncomp) const override
DoubleTab & valeur_aux_faces_post_impl(const Domaine_VDF &, DoubleTab &result) const
virtual const Domaine_VDF & domaine_vdf() const =0
double interpolation(const double, const double, const double) const
DoubleTab & valeur_aux_sommets(const Domaine &, DoubleTab &) const override
DoubleTab & remplir_coord_noeuds(DoubleTab &positions) const override
DoubleVect & valeur_aux_elems_compo(const DoubleTab &positions, const IntVect &les_polys, DoubleVect &valeurs, int ncomp) const override
DoubleVect & valeur_a_elem(const DoubleVect &position, DoubleVect &val, int le_poly) const override
DoubleTab & trace(const Frontiere_dis_base &fr, const DoubleTab &y, DoubleTab &x, int distant) const
int remplir_coord_noeuds_et_polys(DoubleTab &positions, IntVect &polys) const override
DoubleTab & valeur_aux_elems_passe(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &valeurs) const
DoubleVect & valeur_aux_sommets_compo(const Domaine &, DoubleVect &, int) const override
DoubleTab & valeur_aux_elems(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &valeurs) const override
virtual DoubleTab & valeurs()=0
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
const Domaine & get_domaine_geom() const
virtual Champ_base & le_champ()=0
const Domaine_VF & get_domaine_dis() const
int nb_som_elem() const
Renvoie le nombre de sommets des elements geometriques constituants le domaine.
Definition Domaine.h:474
int_t nb_elem_tot() const
Definition Domaine.h:132
const DoubleTab_t & coord_sommets() const
Definition Domaine.h:112
double coord(int_t i, int j) const
Definition Domaine.h:110
int_t nb_som() const
Renvoie le nombre de sommets du domaine.
Definition Domaine.h:121
int_t sommet_elem(int_t i, int j) const
Renvoie le numero (global) du j-ieme sommet du i-ieme element.
Definition Domaine.h:136
class Domaine_VDF
Definition Domaine_VDF.h:64
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
double face_normales(int, int) const override
virtual const DoubleVect & face_surfaces() const
Definition Domaine_VF.h:51
int nb_faces() const
renvoie le nombre global de faces.
Definition Domaine_VF.h:471
int nb_faces_tot() const
renvoie le nombre total de faces.
Definition Domaine_VF.h:481
double xv(int num_face, int k) const
Definition Domaine_VF.h:76
int face_sommets(int i, int j) const
renvoie le numero du ieme sommet de la face num_face.
Definition Domaine_VF.h:583
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
const Domaine & domaine() const
virtual int nb_comp() const
Definition Field_base.h:56
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
classe Frontiere_dis_base Classe representant une frontiere discretisee.
const Nom & le_nom() const override
Renvoie le nom de la frontiere geometrique.
Cette classe implemente les operateurs et les methodes virtuelles de la classe EFichier de la facon s...
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
static int dimension
Definition Objet_U.h:99
static const Nom & nom_du_cas()
Renvoie une reference constante vers le nom du cas.
Definition Objet_U.cpp:146
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
virtual void ref(const TRUSTTab &)
Definition TRUSTTab.tpp:308
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
_SIZE_ size() const
Definition TRUSTVect.tpp:45
_SIZE_ size_totale() const
Definition TRUSTVect.tpp:61
int line_size() const
Definition TRUSTVect.tpp:67
void resize(_SIZE_, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTVect.tpp:91