TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Extruder_en20.cpp
1/****************************************************************************
2* Copyright (c) 2024, 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 <Extruder_en20.h>
19#include <Faces_builder.h>
20#include <Domaine.h>
21#include <Scatter.h>
22#include <Param.h>
23
24Implemente_instanciable_sans_constructeur(Extruder_en20, "Extruder_en20", Interprete_geometrique_base);
25// XD extruder_en20 interprete extruder_en20 BRACE It does the same task as Extruder except that a prism is cut into 20
26// XD_CONT tetraedra instead of 3. The name of the boundaries will be devant (front) and derriere (back). But you can
27// XD_CONT change these names with the keyword RegroupeBord.
28
29Extruder_en20::Extruder_en20() { direction.resize(3, RESIZE_OPTIONS::NOCOPY_NOINIT); }
30
32
34
35/*! @brief Fonction principale de l'interprete Extruder_en20 Triangule tout le domaine
36 *
37 * specifie par la directive.
38 * On triangule le domaine grace a la methode:
39 * void Extruder_en20::extruder(Domaine& domaine) const
40 * Extruder signifie ici transformer en triangle des
41 * elements geometrique d'un domaine.
42 *
43 * @param (Entree& is) un flot d'entree
44 * @return (Entree&) le flot d'entree
45 * @throws l'objet a mailler n'est pas du type Domaine
46 */
48{
49 Nom nom_dom;
50 Param param(que_suis_je());
51 param.ajouter("domaine",&nom_dom,Param::REQUIRED); // XD attr domaine ref_domaine domain_name REQ Name of the domain.
52 param.ajouter("nb_tranches",&NZ,Param::REQUIRED); // XD attr nb_tranches entier nb_tranches REQ Number of elements
53 // XD_CONT in the extrusion direction.
54 param.ajouter_arr_size_predefinie("direction",&direction,Param::REQUIRED); // XD attr direction troisf direction OPT
55 // XD_CONT 0 Direction of the extrude operation.
57 associer_domaine(nom_dom);
61 return is;
62}
63
64/*! @brief Triangule tous les element d'un domaine: transforme les elements goemetriques du domaine en triangles.
65 *
66 * Pour l'instant on ne sait raffiner que des Rectangles
67 * (on les coupe en 4).
68 *
69 * @param (Domaine& domaine) le domaine dont on veut raffiner les elements
70 */
71void Extruder_en20::extruder(Domaine& dom)
72{
73 if (dom.type_elem()->que_suis_je() == "Rectangle" || dom.type_elem()->que_suis_je() == "Quadrangle" )
74 {
75 Cerr << " The extrusion of quadrangle is made by Extruder and not by Extruder_en20 " << finl;
76 exit();
77 }
78 else if( dom.type_elem()->que_suis_je() == "Triangle")
79 {
80 int oldnbsom = dom.nb_som();
81 IntTab& les_elems=dom.les_elems();
82 int oldsz=les_elems.dimension(0);
83 double dx = direction[0]/NZ;
84 double dy = direction[1]/NZ;
85 double dz = direction[2]/NZ;
86
87 Faces les_faces;
88 //domaine.creer_faces(les_faces);
89 {
90 // bloc a factoriser avec Domaine_VF.cpp :
91 Type_Face type_face = dom.type_elem()->type_face(0);
92 les_faces.typer(type_face);
93 les_faces.associer_domaine(dom);
94
95 Static_Int_Lists connectivite_som_elem;
96 const int nb_sommets_tot = dom.nb_som_tot();
97 const IntTab& elements = dom.les_elems();
98
99 construire_connectivite_som_elem(nb_sommets_tot,
100 elements,
101 connectivite_som_elem,
102 1 /* include virtual elements */);
103
104 Faces_builder faces_builder;
105 IntTab elem_faces; // Tableau dont on aura pas besoin
106 faces_builder.creer_faces_reeles(dom,
107 connectivite_som_elem,
108 les_faces,
109 elem_faces);
110 }
111 const int nbfaces2D = les_faces.nb_faces();
112
113
114 int newnbsom = oldnbsom*(NZ+1)+NZ*oldsz+nbfaces2D*NZ+oldnbsom*NZ;
115 DoubleTab new_soms(newnbsom, 3);
116 DoubleTab& coord_sommets=dom.les_sommets();
118
119
120 // les sommets du maillage 2D sont translates en premier
121 for (int i=0; i<oldnbsom; i++)
122 {
123 double x = coord_sommets(i,0);
124 double y = coord_sommets(i,1);
125 double z=0;
126 if (coord_sommets.dimension(1)>2)
127 z=coord_sommets(i,2);
128 for (int k=0; k<=NZ; k++)
129 {
130 new_soms(k*oldnbsom+i,0)=x;
131 new_soms(k*oldnbsom+i,1)=y;
132 new_soms(k*oldnbsom+i,2)=z;
133
134 x += dx;
135 y += dy;
136 z += dz;
137 }
138 }
139
140
141 // creation des centres de gravite des elements 2D puis translation de ces points
142 for (int i=0; i<oldsz; i++)
143 {
144 int i0=les_elems(i,0);
145 int i1=les_elems(i,1);
146 int i2=les_elems(i,2);
147
148 double xg = 1./3.*(coord_sommets(i0,0)+coord_sommets(i1,0)+coord_sommets(i2,0))+0.5*dx;
149 double yg = 1./3.*(coord_sommets(i0,1)+coord_sommets(i1,1)+coord_sommets(i2,1))+0.5*dy;
150 double z = 0.5*dz;
151 if (coord_sommets.dimension(1)>2)
152 z = 1./3.*(coord_sommets(i0,2)+coord_sommets(i1,2)+coord_sommets(i2,2))+0.5*dz;
153 for (int k=0; k<NZ; k++)
154 {
155
156 new_soms(oldnbsom*(NZ+1)+k*oldsz+i,0)=xg;
157 new_soms(oldnbsom*(NZ+1)+k*oldsz+i,1)=yg;
158 new_soms(oldnbsom*(NZ+1)+k*oldsz+i,2)=z;
159
160 xg += dx;
161 yg += dy;
162 z += dz;
163 }
164 }
165
166
167 // creation des centres des faces du maillage 2D puis translation de ces points
168 for (int i=0; i<nbfaces2D; i++)
169 {
170 int i0=les_faces.sommet(i,0);
171 int i1=les_faces.sommet(i,1);
172
173 double x01 = 0.5*(coord_sommets(i0,0)+coord_sommets(i1,0))+0.5*dx;
174 double y01 = 0.5*(coord_sommets(i0,1)+coord_sommets(i1,1))+0.5*dy;
175 double z = 0.5*dz;
176 if (coord_sommets.dimension(1)>2)
177 z = 0.5*(coord_sommets(i0,2)+coord_sommets(i1,2))+0.5*dz;
178 for (int k=0; k<NZ; k++)
179 {
180 new_soms(oldnbsom*(NZ+1)+NZ*oldsz+k*nbfaces2D+i,0)=x01;
181 new_soms(oldnbsom*(NZ+1)+NZ*oldsz+k*nbfaces2D+i,1)=y01;
182 new_soms(oldnbsom*(NZ+1)+NZ*oldsz+k*nbfaces2D+i,2)=z;
183 x01 += dx;
184 y01 += dy;
185 z += dz;
186 }
187 }
188
189 // creation des centres des aretes du maillage 2D puis translation de ces points
190 for (int i=0; i<oldnbsom; i++)
191 {
192 double x = coord_sommets(i,0)+0.5*dx;
193 double y = coord_sommets(i,1)+ 0.5*dy;
194 double z = 0.5*dz;
195 if (coord_sommets.dimension(1)>2)
196 z=coord_sommets(i,2)+0.5*dz;
197 for (int k=0; k<NZ; k++)
198 {
199 new_soms(oldnbsom*(NZ+1)+NZ*oldsz+NZ*nbfaces2D+k*oldnbsom+i,0)=x;
200 new_soms(oldnbsom*(NZ+1)+NZ*oldsz+NZ*nbfaces2D+k*oldnbsom+i,1)=y;
201 new_soms(oldnbsom*(NZ+1)+NZ*oldsz+NZ*nbfaces2D+k*oldnbsom+i,2)=z;
202 x += dx;
203 y += dy;
204 z += dz;
205 }
206 }
207
208
209 coord_sommets.reset();
210 dom.ajouter(new_soms);
211
212 int newnbelem = 20*NZ*oldsz;
213 IntTab new_elems(newnbelem, 4); // les nouveaux elements
214 int cpt=0;
215
216
217 // en premier, on stocke les tetra du haut et du bas : NZ*nb_triangle*2 tetra
218 for (int i=0; i<oldsz; i++)
219 {
220 int i0=les_elems(i,0);
221 int i1=les_elems(i,1);
222 int i2=les_elems(i,2);
223
224 int ig=oldnbsom*(NZ+1)+i;
225
226 for (int k=0; k<NZ; k++)
227 {
228 new_elems(2*k*oldsz+2*i,0) = i0;
229 new_elems(2*k*oldsz+2*i,1) = i1;
230 new_elems(2*k*oldsz+2*i,2) = i2;
231 new_elems(2*k*oldsz+2*i,3) = ig;
232 cpt++;
233
234 new_elems(2*k*oldsz+2*i+1,0) = i0+oldnbsom;
235 new_elems(2*k*oldsz+2*i+1,1) = i1+oldnbsom;
236 new_elems(2*k*oldsz+2*i+1,2) = i2+oldnbsom;
237 new_elems(2*k*oldsz+2*i+1,3) = ig;
238 cpt++;
239
240 mettre_a_jour_sous_domaine(dom,i,2*k*oldsz+2*i,2);
241
242 i0+=oldnbsom;
243 i1+=oldnbsom;
244 i2+=oldnbsom;
245 ig+=oldsz;
246 }
247 }
248
249
250
251 // puis les autres tetras
252 for (int i=0; i<nbfaces2D; i++)
253 {
254 for (int ivois=0; ivois<2; ivois++)
255 {
256 int elem = les_faces.voisin(i,ivois);
257
258 if (elem>=0)
259 {
260 int i0=les_faces.sommet(i,0);
261 int i1=les_faces.sommet(i,1);
262 int i01=oldnbsom*(NZ+1)+NZ*oldsz+i;
263
264 for (int k=0; k<NZ; k++)
265 {
266 int ig=oldnbsom*(NZ+1)+k*oldsz+elem;
267
268 int i00=oldnbsom*(NZ+1)+NZ*oldsz+NZ*nbfaces2D+i0;
269 int i11=oldnbsom*(NZ+1)+NZ*oldsz+NZ*nbfaces2D+i1;
270 // int i00=oldnbsom*(NZ+1)+NZ*oldsz+NZ*nbfaces2D+k*oldnbsom+i0;
271 // int i11=oldnbsom*(NZ+1)+NZ*oldsz+NZ*nbfaces2D+k*oldnbsom+i1;
272
273 new_elems(cpt,0) = i0;
274 new_elems(cpt,1) = i1;
275 new_elems(cpt,2) = i01;
276 new_elems(cpt++,3) = ig;
277
278 new_elems(cpt,0) = i0+oldnbsom;
279 new_elems(cpt,1) = i1+oldnbsom;
280 new_elems(cpt,2) = i01;
281 new_elems(cpt++,3) = ig;
282
283 new_elems(cpt,0) = i1;
284 new_elems(cpt,1) = i11;
285 new_elems(cpt,2) = i01;
286 new_elems(cpt++,3) = ig;
287
288 new_elems(cpt,0) = i11;
289 new_elems(cpt,1) = i1+oldnbsom;
290 new_elems(cpt,2) = i01;
291 new_elems(cpt++,3) = ig;
292
293 new_elems(cpt,0) = i0;
294 new_elems(cpt,1) = i00;
295 new_elems(cpt,2) = i01;
296 new_elems(cpt++,3) = ig;
297
298 new_elems(cpt,0) = i00;
299 new_elems(cpt,1) = i0+oldnbsom;
300 new_elems(cpt,2) = i01;
301 new_elems(cpt++,3) = ig;
302
303
304 i0+=oldnbsom;
305 i1+=oldnbsom;
306 i01+=nbfaces2D;
307 ig+=oldsz;
308 }
309 }
310 }
311 }
312
313 les_elems.ref(new_elems);
314
315 // Reconstruction de l'octree
316 dom.invalide_octree();
317 dom.typer("Tetraedre");
318
319 extruder_dvt(dom, les_faces,oldnbsom, oldsz);
320
321 }
322 else
323 {
324 Cerr << "It is not known yet how to extrude "
325 << dom.type_elem()->que_suis_je() <<"s"<<finl;
326 exit();
327 }
328}
329
330
331
332void Extruder_en20::traiter_faces_dvt(Faces& les_faces_bord, Faces& les_faces, int oldnbsom, int oldsz, int nbfaces2D )
333{
334 int size_2D = les_faces_bord.nb_faces();
335
336 IntTab les_sommets(6*size_2D*NZ, 3);
337
338 for (int i=0; i<size_2D; i++)
339 {
340 int i0=les_faces_bord.sommet(i,0);
341 int i1=les_faces_bord.sommet(i,1);
342
343 //double x01 = 0.5*(coord_sommets(i0,0)+coord_sommets(i1,0));
344 //double y01 = 0.5*(coord_sommets(i0,1)+coord_sommets(i1,1));
345
346 // on recherche le numero de cette face de bord: pas top!
347 int jface=-1;
348 for (int iface=0; iface<nbfaces2D; iface++)
349 {
350 int j0=les_faces.sommet(iface,0);
351 int j1=les_faces.sommet(iface,1);
352
353 if (((i0==j0) &&(i1==j1)) || ((i0==j1) &&(i1==j0)))
354 {
355 jface=iface;
356 break;
357 }
358 }
359 assert(jface>=0);
360
361 for (int k=0; k<NZ; k++)
362 {
363 //double z = (k+0.5)*dz;
364 //int i01 = domaine.chercher_sommets(x01, y01, z);
365 int j01 = oldnbsom*(NZ+1)+NZ*oldsz+k*nbfaces2D+jface;
366
367 int i00=oldnbsom*(NZ+1)+NZ*oldsz+NZ*nbfaces2D+i0;
368 int i11=oldnbsom*(NZ+1)+NZ*oldsz+NZ*nbfaces2D+i1;
369 // int i00=oldnbsom*(NZ+1)+NZ*oldsz+NZ*nbfaces2D+k*oldnbsom+i0;
370 // int i11=oldnbsom*(NZ+1)+NZ*oldsz+NZ*nbfaces2D+k*oldnbsom+i1;
371
372 les_sommets(k*6*size_2D+6*i,0) = i0;
373 les_sommets(k*6*size_2D+6*i,1) = i1;
374 les_sommets(k*6*size_2D+6*i,2) = j01;
375
376 les_sommets(k*6*size_2D+6*i+1,0) = j01;
377 les_sommets(k*6*size_2D+6*i+1,1) = i1;
378 les_sommets(k*6*size_2D+6*i+1,2) = i11;
379
380 les_sommets(k*6*size_2D+6*i+2,0) = j01;
381 les_sommets(k*6*size_2D+6*i+2,1) = i11;
382 les_sommets(k*6*size_2D+6*i+2,2) = i1+oldnbsom;
383
384 les_sommets(k*6*size_2D+6*i+3,0) = j01;
385 les_sommets(k*6*size_2D+6*i+3,1) = i0+oldnbsom;
386 les_sommets(k*6*size_2D+6*i+3,2) = i1+oldnbsom;
387
388 les_sommets(k*6*size_2D+6*i+4,0) = j01;
389 les_sommets(k*6*size_2D+6*i+4,1) = i0+oldnbsom;
390 les_sommets(k*6*size_2D+6*i+4,2) = i00;
391
392 les_sommets(k*6*size_2D+6*i+5,0) = j01;
393 les_sommets(k*6*size_2D+6*i+5,1) = i00;
394 les_sommets(k*6*size_2D+6*i+5,2) = i0;
395
396 i0+=oldnbsom;
397 i1+=oldnbsom;
398 }
399 }
400
401 les_faces_bord.typer(Type_Face::triangle_3D);
402 les_faces_bord.les_sommets().ref(les_sommets);
403 les_faces_bord.voisins().resize(6*size_2D*NZ, 2);
404 les_faces_bord.voisins()=-1;
405}
406
407
408
409void Extruder_en20::extruder_dvt(Domaine& dom, Faces& les_faces, int oldnbsom, int oldsz)
410{
411 const int nbfaces2D = les_faces.nb_faces();
412 IntTab& les_elems = dom.les_elems();
413
414 for (auto &itr : dom.faces_bord())
415 {
416 Faces& les_faces_bord = itr.faces();
417 traiter_faces_dvt(les_faces_bord, les_faces, oldnbsom, oldsz, nbfaces2D);
418 }
419
420 for (auto &itr : dom.faces_raccord())
421 {
422 Faces& les_faces_bord = itr->faces();
423 traiter_faces_dvt(les_faces_bord, les_faces, oldnbsom, oldsz, nbfaces2D);
424 }
425
426 Bord& devant = dom.faces_bord().add(Bord());
427 devant.nommer("devant");
428 Faces& les_faces_dvt=devant.faces();
429 les_faces_dvt.typer(Type_Face::triangle_3D);
430
431 IntTab som_dvt(oldsz, 3);
432 les_faces_dvt.voisins().resize(oldsz, 2);
433 les_faces_dvt.voisins()=-1;
434
435 Bord& derriere = dom.faces_bord().add(Bord());
436 derriere.nommer("derriere");
437 Faces& les_faces_der=derriere.faces();
438 les_faces_der.typer(Type_Face::triangle_3D);
439
440 IntTab som_der(oldsz, 3);
441 les_faces_der.voisins().resize(oldsz, 2);
442 les_faces_der.voisins()=-1;
443
444 for (int i=0; i<oldsz; i++)
445 {
446 int i0=les_elems(2*i,0);
447 int i1=les_elems(2*i,1);
448 int i2=les_elems(2*i,2);
449
450 som_dvt(i,0) = i0;
451 som_dvt(i,1) = i1;
452 som_dvt(i,2) = i2;
453
454 som_der(i,0) = i0+oldnbsom*NZ;
455 som_der(i,1) = i1+oldnbsom*NZ;
456 som_der(i,2) = i2+oldnbsom*NZ;
457
458 }
459
460
461 les_faces_dvt.les_sommets().ref(som_dvt);
462 les_faces_der.les_sommets().ref(som_der);
463
464}
465
DoubleTab_t & les_sommets()
Definition Domaine.h:113
Bords_t & faces_bord()
Definition Domaine.h:198
Raccords_t & faces_raccord()
Definition Domaine.h:253
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 Extruder_en20 Cette classe est un interprete qui sert a lire et executer.
virtual void extruder_dvt(Domaine &, Faces &, int, int)
ArrOfDouble direction
Entree & interpreter_(Entree &) override
Fonction principale de l'interprete Extruder_en20 Triangule tout le domaine.
void extruder(Domaine &)
Triangule tous les element d'un domaine: transforme les elements goemetriques du domaine en triangles...
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
int_t voisin(int_t, int) const
Renvoie le numero du i-ieme voisin de face.
Definition Faces.h:165
const IntTab_t & les_sommets() const
Renvoie le tableau des sommets de toutes les faces.
Definition Faces.h:74
int_t sommet(int_t, int) const
Renvoie le numero du j-ieme sommet de la i-ieme face.
Definition Faces.h:130
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,...
void nommer(const Nom &) override
Donne un nom a la frontiere.
Definition Frontiere.cpp:74
const Faces_t & faces() const
Definition Frontiere.h:54
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
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_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
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
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