TrioCFD 1.9.9_beta
TrioCFD documentation
Loading...
Searching...
No Matches
ExtrudeParoi.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 <Connectivite_som_elem.h>
17#include <Static_Int_Lists.h>
18#include <Faces_builder.h>
19#include <ExtrudeParoi.h>
20#include <Array_tools.h>
21#include <TRUSTList.h>
22#include <TRUSTTab.h>
23#include <Domaine.h>
24#include <Scatter.h>
25#include <Param.h>
26
27Implemente_instanciable_sans_constructeur(ExtrudeParoi,"ExtrudeParoi",Interprete_geometrique_base);
28// XD extrudeparoi interprete extrudeparoi BRACE Keyword dedicated in 3D (VEF) to create prismatic layer at wall. Each
29// XD_CONT prism is cut into 3 tetraedra.
30
32{
34 nb_couche=1;
35 epaisseur.resize_array(1);
36 epaisseur[0]=0.5;
37}
38
39/*! @brief Simple call to: Interprete::printOn(Sortie&)
40 *
41 * @param (Sortie& os) an output stream
42 * @return (Sortie&) the modified output stream
43 */
45{
46 return Interprete::printOn(os);
47}
48
49
50void calcul_normal2(const ArrOfDouble& pt0, const ArrOfDouble& pt1, const ArrOfDouble& pt2, ArrOfDouble& normal)
51{
52 normal[0]=(pt1[1]-pt0[1])*(pt2[2]-pt0[2])-((pt2[1]-pt0[1])*(pt1[2]-pt0[2]));
53 normal[1]=(pt1[2]-pt0[2])*(pt2[0]-pt0[0])-((pt2[2]-pt0[2])*(pt1[0]-pt0[0]));
54 normal[2]=(pt1[0]-pt0[0])*(pt2[1]-pt0[1])-((pt2[0]-pt0[0])*(pt1[1]-pt0[1]));
55}
56
57void calcul_normal_norme2(const ArrOfDouble& pt0, const ArrOfDouble& pt1, const ArrOfDouble& pt2, ArrOfDouble& normal)
58{
59 calcul_normal2(pt0, pt1, pt2, normal);
60 normal/=norme_array(normal);
61}
62
63
64void calcul_tab_norme(DoubleTab& tab)
65{
66 for(int i=0; i<tab.dimension(0); i++)
67 {
68 double norm = sqrt(tab(i,0)*tab(i,0)+tab(i,1)*tab(i,1)+tab(i,2)*tab(i,2));
69 norm += DMINFLOAT;
70 tab(i,0)/=norm;
71 tab(i,1)/=norm;
72 tab(i,2)/=norm;
73 }
74}
75
76
77/*! @brief Simple call to: Interprete::readOn(Entree&)
78 *
79 * @param (Entree& is) an input stream
80 * @return (Entree&) the modified input stream
81 */
83{
84 return Interprete::readOn(is);
85}
86
87
88/*! @brief Main function of the ExtrudeParoi interpreter. Creates a layer of wall prisms
89 *
90 * (prisms split into 3 tetrahedra)
91 *
92 * @param (Entree& is) an input stream
93 * @return (Entree&) the input stream
94 * @throws the object to mesh is not of type Domaine
95 */
97{
98 Nom nom_dom;
99 Param param(que_suis_je());
100 param.ajouter("domaine",&nom_dom,Param::REQUIRED); // XD_ADD_P ref_domaine
101 // XD_CONT Name of the domain.
102 param.ajouter("nom_bord",&nom_front,Param::REQUIRED); // XD_ADD_P chaine
103 // XD_CONT Name of the (no-slip) boundary for creation of prismatic layers.
104 param.ajouter("epaisseur",&epaisseur); // XD_ADD_P list
105 // XD_CONT n r1 r2 .... rn : (relative or absolute) width for each layer.
106 param.ajouter_flag("critere_absolu",&type); // XD_ADD_P rien
107 // XD_CONT use absolute width for each layer instead of relative.
108 param.ajouter("projection_normale_bord",&projection_normale_bord); // XD_ADD_P rien
109 // XD_CONT keyword to project layers on the same plane that contiguous boundaries. defaut values are :
110 // XD_CONT epaisseur_relative 1 0.5 projection_normale_bord 1
112 array_trier_retirer_doublons(epaisseur);
113 nb_couche=epaisseur.size_array();
114 associer_domaine(nom_dom);
116 extrude(domaine());
118 return is;
119}
120
121/*! @brief
122 *
123 * @param (Domaine& domaine) the domain whose elements are to be refined
124 */
125void ExtrudeParoi::extrude(Domaine& dom)
126{
127 if (dom.type_elem()->que_suis_je() == "Tetraedre")
128 {
129 Cerr << "ExtrudeParoi ..... " << finl;
130 }
131 else
132 {
133 Cerr << "The " << dom.type_elem()->que_suis_je() <<"s are not treated with ExtrudeParoi"<<finl;
134 exit();
135 }
136
137 IntTab& les_elems = dom.les_elems();
138 int oldsz = les_elems.dimension(0);
139 int nbs = dom.nb_som();
140 int oldnbsom = dom.nb_som();
141
142 Faces lesfaces;
143 //domaine.creer_faces(les_faces);
144 {
145 // block to be factored out with Domaine_VF.cpp:
146 Type_Face type_face = dom.type_elem()->type_face(0);
147 lesfaces.typer(type_face);
148 lesfaces.associer_domaine(dom);
149
150 Static_Int_Lists connectivite_som_elem;
151 const int nb_sommets_tot = dom.nb_som_tot();
152 const IntTab& elements = dom.les_elems();
153
154 construire_connectivite_som_elem(nb_sommets_tot,
155 elements,
156 connectivite_som_elem,
157 1 /* include virtual elements */);
158
159 Faces_builder faces_builder;
160 IntTab elem_faces; // Array that will not be needed
161 faces_builder.creer_faces_reeles(dom,
162 connectivite_som_elem,
163 lesfaces,
164 elem_faces);
165 }
166 ArrOfDouble ep_abs(epaisseur);
167 IntTab& faces_voisins = lesfaces.voisins();
168 DoubleTab& coord=dom.les_sommets();
169
170 IntList List_som;
171 IntTab som_arete;
172
173 DoubleTab normale_som(nbs,3);
174 normale_som=0.;
175 DoubleVect dmin_som(nbs);
176 dmin_som=1e6;
177
178 DoubleTab new_soms; // the new vertices
179 IntTab new_elems; // the new elements
180
181
182 for (int l=0; l<dom.nb_front_Cl(); l++)
183 {
184 const Frontiere& fr=dom.frontiere(l);
185 const Nom& nomfr=fr.le_nom();
186
187 if(nomfr==nom_front)
188 {
189 int nbfaces=fr.nb_faces();
190 int ndeb = fr.num_premiere_face();
191 const IntTab& sommet=fr.les_sommets_des_faces();
192
193
194 new_elems.resize(oldsz+nbfaces*3*nb_couche,4);
195 new_elems.inject_array(les_elems);
196 som_arete.resize(3*nbfaces,2);
197
198
199 ArrOfInt som_elem(4); // vertex attached to the boundary element
200 ArrOfInt som_face(3); // vertex of the boundary face
201
202 ArrOfDouble pt0(3),pt1(3),pt2(3);
203 ArrOfDouble normale(3),vect_int(3);
204
205
206 // compute the normal carried by each vertex of the boundary
207 ////////////////////////////////////////////////////////////////
208
209 int compt=0;
210
211 for (int i=0; i<nbfaces; i++)
212 {
213 int elem=faces_voisins(i+ndeb,0);
214 if (elem==-1) elem=faces_voisins(i+ndeb,1);
215
216 for(int j=0; j<4; j++) som_elem[j]=les_elems(elem,j);
217 for(int j=0; j<3; j++)
218 {
219 som_face[j]=sommet(i,j);
220 List_som.add_if_not(som_face[j]) ;
221 }
222
223 //sort vertices in ascending order
224
225 int stot=som_face[0]+som_face[1]+som_face[2];
226
227 int som0=min_array(som_face);
228 int som2=max_array(som_face);
229 int som1=stot-som0-som2;
230
231
232 som_arete(compt,0)=som0;
233 som_arete(compt,1)=som1;
234 compt++;
235
236 som_arete(compt,0)=som0;
237 som_arete(compt,1)=som2;
238 compt++;
239
240 som_arete(compt,0)=som1;
241 som_arete(compt,1)=som2;
242 compt++;
243
244 int som_ext=0;
245
246 for(int j=0; j<4; j++)
247 {
248 int ok=0;
249 for(int k=0; k<3; k++)
250 if(som_elem[j]==som_face[k]) ok=1;
251 if(ok==0)
252 {
253 som_ext=som_elem[j] ;
254 break;
255 }
256 }
257
258 for(int j=0; j<3; j++)
259 {
260 pt0[j]=coord(som_face[0],j);
261 pt1[j]=coord(som_face[1],j);
262 pt2[j]=coord(som_face[2],j);
263 vect_int[j]=coord(som_ext,j)-pt0[j];
264 }
265
266 calcul_normal_norme2(pt0,pt1,pt2,normale);
267 double dist_paroi = dotproduct_array(normale,vect_int);
268 if (dist_paroi<0.) normale *=-1.;
269
270 for(int k=0; k<3; k++)
271 {
272 int som=som_face[k];
273 dmin_som(som) = std::min(dmin_som(som),std::fabs(dist_paroi));
274 for(int j=0; j<3; j++) normale_som(som,j) += normale[j];
275 }
276 }
277
278 }//if(nomfr==nom_front)
279 }//for (l<domaine.nb_front_Cl())
280
281 calcul_tab_norme(normale_som);
282
283 Cerr << "minimum distance node-wall : "<< dmin_som.mp_min_vect()<< finl;
284 if(type) Cerr << "thickness of the layer "<< ep_abs[nb_couche-1] << finl;
285
286 if(type && (dmin_som.mp_min_vect()<=ep_abs[nb_couche-1]))
287 {
288 Cerr << "Error !! The thickness of the layer is greater than the minimum distance node-wall" << finl;
289 exit();
290 }
291
292 // Search for edges of nom_front shared with other boundaries
293 //////////////////////////////////////////////////////////////////////
294
295 tri_lexicographique_tableau(som_arete);
296 IntTab som_arete_bord(som_arete.dimension(0),3);
297
298 int nba=som_arete.dimension(0);
299 int compt=0;
300
301 for(int i=1; i<nba; i++)
302 {
303 if( (som_arete(i,0)==som_arete(i-1,0)) && (som_arete(i,1)==som_arete(i-1,1)) ) i++;
304 else
305 {
306 som_arete_bord(compt,0)=som_arete(i-1,0);
307 som_arete_bord(compt,1)=som_arete(i-1,1);
308 compt++;
309
310 if(i==nba)
311 {
312 som_arete_bord(compt,0)=som_arete(i,0);
313 som_arete_bord(compt,1)=som_arete(i,1);
314 compt++;
315 }
316 }
317 }
318
319 int nba_bord=compt;
320
321 som_arete_bord.resize(nba_bord,3);
322
323 ArrOfInt corresp_bord(nba_bord);
324 corresp_bord=-1;
325
326 for (int num_front=0; num_front<dom.nb_front_Cl(); num_front++)
327 {
328 const Frontiere& fr=dom.frontiere(num_front);
329 const Nom& nomfr=fr.le_nom();
330
331 if(nomfr!=nom_front)
332 {
333 int nbfaces=fr.nb_faces();
334 const IntTab& sommet=fr.les_sommets_des_faces();
335
336 ArrOfInt som_face(3); // vertices of the boundary face
337
338 for (int i=0; i<nbfaces; i++)
339 {
340 for(int j=0; j<3; j++) som_face[j]=sommet(i,j);
341
342 int stot=som_face[0]+som_face[1]+som_face[2];
343
344 int som0=min_array(som_face);
345 int som2=max_array(som_face);
346 int som1=stot-som0-som2;
347
348 for(int j=0; j<nba_bord; j++)
349 {
350 if((som_arete_bord(j,0)==som0) && (som_arete_bord(j,1)==som1))
351 {
352 som_arete_bord(j,2)=som2;
353 corresp_bord[j]=num_front;
354 break;
355 }
356 if((som_arete_bord(j,0)==som0) && (som_arete_bord(j,1)==som2))
357 {
358 som_arete_bord(j,2)=som1;
359 corresp_bord[j]=num_front;
360 break;
361 }
362 if((som_arete_bord(j,0)==som1) && (som_arete_bord(j,1)==som2))
363 {
364 som_arete_bord(j,2)=som0;
365 corresp_bord[j]=num_front;
366 break;
367 }
368 }
369 }
370 }
371 }
372
373 if(min_array(corresp_bord)==-1)
374 {
375 Cerr << "Problem with the boundary edges !!" << finl;
376 exit();
377 }
378
379
380 // projection of the boundary normal onto the plane of the neighboring boundary
381 ////////////////////////////////////////////////////////////////////////////////
382
384 {
385 ArrOfDouble pt1(3),pt2(3),pt3(3);
386 ArrOfDouble n1(3),n2(3),n_proj(3);
387
388 for(int i=0; i<nba_bord; i++)
389 {
390 int s1 = som_arete_bord(i,0);
391 int s2 = som_arete_bord(i,1);
392 int s3 = som_arete_bord(i,2);
393
394 for(int j=0; j<3; j++)
395 {
396 n1[j]=normale_som(s1,j) ;
397 n2[j]=normale_som(s2,j) ;
398
399 pt1[j]=coord(s1,j);
400 pt2[j]=coord(s2,j);
401 pt3[j]=coord(s3,j);
402 }
403
404 calcul_normal_norme2(pt1,pt2,pt3,n_proj);
405 double ori = dotproduct_array(n1,n_proj);
406 if (ori<0.) n_proj *=-1.;
407
408 double psc1=dotproduct_array(n1,n_proj);
409 double psc2=dotproduct_array(n2,n_proj);
410
411 for(int j=0; j<3; j++)
412 {
413 normale_som(s1,j) -= psc1*n_proj[j];
414 normale_som(s2,j) -= psc2*n_proj[j];
415 }
416 }
417 }
418
419 // creation of the prismatic layer vertices
420 ////////////////////////////////////////////////
421
422 int nb_som = List_som.size();
423 int newnbsom = oldnbsom+nb_couche*nb_som;
424
425 new_soms.resize(newnbsom,3);
426 new_soms.inject_array(coord);
427
428 for (int i=0; i<nb_som; i++)
429 {
430 int som=List_som[i];
431
432 if(!type) // convert relative thickness to absolute thickness
433 {
434 for(int j=0; j<nb_couche; j++) ep_abs[j]=epaisseur[j]*dmin_som(som);
435 }
436
437 for(int j=0; j<3; j++)
438 {
439 new_soms(oldnbsom+i,j) = new_soms(som,j); // creation of new vertices attached to the wall
440
441 if(nb_couche>1) // creation of new vertices attached to successive layers
442 for(int k=0; k<nb_couche-1; k++)
443 new_soms(oldnbsom+(k+1)*nb_som+i,j) = new_soms(som,j)+ep_abs[k]*normale_som(som,j);
444 new_soms(som,j) += ep_abs[nb_couche-1]*normale_som(som,j); // translation of old vertices
445 }
446 }
447
448 // creation of the prismatic layer elements
449 /////////////////////////////////////////////////
450
451 IntTab som_front;
452
453 for (int l=0; l<dom.nb_front_Cl(); l++)
454 {
455 const Frontiere& fr=dom.frontiere(l);
456 const Nom& nomfr=fr.le_nom();
457
458 if(nomfr==nom_front)
459 {
460 int nbfaces=fr.nb_faces();
461 const IntTab& sommet=fr.les_sommets_des_faces();
462
463 som_front.resize(nbfaces,3);
464
465 int cpt=0;
466
467 for (int i=0; i<nbfaces; i++)
468 {
469 int s1=sommet(i,0);
470 int s2=sommet(i,1);
471 int s3=sommet(i,2);
472
473 int stot=s1+s2+s3;
474
475 int i1=std::min(std::min(s1,s2),s3);
476 int i3=std::max(std::max(s1,s2),s3);
477 int i2=stot-i1-i3;
478
479 int i4=oldnbsom+List_som.rang(i1);
480 int i5=oldnbsom+List_som.rang(i2);
481 int i6=oldnbsom+List_som.rang(i3);
482
483 som_front(i,0)=i4;
484 som_front(i,1)=i5;
485 som_front(i,2)=i6;
486
487 for(int k=0; k<nb_couche; k++)
488 {
489 // upper vertices of the layer
490
491 int ii1=i4+(k+1)*nb_som;
492 int ii2=i5+(k+1)*nb_som;
493 int ii3=i6+(k+1)*nb_som;
494
495 if(k==(nb_couche-1))
496 {
497 ii1=i1;
498 ii2=i2;
499 ii3=i3;
500 }
501
502 // lower vertices of the layer
503
504 int ii4=i4+k*nb_som;
505 int ii5=i5+k*nb_som;
506 int ii6=i6+k*nb_som;
507
508
509 // vertex-element connectivity inspired by Extruder_en3
510
511 new_elems(oldsz+cpt,0) = ii1;
512 new_elems(oldsz+cpt,1) = ii2;
513 new_elems(oldsz+cpt,2) = ii3;
514 new_elems(oldsz+cpt,3) = ii6;
515 cpt++;
516
517 new_elems(oldsz+cpt,0) = ii1;
518 new_elems(oldsz+cpt,1) = ii2;
519 new_elems(oldsz+cpt,2) = ii5;
520 new_elems(oldsz+cpt,3) = ii6;
521 cpt++;
522
523 new_elems(oldsz+cpt,0) = ii1;
524 new_elems(oldsz+cpt,1) = ii4;
525 new_elems(oldsz+cpt,2) = ii5;
526 new_elems(oldsz+cpt,3) = ii6;
527 cpt++;
528
529 mettre_a_jour_sous_domaine(dom,i,oldsz,0);
530 }
531 }
532 }//if(nomfr==nom_front)
533 }//for (l<domaine.nb_front_Cl())
534
535
536 coord.reset();
537 dom.ajouter(new_soms);
538 les_elems.ref(new_elems);
539
540 // Reconstruction of the octree
541 dom.invalide_octree();
542 dom.typer("Tetraedre");
543
544 Cerr << " Reconstruction of the Octree" << finl;
545 dom.construit_octree();
546 Cerr << " Octree rebuilt" << finl;
547
548 {
549 Cerr << "Reconstruction of the boundaries" << finl;
550 int num_front=0;
551 for (auto& itr : dom.faces_bord())
552 {
553 Faces& lesfacesbord=itr.faces();
554 lesfacesbord.typer(Type_Face::triangle_3D);
555 IntTab& sommets=lesfacesbord.les_sommets();
556 if(itr.le_nom()==nom_front)
557 {
558 sommets.ref(som_front);
559 }
560 else
561 {
562 IntTab som_front2(sommets);
563
564 int nbf =lesfacesbord.nb_faces();
565 int nbf2=0;
566
567 for (int i=0; i<nba_bord; i++)
568 if(corresp_bord[i]==num_front) nbf2++;
569
570 som_front2.resize(nbf+2*nb_couche*nbf2,3);
571
572 int compt2=nbf;
573
574 for (int i=0; i<nba_bord; i++)
575 if(corresp_bord[i]==num_front)
576 {
577 int s1=som_arete_bord(i,0);
578 int s2=som_arete_bord(i,1);
579
580 int s1_new=oldnbsom+List_som.rang(s1);
581 int s2_new=oldnbsom+List_som.rang(s2);
582
583 for(int k=0; k<nb_couche; k++)
584 {
585 // upper vertices of the layer
586
587 int s1_sup=s1_new+(k+1)*nb_som;
588 int s2_sup=s2_new+(k+1)*nb_som;
589
590 if(k==(nb_couche-1))
591 {
592 s1_sup=s1;
593 s2_sup=s2;
594 }
595
596 // lower vertices of the layer
597
598 int s1_inf=s1_new+k*nb_som;
599 int s2_inf=s2_new+k*nb_som;
600
601
602 som_front2(compt2,0)=s1_sup;
603 som_front2(compt2,1)=s2_sup;
604 som_front2(compt2,2)=s2_inf;
605 compt2++;
606
607 som_front2(compt2,0)=s1_sup;
608 som_front2(compt2,1)=s1_inf;
609 som_front2(compt2,2)=s2_inf;
610 compt2++;
611 }
612 }
613
614 sommets.ref(som_front2);
615 }
616 num_front++;
617 }
618 }
619
620}
621
int nb_front_Cl() const
Definition Domaine.h:236
const OctreeRoot_t & construit_octree() const
Definition Domaine.cpp:816
DoubleTab_t & les_sommets()
Definition Domaine.h:113
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
void invalide_octree()
Definition Domaine.cpp:809
void typer(const Nom &)
Sets the element type of the domain using the name passed as parameter.
Definition Domaine.h:457
int_t nb_som_tot() const
Returns the total number of vertices of the domain i.e. the number of real and virtual vertices on th...
Definition Domaine.h:123
int_t nb_som() const
Returns the number of vertices of the domain.
Definition Domaine.h:121
void ajouter(const DoubleTab_t &soms)
Adds nodes (or vertices) to the domain (without checking for duplicates).
Definition Domaine.cpp:908
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
class ExtrudeParoi This class is an interpreter used to read and execute
int projection_normale_bord
Entree & interpreter_(Entree &) override
Main function of the ExtrudeParoi interpreter. Creates a layer of wall prisms.
void extrude(Domaine &)
ArrOfDouble epaisseur
void typer(const Motcle &)
Sets the type of the faces.
Definition Faces.cpp:382
void associer_domaine(const Domaine_t &z)
Definition Faces.h:94
IntTab_t & voisins()
Returns the array of neighbors (of the faces).
Definition Faces.h:89
int_t nb_faces() const
Definition Faces.h:66
const IntTab_t & les_sommets() const
Returns the array of vertices of all faces.
Definition Faces.h:74
void creer_faces_reeles(Domaine_t &domaine, const Static_Int_Lists_t &connect_som_elem, Faces_t &les_faces, IntTab_t &elem_faces)
From the description of the domain elements and boundaries (borders, connections, face groups,...
int_t num_premiere_face() const
Definition Frontiere.h:67
const Nom & le_nom() const override
Returns the name of the Objet_U. Virtual method to override: returns "neant" in this implementation.
Definition Frontiere.h:49
int_t nb_faces() const
Returns the number of faces of the boundary.
Definition Frontiere.h:59
IntTab_t & les_sommets_des_faces()
Returns the vertices of the boundary faces.
void mettre_a_jour_sous_domaine(Domaine_t &domaine, int_t &elem, int_t num_premier_elem, int_t nb_elem) const
class Nom: a character string for naming TRUST objects.
Definition Nom.h:31
friend class Entree
Definition Objet_U.h:71
const Nom & que_suis_je() const
Returns the string identifying the class.
Definition Objet_U.cpp:104
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
Definition Objet_U.cpp:289
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
Definition Objet_U.cpp:278
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(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)
Exit routine for TRUST within a Kokkos region.
Definition Process.cpp:466
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:2739
static void uninit_sequential_domain(Domaine_32_64< _SIZE_ > &dom)
Method used by interpreters that modify the domain (sequential), destroys the descriptors of vertices...
Definition Scatter.cpp:2754
Base class for output streams.
Definition Sortie.h:52
TRUSTArray & inject_array(const TRUSTArray &source, _SIZE_ nb_elements=-1, _SIZE_ first_element_dest=0, _SIZE_ first_element_source=0)
int rang(_TYPE_) const
renvoie le rang d'un element dans la liste si un element apparait plusieurs fois, renvoie le rang du ...
TRUSTList & add_if_not(_TYPE_)
Ajout d'un element a la liste ssi il n'existe pas deja.
int size() const
Definition TRUSTList.h:68
virtual void ref(const TRUSTTab &)
Definition TRUSTTab.tpp:308
void reset() override
Definition TRUSTTab.tpp:362
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTTab.tpp:469
_SIZE_ dimension(int d) const
Definition TRUSTTab.tpp:133
_TYPE_ mp_min_vect(Mp_vect_options opt=VECT_REAL_ITEMS) const
Definition TRUSTVect.h:159