TRUST 1.9.8
HPC thermohydraulic platform
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 appel a: Interprete::printOn(Sortie&)
40 *
41 * @param (Sortie& os) un flot de sortie
42 * @return (Sortie&) le flot de sortie modifie
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 appel a: Interprete::readOn(Entree&)
78 *
79 * @param (Entree& is) un flot d'entree
80 * @return (Entree&) le flot d'entree modifie
81 */
83{
84 return Interprete::readOn(is);
85}
86
87
88/*! @brief Fonction principale de l'interprete ExtrudeParoi Creation d'une couche de prismes en paroi
89 *
90 * (prismes tetraedrises en 3)
91 *
92 * @param (Entree& is) un flot d'entree
93 * @return (Entree&) le flot d'entree
94 * @throws l'objet a mailler n'est pas du 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) le domaine dont on veut raffiner les elements
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 // bloc a factoriser avec 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; // Tableau dont on aura pas besoin
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; // les nouveaux sommets
179 IntTab new_elems; // les nouveaux 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); // sommet rattache a l'element frontiere
200 ArrOfInt som_face(3); // sommet de la face frontiere
201
202 ArrOfDouble pt0(3),pt1(3),pt2(3);
203 ArrOfDouble normale(3),vect_int(3);
204
205
206 // calcul de la normale portee par chaque sommet de la frontiere
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 //rangt par ordre croissant des sommets
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 // Recherche des aretes de nom_front partagee avec d'autres frontieres
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); // sommets de la face frontiere
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 de la normale de bord dans le plan de la frontiere voisine de bord
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 des sommets de la couche prismatique
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) // traduction de l'epaisseur relative en epaisseur absolue
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 des nouveaux sommets rattaches a la paroi
440
441 if(nb_couche>1) // creation des nouveaux sommets rattaches aux couches successives
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 des anciens sommets
445 }
446 }
447
448 // creation des elements de la couche prismatique
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 // sommets sup de la couche
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 // sommets inf de la couche
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 // connectivite sommets-element inspiree de 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 de l'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 // sommets sup de la couche
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 // sommets inf de la couche
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:817
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:810
void typer(const Nom &)
Type les elements du domaine avec le nom passe en parametre.
Definition Domaine.h:457
int_t nb_som_tot() const
Renvoie le nombre total de sommets du domaine i.e. le nombre de sommets reels et virtuels sur le proc...
Definition Domaine.h:123
int_t nb_som() const
Renvoie le nombre de sommets du domaine.
Definition Domaine.h:121
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
Classe ExtrudeParoi Cette classe est un interprete qui sert a lire et executer.
int projection_normale_bord
Entree & interpreter_(Entree &) override
Fonction principale de l'interprete ExtrudeParoi Creation d'une couche de prismes en paroi.
void extrude(Domaine &)
ArrOfDouble epaisseur
void typer(const Motcle &)
Type les faces.
Definition Faces.cpp:390
void associer_domaine(const Domaine_t &z)
Definition Faces.h:94
IntTab_t & voisins()
Renvoie le tableau des voisins (des faces).
Definition Faces.h:89
int_t nb_faces() const
Definition Faces.h:66
const IntTab_t & les_sommets() const
Renvoie le tableau des sommets de toutes les 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)
A partir de la description des elements du domaine et des frontieres (bords, raccords,...
int_t num_premiere_face() const
Definition Frontiere.h:67
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
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.
void mettre_a_jour_sous_domaine(Domaine_t &domaine, int_t &elem, int_t num_premier_elem, int_t nb_elem) const
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
friend class Entree
Definition Objet_U.h:76
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(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
static void uninit_sequential_domain(Domaine_32_64< _SIZE_ > &dom)
methode utilisee par les interpretes qui modifient le domaine (sequentiel), detruit les descripteurs ...
Definition Scatter.cpp:2757
Classe de base des flux de sortie.
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