TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
ExtrudeBord.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 <ExtrudeBord.h>
17#include <EFichier.h>
18#include <TroisDto2D.h>
19#include <Transformer.h>
20#include <SFichier.h>
21#include <Extruder.h>
22#include <Extruder_en3.h>
23#include <Extruder_en20.h>
24#include <Scatter.h>
25#include <Param.h>
26#include <TRUSTVects.h>
27
28Implemente_instanciable(ExtrudeBord,"ExtrudeBord",Interprete_geometrique_base);
29// XD extrudebord interprete extrudebord BRACE Class to generate an extruded mesh from a boundary of a tetrahedral or an
30// XD_CONT hexahedral mesh. NL2 Warning: If the initial domain is a tetrahedral mesh, the boundary will be moved in the
31// XD_CONT XY plane then extrusion will be applied (you should maybe use the Transformer keyword on the final domain to
32// XD_CONT have the domain you really want). You can use the keyword Postraiter_domaine to generate a lata|med|... file
33// XD_CONT to visualize your initial and final meshes. NL2 This keyword can be used for example to create a periodic box
34// XD_CONT extracted from a boundary of a tetrahedral or a hexaedral mesh. This periodic box may be used then to
35// XD_CONT engender turbulent inlet flow condition for the main domain.NL2 Note that ExtrudeBord in VEF generates 3 or
36// XD_CONT 14 tetrahedra from extruded prisms.
37
39{
40 return Interprete::printOn(os);
41}
42
44{
45 return Interprete::readOn(is);
46}
47
49{
50 Nom nom_dom_volumique;
51 Nom nom_front,nom_dom_surfacique;
52 DoubleVect vect_dir(3);
53 int nbpas = -1;
54
55 if(dimension!=3)
56 {
57 Cerr << "Interpreter "<<que_suis_je()<<" can be used only in 3 dimensions." <<finl;
58 exit();
59 }
60 Param param(que_suis_je());
61 param.ajouter("domaine_init",&nom_dom_volumique,Param::REQUIRED);// XD_ADD_P ref_domaine
62 // XD_CONT Initial domain with hexaedras or tetrahedras.
63 param.ajouter_arr_size_predefinie("direction",&vect_dir,Param::REQUIRED);// XD_ADD_P listf
64 // XD_CONT Directions for the extrusion.
65 param.ajouter("nb_tranches",&nbpas,Param::REQUIRED);// XD_ADD_P entier
66 // XD_CONT Number of elements in the extrusion direction.
67 param.ajouter("domaine_final",&nom_dom_surfacique,Param::REQUIRED);// XD_ADD_P chaine
68 // XD_CONT Extruded domain.
69 param.ajouter("nom_bord",&nom_front,Param::REQUIRED);// XD_ADD_P chaine
70 // XD_CONT Name of the boundary of the initial domain where extrusion will be applied.
71 param.ajouter_flag("hexa_old",&hexa_old);// XD_ADD_P rien
72 // XD_CONT Old algorithm for boundary extrusion from a hexahedral mesh.
73 param.ajouter_flag("Trois_Tetra",&Trois_Tetra);// XD_ADD_P rien
74 // XD_CONT To extrude in 3 tetrahedras instead of 14 tetrahedras.
75 param.ajouter_flag("Vingt_Tetra",&Vingt_Tetra);// XD_ADD_P rien
76 // XD_CONT To extrude in 20 tetrahedras instead of 14 tetrahedras.
77 param.ajouter("sans_passer_par_le2D",&en3D_);// XD_ADD_P entier
78 // XD_CONT Only for non-regression
80
81 associer_domaine(nom_dom_volumique);
82
83 const Domaine& dom=domaine();
84
85 if (dom.nb_som_elem()==8 && (hexa_old))
86 extruder_hexa_old(nom_front, nom_dom_surfacique, vect_dir, nbpas);
87 else if (dom.nb_som_elem()==4 || dom.nb_som_elem()==8)
88 extruder_bord(nom_front, nom_dom_surfacique, vect_dir, nbpas);
89
90 Domaine& dom_surfacique=ref_cast(Domaine, objet(nom_dom_surfacique));
91 Scatter::init_sequential_domain(dom_surfacique);
92 return is;
93}
94
95void ExtrudeBord::extruder_bord(Nom& nom_front, Nom& nom_dom_surfacique, DoubleVect& vect_dir, int nbpas)
96{
97 const Domaine& dom=domaine();
98
99 const Bord& front=dom.bord(nom_front);
100
101 Domaine& dom_surfacique=ref_cast(Domaine, objet(nom_dom_surfacique));
102
103 // Extract from the volume domain dom the boundary front and fill the dom_surfacique domain:
104 TroisDto2D tD2dD;
105 int& coupe=tD2dD.coupe();
106 coupe=0;
107 if (en3D_)
108 coupe=2;
109 tD2dD.extraire_2D(dom,dom_surfacique,front,nom_front,0);
110
111 double xa = tD2dD.getXa();
112 double ya = tD2dD.getYa();
113 double za = tD2dD.getZa();
114 double Ix = tD2dD.getIx();
115 double Iy = tD2dD.getIy();
116 double Iz = tD2dD.getIz();
117 double Jx = tD2dD.getJx();
118 double Jy = tD2dD.getJy();
119 double Jz = tD2dD.getJz();
120 double Kx = tD2dD.getKx();
121 double Ky = tD2dD.getKy();
122 double Kz = tD2dD.getKz();
123
124 if (!en3D_)
125 {
126 dimension=2;
127 }
128 else
129 {
130 Ix=1;
131 Iy=0;
132 Iz=0;
133 Jx=0;
134 Jy=1;
135 Jz=0;
136 Kx=0;
137 Ky=0;
138 Kz=1;
139
140 }
141
142 if (Trois_Tetra) // Evolution de la methode Extrude bord pour l'adapter a 3tetra
143 {
144 Extruder_en3 extr3;
145 extr3.setNbTranches(nbpas);
146 extr3.setDirection(vect_dir(0)*Ix+vect_dir(1)*Iy+vect_dir(2)*Iz,
147 vect_dir(0)*Jx+vect_dir(1)*Jy+vect_dir(2)*Jz,
148 vect_dir(0)*Kx+vect_dir(1)*Ky+vect_dir(2)*Kz);
149
150 IntVect num;
151 dom_surfacique.ajouter(dom_surfacique.coord_sommets(), num);
152 extr3.extruder(dom_surfacique,num);
153
154 if ((dom_surfacique.type_elem()->que_suis_je())== "Rectangle")
155 {
156 Cerr << "It is not possible to apply ExtrudeBord with 3Tetra option to : " << dom_surfacique.type_elem()->que_suis_je() << " mesh cells" << finl;
157 // exit();
158 }
159 }
160 else if (Vingt_Tetra)
161 {
162 Extruder_en20 extr;
163 extr.setNbTranches(nbpas);
164 extr.setDirection(vect_dir(0)*Ix+vect_dir(1)*Iy+vect_dir(2)*Iz,
165 vect_dir(0)*Jx+vect_dir(1)*Jy+vect_dir(2)*Jz,
166 vect_dir(0)*Kx+vect_dir(1)*Ky+vect_dir(2)*Kz);
167 extr.extruder(dom_surfacique);
168 }
169 else
170 {
171 Extruder extr;
172 extr.setNbTranches(nbpas);
173 extr.setDirection(vect_dir(0)*Ix+vect_dir(1)*Iy+vect_dir(2)*Iz,
174 vect_dir(0)*Jx+vect_dir(1)*Jy+vect_dir(2)*Jz,
175 vect_dir(0)*Kx+vect_dir(1)*Ky+vect_dir(2)*Kz);
176 extr.extruder(dom_surfacique);
177 }
178 if (en3D_)
179 {
180 // en 3D on ne tourne pas le bord
181 return;
182 }
183 // on remet le nouveau domaine 3D dans le repere du domaine 3D initial
184 dimension = 3;
185
186 Noms les_fcts(3);
187 les_fcts[0] = Nom(xa,"%.16e")+Nom("+x*(")+Nom(Ix,"%.16e")+Nom(")+y*(")+Nom(Jx,"%.16e")+Nom(")+z*(")+Nom(Kx,"%.16e")+Nom(")");
188 les_fcts[1] = Nom(ya,"%.16e")+Nom("+x*(")+Nom(Iy,"%.16e")+Nom(")+y*(")+Nom(Jy,"%.16e")+Nom(")+z*(")+Nom(Ky,"%.16e")+Nom(")");
189 les_fcts[2] = Nom(za,"%.16e")+Nom("+x*(")+Nom(Iz,"%.16e")+Nom(")+y*(")+Nom(Jz,"%.16e")+Nom(")+z*(")+Nom(Kz,"%.16e")+Nom(")");
190
191 Transformer transf;
192 transf.transformer(dom_surfacique,les_fcts);
193 // Pour que l'on ait plus de problemes de precision ensuite quand on manipule
194 // le domaine extrude, on impose les coordonnes de la frontiere nom_front du domaine
195 // initial sur les coordonnees de la frontiere devant du domaine extrude
196 // Il faut egalement recalculer proprement pour la frontiere derriere
197 const Faces& faces=dom.frontiere(dom.rang_frontiere(nom_front)).faces();
198 int nb_faces=faces.nb_faces();
199 int nb_som_faces=faces.nb_som_faces();
200
201 const Faces& faces2=dom_surfacique.frontiere(dom_surfacique.rang_frontiere("devant")).faces();
202 const Faces& faces3=dom_surfacique.frontiere(dom_surfacique.rang_frontiere("derriere")).faces();
203 for (int j=0; j<nb_faces; j++)
204 for (int k=0; k<nb_som_faces; k++)
205 {
206 int som = faces.sommet(j,k);
207 int som2 = faces2.sommet(j,k);
208 int som3 = faces3.sommet(j,k);
209 for (int i=0; i<3; i++)
210 {
211 dom_surfacique.coord(som2,i) = dom.coord(som,i);
212 dom_surfacique.coord(som3,i) = dom.coord(som,i) + vect_dir(i);
213 }
214 }
215 Cerr << "ExtrudeBord does not create any more PERIO boundary." << finl;
216 Cerr << "Use RegroupeBord if you want to create periodic boundary condition..." << finl;
217}
218
219void ExtrudeBord::extruder_hexa_old(Nom& nom_front, Nom& nom_dom_surfacique, DoubleVect& vect_dir, int nbpas)
220{
221
222 const Domaine& dom=domaine();
223
224 int nbfr=dom.nb_front_Cl();
225
226
227 Domaine& dom_surfacique=ref_cast(Domaine, objet(nom_dom_surfacique));
228
229 dom_surfacique.typer("Hexaedre");
230 DoubleTab& sommets2=dom_surfacique.les_sommets();
231 IntTab& les_elems2=dom_surfacique.les_elems();
232 int i;
233
234 for (int l=0; l<nbfr; l++)
235 {
236 const Frontiere& fr=dom.frontiere(l);
237 const Nom& nomfr=fr.le_nom();
238
239 if(nomfr==nom_front)
240 {
241 int nbfaces=fr.nb_faces();
242 const IntTab& som=fr.les_sommets_des_faces();
243 IntTab newsom(4*nbfaces);
244 IntTab compt(4*nbfaces);
245 newsom=-100;
246 compt=0;
247
248 int nbsombord,trouve;
249 nbsombord = 0;
250
251 // ******** Table de correspondance des sommets de bords : dom_volumique - dom_surfacique
252
253 for (i=0; i<nbfaces; i++)
254 for (int j=0; j<4; j++)
255 {
256 trouve = 0;
257 int sommet=som(i,j);
258
259 for (int k=0; k<nbsombord+1; k++)
260 {
261 if(sommet==newsom(k))
262 {
263 k=nbsombord+1;
264 trouve = 1;
265 break;
266 }
267 }
268
269 if (trouve==0)
270 {
271 newsom[nbsombord]=sommet;
272 nbsombord++;
273 }
274 }
275
276 newsom.resize(nbsombord);
277 compt.resize(nbsombord);
278 sommets2.resize((nbpas+1)*nbsombord,3);
279
280 // ******** Creation des sommets deduits par translation
281
282 for (int j=0; j<nbpas+1; j++)
283 for (i=0; i<nbsombord; i++)
284 {
285 sommets2(i+j*nbsombord,0)=dom.coord(newsom(i),0)+j*vect_dir(0)/nbpas;
286 sommets2(i+j*nbsombord,1)=dom.coord(newsom(i),1)+j*vect_dir(1)/nbpas;
287 sommets2(i+j*nbsombord,2)=dom.coord(newsom(i),2)+j*vect_dir(2)/nbpas;
288 }
289
290
291 // ******** Definition des tableaux de correspondance ELEM<->SOMMETS
292
293 les_elems2.resize(nbpas*nbfaces,8);
294
295 int sommet0,sommet1,sommet2,sommet3;
296 int newsom0=-1,newsom1=-1,newsom2=-1,newsom3=-1;
297
298 for (i=0; i<nbfaces; i++)
299 {
300 sommet0=som(i,0);
301 sommet1=som(i,1);
302 sommet2=som(i,2);
303 sommet3=som(i,3);
304
305
306 for(int j=0; j<nbsombord; j++)
307 {
308 if(newsom[j]==sommet0) newsom0=j;
309 if(newsom[j]==sommet1) newsom1=j;
310 if(newsom[j]==sommet2) newsom2=j;
311 if(newsom[j]==sommet3) newsom3=j;
312 }
313
314 for(int k=0; k<nbpas; k++)
315 {
316 les_elems2(i+k*nbfaces,0)=newsom0+k*nbsombord;
317 les_elems2(i+k*nbfaces,1)=newsom1+k*nbsombord;
318 les_elems2(i+k*nbfaces,2)=newsom2+k*nbsombord;
319 les_elems2(i+k*nbfaces,3)=newsom3+k*nbsombord;
320 les_elems2(i+k*nbfaces,4)=newsom0+(k+1)*nbsombord;
321 les_elems2(i+k*nbfaces,5)=newsom1+(k+1)*nbsombord;
322 les_elems2(i+k*nbfaces,6)=newsom2+(k+1)*nbsombord;
323 les_elems2(i+k*nbfaces,7)=newsom3+(k+1)*nbsombord;
324 }
325 }
326
327
328
329 // ******** Definition des frontieres periodiques
330
331
332 Bord& bordperio=dom_surfacique.faces_bord().add(Bord());
333 bordperio.nommer("PERIO");
334 bordperio.typer_faces("QUADRANGLE_3D");
335 bordperio.dimensionner(0);
336 IntTab faces_perio(2*nbfaces,4);
337
338 for (i=0; i<nbfaces; i++)
339 {
340 sommet0=som(i,0);
341 sommet1=som(i,1);
342 sommet2=som(i,2);
343 sommet3=som(i,3);
344
345
346 for(int j=0; j<nbsombord; j++)
347 {
348 if(newsom[j]==sommet0) newsom0=j;
349 if(newsom[j]==sommet1) newsom1=j;
350 if(newsom[j]==sommet2) newsom2=j;
351 if(newsom[j]==sommet3) newsom3=j;
352 }
353
354 faces_perio(i,0)=newsom0;
355 faces_perio(i,1)=newsom1;
356 faces_perio(i,2)=newsom2;
357 faces_perio(i,3)=newsom3;
358
359 faces_perio(i+nbfaces,0)=newsom0+nbpas*nbsombord;
360 faces_perio(i+nbfaces,1)=newsom1+nbpas*nbsombord;
361 faces_perio(i+nbfaces,2)=newsom2+nbpas*nbsombord;
362 faces_perio(i+nbfaces,3)=newsom3+nbpas*nbsombord;
363 }
364
365
366 bordperio.ajouter_faces(faces_perio);
367
368
369
370
371 // ******** Definition des frontieres parois
372
373
374 Bord& bordparoi=dom_surfacique.faces_bord().add(Bord());
375 bordparoi.nommer("PAROI");
376 bordparoi.typer_faces("QUADRANGLE_3D");
377 bordparoi.dimensionner(0);
378
379
380 int nbsombordparoi=0;
381
382 // ***** recherche des sommets appartenant au contour de la face de bord *****
383
384 for (i=0; i<nbfaces; i++)
385 for (int j=0; j<4; j++)
386 for (int k=0; k<nbsombord; k++)
387 if(som(i,j)==newsom(k)) compt(k)++; // nb de faces se rapportant a chacun des sommets
388
389 for (int k=0; k<nbsombord; k++)
390 if(compt(k)<3) nbsombordparoi++; // nb de sommets a extruder pour constituer les faces de parois
391
392 // PQ : 05/05/04 : ATTENTION : des sommets internes peuvant etre connectes qu'a
393 // 3 faces (cf. maillage en "O" d'un cylindre)
394 // -> on se place donc dans le cas ou les sommets de bords ne sont connectes qu'a
395 // 2 elements (excluant de fait les bords types VDF en marche d'escalier).
396
397
398 // **** Extension des aretes pour former les faces de la frontiere paroi
399
400 IntTab faces_paroi(nbsombordparoi*nbpas,4);
401 int ip=0;
402
403 for (i=0; i<nbfaces; i++)
404 {
405 sommet0=som(i,0);
406 sommet1=som(i,1);
407 sommet2=som(i,2);
408 sommet3=som(i,3);
409
410 int compt0=4,compt1=4,compt2=4,compt3=4;
411
412 for(int j=0; j<nbsombord; j++)
413 {
414 if(newsom[j]==sommet0)
415 {
416 newsom0=j;
417 compt0=compt(j);
418 }
419 if(newsom[j]==sommet1)
420 {
421 newsom1=j;
422 compt1=compt(j);
423 }
424 if(newsom[j]==sommet2)
425 {
426 newsom2=j;
427 compt2=compt(j);
428 }
429 if(newsom[j]==sommet3)
430 {
431 newsom3=j;
432 compt3=compt(j);
433 }
434 }
435
436
437 if( (compt0<3) && (compt1<3) ) // arete[0-1]
438 {
439 for(int k=0; k<nbpas; k++)
440 {
441 faces_paroi(ip+k,0)=newsom0+k*nbsombord;
442 faces_paroi(ip+k,1)=newsom0+(k+1)*nbsombord;
443 faces_paroi(ip+k,2)=newsom1+k*nbsombord;
444 faces_paroi(ip+k,3)=newsom1+(k+1)*nbsombord;
445 }
446 ip+=nbpas;
447 }
448
449
450 if( (compt1<3) && (compt3<3) ) // arete[1-3]
451 {
452 for(int k=0; k<nbpas; k++)
453 {
454 faces_paroi(ip+k,0)=newsom1+k*nbsombord;
455 faces_paroi(ip+k,1)=newsom1+(k+1)*nbsombord;
456 faces_paroi(ip+k,2)=newsom3+k*nbsombord;
457 faces_paroi(ip+k,3)=newsom3+(k+1)*nbsombord;
458 }
459 ip+=nbpas;
460 }
461
462
463 if( (compt3<3) && (compt2<3) ) // arete[3-2]
464 {
465 for(int k=0; k<nbpas; k++)
466 {
467 faces_paroi(ip+k,0)=newsom3+k*nbsombord;
468 faces_paroi(ip+k,1)=newsom3+(k+1)*nbsombord;
469 faces_paroi(ip+k,2)=newsom2+k*nbsombord;
470 faces_paroi(ip+k,3)=newsom2+(k+1)*nbsombord;
471 }
472 ip+=nbpas;
473 }
474
475
476 if( (compt2<3) && (compt0<3) ) // arete[2-0]
477 {
478 for(int k=0; k<nbpas; k++)
479 {
480 faces_paroi(ip+k,0)=newsom2+k*nbsombord;
481 faces_paroi(ip+k,1)=newsom2+(k+1)*nbsombord;
482 faces_paroi(ip+k,2)=newsom0+k*nbsombord;
483 faces_paroi(ip+k,3)=newsom0+(k+1)*nbsombord;
484 }
485 ip+=nbpas;
486 }
487 }
488
489 bordparoi.ajouter_faces(faces_paroi);
490
491 }//fin de la condition sur la frontiere a extruder
492 }//fin de parcours de toutes les frontieres
493 Nom mfile=nom_dom_surfacique;
494 mfile+=".geom";
495
496 {
497 SFichier file(mfile);
498 file<<dom_surfacique;
499 file.close();
500 }
501 {
502 EFichier file(mfile);
503 file>>dom_surfacique;
504 file.close();
505 }
506}
int nb_front_Cl() const
Definition Domaine.h:236
int nb_som_elem() const
Renvoie le nombre de sommets des elements geometriques constituants le domaine.
Definition Domaine.h:474
DoubleTab_t & les_sommets()
Definition Domaine.h:113
int rang_frontiere(const Nom &) const
Definition Domaine.cpp:1052
Bords_t & faces_bord()
Definition Domaine.h:198
const Frontiere_t & frontiere(int i) const
Definition Domaine.h:539
IntTab_t & les_elems()
Definition Domaine.h:129
Bord_t & bord(int i)
Definition Domaine.h:193
void typer(const Nom &)
Type les elements du domaine avec le nom passe en parametre.
Definition Domaine.h:457
const DoubleTab_t & coord_sommets() const
Definition Domaine.h:112
double coord(int_t i, int j) const
Definition Domaine.h:110
void ajouter(const DoubleTab_t &soms)
Ajoute des noeuds (ou sommets) au domaine (sans verifier les doublons).
Definition Domaine.cpp:909
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
class ExtrudeBord
Definition ExtrudeBord.h:45
Entree & interpreter_(Entree &) override
void setNbTranches(int n)
Definition Extruder.h:60
void setDirection(double lx, double ly, double lz)
Definition Extruder.h:54
void extruder(Domaine_t &)
Triangule tous les element d'un domaine: transforme les elements goemetriques du domaine en triangles...
Definition Extruder.cpp:87
void setNbTranches(int n)
void setDirection(double lx, double ly, double lz)
void extruder(Domaine &)
Triangule tous les element d'un domaine: transforme les elements goemetriques du domaine en triangles...
void setNbTranches(int n)
void setDirection(double lx, double ly, double lz)
void extruder(Domaine &, const IntVect &)
Extrusion d'un domaine surfacique.
int_t nb_faces() const
Definition Faces.h:66
int_t sommet(int_t, int) const
Renvoie le numero du j-ieme sommet de la i-ieme face.
Definition Faces.h:130
int nb_som_faces() const
Renvoie le nombre de sommet par face.
Definition Faces.h:149
void ajouter_faces(const IntTab_t &)
Ajoute une (ou plusieurs) face(s) a la frontiere, la (les) face(s) est (sont) specifiee(s) par un tab...
Definition Frontiere.cpp:86
void nommer(const Nom &) override
Donne un nom a la frontiere.
Definition Frontiere.cpp:74
void dimensionner(int_t i)
Dimensionne la frontiere, i.e. fixe son nombre de faces.
Definition Frontiere.h:61
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
Definition Frontiere.h:49
void typer_faces(const Motcle &)
Type les faces de la frontiere.
Definition Frontiere.cpp:96
int_t nb_faces() const
Renvoie le nombre de faces de la frontiere.
Definition Frontiere.h:59
IntTab_t & les_sommets_des_faces()
Renvoie les sommets des faces de la frontiere.
const Faces_t & faces() const
Definition Frontiere.h:54
static Objet_U & objet(const Nom &)
Voir Interprete_bloc::objet_global() BM: la classe Interprete n'est pas le meilleur endroit pour cett...
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
friend class Entree
Definition Objet_U.h:76
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
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
void ajouter_flag(const char *keyword, const bool *value)
Register a boolean flag whose mere presence switches it to true.
Definition Param.cpp:474
void ajouter_arr_size_predefinie(const char *keyword, const ArrOfInt *value, Param::Nature nat=Param::OPTIONAL)
Register an ArrOfInt whose size has already been fixed.
Definition Param.cpp:411
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
Definition Param.cpp:364
@ REQUIRED
Definition Param.h:115
int lire_avec_accolades_depuis(Entree &is)
Parse the parameter block { ... } from is.
Definition Param.cpp:32
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
static void init_sequential_domain(Domaine_32_64< _SIZE_ > &dom)
Create parallel descriptors for the vertex and element arrays of the domain (necessary because Scatte...
Definition Scatter.cpp:2742
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
void transformer(Domaine_t &, Noms &)
void extraire_2D(const Domaine_t &, Domaine_t &, const Bord_t &, const Nom &, int)