16#include <Array_tools.h>
17#include <Refine_Mesh.h>
18#include <Sous_Domaine.h>
24Implemente_instanciable(
Refine_Mesh,
"Refine_Mesh", Interprete_geometrique_base);
55 Cerr <<
"Refinement... OK" << finl;
62 Cerr <<
"Error in 'Refine_Mesh::check_dimension()':" << finl;
64 Cerr <<
" Refine_Mesh can only deal 2D or 3D domains" << finl;
73 if (!((cell_type ==
Motcle(
"Triangle")) || (cell_type ==
Motcle(
"Tetraedre"))))
75 Cerr <<
"Error in 'Refine_Mesh::check_cell_type()':" << finl;
76 Cerr <<
" Invalid cell type: " << cell_type << finl;
77 Cerr <<
" Refine_Mesh can only deal with triangles and tetrahedrons" << finl;
89 IntTab nodes_of_edges;
90 IntTab edges_of_cells;
99 Noms new_sub_domaines_descriptions;
102 Static_Int_Lists incidence_from_node_to_edges;
105 IntTabs new_nodes_of_boundary_faces;
106 IntTabs new_cells_of_boundary_faces;
109 IntTabs new_nodes_of_connector_faces;
110 IntTabs new_cells_of_connector_faces;
113 IntTabs new_nodes_of_internal_frontier_faces;
114 IntTabs new_cells_of_internal_frontier_faces;
117 update_domain(
Nom(
"Triangle"), Type_Face::segment_2D, new_nodes, new_cells, new_sub_domaines_descriptions, new_nodes_of_boundary_faces, new_cells_of_boundary_faces, new_nodes_of_connector_faces,
118 new_cells_of_connector_faces, new_nodes_of_internal_frontier_faces, new_cells_of_internal_frontier_faces);
130 IntTab nodes_of_edges;
131 IntTab edges_of_cells;
140 Noms new_sub_domaines_descriptions;
143 Static_Int_Lists incidence_from_node_to_edges;
146 IntTabs new_nodes_of_boundary_faces;
147 IntTabs new_cells_of_boundary_faces;
150 IntTabs new_nodes_of_connector_faces;
151 IntTabs new_cells_of_connector_faces;
154 IntTabs new_nodes_of_internal_frontier_faces;
155 IntTabs new_cells_of_internal_frontier_faces;
158 update_domain(
Nom(
"Tetraedre"), Type_Face::triangle_3D, new_nodes, new_cells, new_sub_domaines_descriptions, new_nodes_of_boundary_faces, new_cells_of_boundary_faces, new_nodes_of_connector_faces,
159 new_cells_of_connector_faces, new_nodes_of_internal_frontier_faces, new_cells_of_internal_frontier_faces);
166 const int nb_edges_per_cell = 3;
167 const int nb_nodes_per_edge = 2;
169 IntTab local_nodes_of_edges(nb_edges_per_cell, nb_nodes_per_edge);
170 local_nodes_of_edges(0, 0) = 0;
171 local_nodes_of_edges(0, 1) = 1;
172 local_nodes_of_edges(1, 0) = 0;
173 local_nodes_of_edges(1, 1) = 2;
174 local_nodes_of_edges(2, 0) = 1;
175 local_nodes_of_edges(2, 1) = 2;
177 build_edges(nodes_of_edges, edges_of_cells, nb_edges_per_cell, nb_nodes_per_edge, local_nodes_of_edges);
182 const int nb_edges_per_cell = 6;
183 const int nb_nodes_per_edge = 2;
185 IntTab local_nodes_of_edges(nb_edges_per_cell, nb_nodes_per_edge);
186 local_nodes_of_edges(0, 0) = 0;
187 local_nodes_of_edges(0, 1) = 1;
188 local_nodes_of_edges(1, 0) = 0;
189 local_nodes_of_edges(1, 1) = 2;
190 local_nodes_of_edges(2, 0) = 0;
191 local_nodes_of_edges(2, 1) = 3;
192 local_nodes_of_edges(3, 0) = 1;
193 local_nodes_of_edges(3, 1) = 2;
194 local_nodes_of_edges(4, 0) = 1;
195 local_nodes_of_edges(4, 1) = 3;
196 local_nodes_of_edges(5, 0) = 2;
197 local_nodes_of_edges(5, 1) = 3;
199 build_edges(nodes_of_edges, edges_of_cells, nb_edges_per_cell, nb_nodes_per_edge, local_nodes_of_edges);
202void Refine_Mesh::build_edges(IntTab& nodes_of_edges, IntTab& edges_of_cells,
int nb_edges_per_cell,
int nb_nodes_per_edge,
const IntTab& local_nodes_of_edges)
const
208 int size = nb_cells * nb_edges_per_cell;
209 IntTab nodes_of_edges_tmp(size, nb_nodes_per_edge);
210 edges_of_cells.
resize(nb_cells, nb_edges_per_cell);
211 ArrOfInt global_nodes_of_edge(nb_nodes_per_edge);
213 for (
int c = 0; c < nb_cells; ++c)
215 for (
int e = 0; e < nb_edges_per_cell; ++e)
217 const int idx = c * nb_edges_per_cell + e;
219 for (
int n = 0; n < nb_nodes_per_edge; ++n)
221 global_nodes_of_edge[n] = cells(c, local_nodes_of_edges(e, n));
224 nodes_of_edges_tmp(idx, 0) = (global_nodes_of_edge[0] < global_nodes_of_edge[1]) ? global_nodes_of_edge[0] : global_nodes_of_edge[1];
225 nodes_of_edges_tmp(idx, 1) = (global_nodes_of_edge[0] < global_nodes_of_edge[1]) ? global_nodes_of_edge[1] : global_nodes_of_edge[0];
227 edges_of_cells(c, e) = idx;
232 ArrOfInt renum_inverse;
233 calculer_renum_sans_doublons(nodes_of_edges_tmp, renum, renum_inverse);
235 const int nb_edges = renum_inverse.
size_array();
236 nodes_of_edges.
resize(nb_edges, nb_nodes_per_edge);
237 for (
int e = 0; e < nb_edges; ++e)
239 for (
int n = 0; n < nb_nodes_per_edge; ++n)
241 nodes_of_edges(e, n) = nodes_of_edges_tmp(renum_inverse[e], n);
245 for (
int c = 0; c < nb_cells; ++c)
247 for (
int e = 0; e < nb_edges_per_cell; ++e)
249 edges_of_cells(c, e) = renum[edges_of_cells(c, e)];
259 const int nb_edges = nodes_of_edges.
dimension(0);
262 for (
int n = 0; n < nb_nodes; ++n)
266 new_nodes(n, i) = nodes(n, i);
270 for (
int e = 0; e < nb_edges; ++e)
274 new_nodes(e + nb_nodes, i) = 0.5 * (nodes(nodes_of_edges(e, 0), i) + nodes(nodes_of_edges(e, 1), i));
287 new_cells.
resize(4 * nb_cells, 3);
289 int n0, n1, n2, n01, n02, n12;
290 for (
int c = 0; c < nb_cells; ++c)
295 n01 = nb_nodes + edges_of_cells(c, 0);
296 n02 = nb_nodes + edges_of_cells(c, 1);
297 n12 = nb_nodes + edges_of_cells(c, 2);
299 new_cells(4 * c + 0, 0) = n0;
300 new_cells(4 * c + 0, 1) = n01;
301 new_cells(4 * c + 0, 2) = n02;
302 new_cells(4 * c + 1, 0) = n01;
303 new_cells(4 * c + 1, 1) = n1;
304 new_cells(4 * c + 1, 2) = n12;
305 new_cells(4 * c + 2, 0) = n02;
306 new_cells(4 * c + 2, 1) = n12;
307 new_cells(4 * c + 2, 2) = n2;
308 new_cells(4 * c + 3, 0) = n12;
309 new_cells(4 * c + 3, 1) = n02;
310 new_cells(4 * c + 3, 2) = n01;
322 new_cells.
resize(8 * nb_cells, 4);
324 int n0, n1, n2, n3, n01, n02, n03, n12, n13, n23;
325 for (
int c = 0; c < nb_cells; ++c)
331 n01 = nb_nodes + edges_of_cells(c, 0);
332 n02 = nb_nodes + edges_of_cells(c, 1);
333 n03 = nb_nodes + edges_of_cells(c, 2);
334 n12 = nb_nodes + edges_of_cells(c, 3);
335 n13 = nb_nodes + edges_of_cells(c, 4);
336 n23 = nb_nodes + edges_of_cells(c, 5);
338 new_cells(8 * c + 0, 0) = n0;
339 new_cells(8 * c + 0, 1) = n01;
340 new_cells(8 * c + 0, 2) = n02;
341 new_cells(8 * c + 0, 3) = n03;
342 new_cells(8 * c + 1, 0) = n01;
343 new_cells(8 * c + 1, 1) = n1;
344 new_cells(8 * c + 1, 2) = n12;
345 new_cells(8 * c + 1, 3) = n13;
346 new_cells(8 * c + 2, 0) = n02;
347 new_cells(8 * c + 2, 1) = n12;
348 new_cells(8 * c + 2, 2) = n2;
349 new_cells(8 * c + 2, 3) = n23;
350 new_cells(8 * c + 3, 0) = n03;
351 new_cells(8 * c + 3, 1) = n13;
352 new_cells(8 * c + 3, 2) = n23;
353 new_cells(8 * c + 3, 3) = n3;
354 new_cells(8 * c + 4, 0) = n02;
355 new_cells(8 * c + 4, 1) = n23;
356 new_cells(8 * c + 4, 2) = n13;
357 new_cells(8 * c + 4, 3) = n12;
358 new_cells(8 * c + 5, 0) = n23;
359 new_cells(8 * c + 5, 1) = n13;
360 new_cells(8 * c + 5, 2) = n03;
361 new_cells(8 * c + 5, 3) = n02;
362 new_cells(8 * c + 6, 0) = n13;
363 new_cells(8 * c + 6, 1) = n03;
364 new_cells(8 * c + 6, 2) = n02;
365 new_cells(8 * c + 6, 3) = n01;
366 new_cells(8 * c + 7, 0) = n12;
367 new_cells(8 * c + 7, 1) = n02;
368 new_cells(8 * c + 7, 2) = n01;
369 new_cells(8 * c + 7, 3) = n13;
376 sub_domaines_descriptions.dimensionner(nb_sub_domaines);
380 for (
int i = 0; i < nb_sub_domaines; ++i)
383 const int old_nb_cells_in_sub_domaine = sub_domaine.
nb_elem_tot();
384 const int new_nb_cells_in_sub_domaine = old_nb_cells_in_sub_domaine * nb_new_cells_per_old_cell;
385 IntVect new_sub_domaine_cells(new_nb_cells_in_sub_domaine);
387 for (
int c = 0; c < old_nb_cells_in_sub_domaine; ++c)
389 const int old_cell = sub_domaine[c];
390 for (
int j = 0; j < nb_new_cells_per_old_cell; ++j)
392 new_sub_domaine_cells[idx] = old_cell * nb_new_cells_per_old_cell + j;
398 os <<
" { Liste " << new_sub_domaine_cells <<
" } ";
399 sub_domaines_descriptions[i] =
Nom(os.
get_str());
405 const int nb_edges = nodes_of_edges.
dimension(0);
406 const int nb_nodes_per_edge = nodes_of_edges.
dimension(1);
408 ArrOfInt nb_incident_edges(nb_nodes);
410 for (
int edge = 0; edge < nb_edges; ++edge)
412 for (
int n = 0; n < nb_nodes_per_edge; ++n)
414 const int node = nodes_of_edges(edge, n);
415 ++nb_incident_edges[node];
421 nb_incident_edges = 0;
422 for (
int edge = 0; edge < nb_edges; ++edge)
424 for (
int n = 0; n < nb_nodes_per_edge; ++n)
426 const int node = nodes_of_edges(edge, n);
427 const int index = nb_incident_edges[node];
429 ++nb_incident_edges[node];
439 new_nodes_of_boundary_faces.
dimensionner(nb_boundaries);
440 new_cells_of_boundary_faces.
dimensionner(nb_boundaries);
443 for (
const auto &itr :
domaine().faces_bord())
445 IntTab& nodes = new_nodes_of_boundary_faces[boundary];
446 IntTab& cells = new_cells_of_boundary_faces[boundary];
455 new_nodes_of_boundary_faces.
dimensionner(nb_boundaries);
456 new_cells_of_boundary_faces.
dimensionner(nb_boundaries);
459 for (
const auto &itr :
domaine().faces_bord())
461 IntTab& nodes = new_nodes_of_boundary_faces[boundary];
462 IntTab& cells = new_cells_of_boundary_faces[boundary];
471 new_nodes_of_connector_faces.
dimensionner(nb_connectors);
472 new_cells_of_connector_faces.
dimensionner(nb_connectors);
475 for (
const auto &itr :
domaine().faces_raccord())
477 IntTab& nodes = new_nodes_of_connector_faces[connector];
478 IntTab& cells = new_cells_of_connector_faces[connector];
487 new_nodes_of_connector_faces.
dimensionner(nb_connectors);
488 new_cells_of_connector_faces.
dimensionner(nb_connectors);
491 for (
const auto &itr :
domaine().faces_raccord())
493 IntTab& nodes = new_nodes_of_connector_faces[connector];
494 IntTab& cells = new_cells_of_connector_faces[connector];
501 const Static_Int_Lists& incidence_from_node_to_edges)
const
504 new_nodes_of_internal_frontier_faces.
dimensionner(nb_internal_frontier);
505 new_cells_of_internal_frontier_faces.
dimensionner(nb_internal_frontier);
507 int internal_frontier = 0;
508 for (
const auto& itr :
domaine().bords_int())
510 IntTab& nodes = new_nodes_of_internal_frontier_faces[internal_frontier];
511 IntTab& cells = new_cells_of_internal_frontier_faces[internal_frontier];
518 const Static_Int_Lists& incidence_from_node_to_edges)
const
521 new_nodes_of_internal_frontier_faces.
dimensionner(nb_internal_frontier);
522 new_cells_of_internal_frontier_faces.
dimensionner(nb_internal_frontier);
524 int internal_frontier = 0;
525 for (
const auto& itr :
domaine().bords_int())
527 IntTab& nodes = new_nodes_of_internal_frontier_faces[internal_frontier];
528 IntTab& cells = new_cells_of_internal_frontier_faces[internal_frontier];
535 const Faces& old_frontier_faces)
const
539 const int old_nb_faces = old_frontier_faces.
nb_faces();
540 const int new_nb_faces = old_nb_faces * 2;
542 const IntTab& old_nodes_of_frontier_faces = old_frontier_faces.
les_sommets();
544 new_nodes_of_frontier_faces.
resize(new_nb_faces, 2);
545 for (
int f = 0; f < old_nb_faces; ++f)
547 const int node0 = old_nodes_of_frontier_faces(f, 0);
548 const int node1 = old_nodes_of_frontier_faces(f, 1);
549 const int edge =
find_edge(incidence_from_node_to_edges, node0, node1);
551 new_nodes_of_frontier_faces(2 * f + 0, 0) = node0;
552 new_nodes_of_frontier_faces(2 * f + 0, 1) = nb_nodes + edge;
554 new_nodes_of_frontier_faces(2 * f + 1, 0) = nb_nodes + edge;
555 new_nodes_of_frontier_faces(2 * f + 1, 1) = node1;
558 new_cells_of_frontier_faces.
resize(new_nb_faces, 2);
559 new_cells_of_frontier_faces = -1;
563 const Faces& old_frontier_faces)
const
567 const int old_nb_faces = old_frontier_faces.
nb_faces();
568 const int new_nb_faces = old_nb_faces * 4;
570 const IntTab old_nodes_of_frontier_faces = old_frontier_faces.
les_sommets();
572 new_nodes_of_frontier_faces.
resize(new_nb_faces, 3);
573 for (
int f = 0; f < old_nb_faces; ++f)
575 const int node0 = old_nodes_of_frontier_faces(f, 0);
576 const int node1 = old_nodes_of_frontier_faces(f, 1);
577 const int node2 = old_nodes_of_frontier_faces(f, 2);
579 const int edge0 =
find_edge(incidence_from_node_to_edges, node1, node2);
580 const int edge1 =
find_edge(incidence_from_node_to_edges, node2, node0);
581 const int edge2 =
find_edge(incidence_from_node_to_edges, node0, node1);
583 new_nodes_of_frontier_faces(4 * f + 0, 0) = node0;
584 new_nodes_of_frontier_faces(4 * f + 0, 1) = nb_nodes + edge2;
585 new_nodes_of_frontier_faces(4 * f + 0, 2) = nb_nodes + edge1;
587 new_nodes_of_frontier_faces(4 * f + 1, 0) = nb_nodes + edge2;
588 new_nodes_of_frontier_faces(4 * f + 1, 1) = node1;
589 new_nodes_of_frontier_faces(4 * f + 1, 2) = nb_nodes + edge0;
591 new_nodes_of_frontier_faces(4 * f + 2, 0) = nb_nodes + edge1;
592 new_nodes_of_frontier_faces(4 * f + 2, 1) = nb_nodes + edge0;
593 new_nodes_of_frontier_faces(4 * f + 2, 2) = node2;
595 new_nodes_of_frontier_faces(4 * f + 3, 0) = nb_nodes + edge0;
596 new_nodes_of_frontier_faces(4 * f + 3, 1) = nb_nodes + edge1;
597 new_nodes_of_frontier_faces(4 * f + 3, 2) = nb_nodes + edge2;
600 new_cells_of_frontier_faces.
resize(new_nb_faces, 2);
601 new_cells_of_frontier_faces = -1;
612 array_calculer_intersection(edges0, edges1);
618void Refine_Mesh::update_domain(
const Nom& cell_type,
const Type_Face& face_type,
const DoubleTab& new_nodes,
const IntTab& new_cells,
const Noms& new_sub_domaines_descriptions,
619 const IntTabs& new_nodes_of_boundary_faces,
const IntTabs& new_cells_of_boundary_faces,
const IntTabs& new_nodes_of_connector_faces,
620 const IntTabs& new_cells_of_connector_faces,
const IntTabs& new_nodes_of_internal_frontier_faces,
const IntTabs& new_cells_of_internal_frontier_faces)
651 for (
int i = 0; i < nb_sub_domaines; ++i)
654 const Nom& description = new_sub_domaines_descriptions[i];
663 for (
auto &itr :
domaine().faces_bord())
665 Faces& faces = itr.faces();
666 faces.
typer(face_type);
668 faces.
voisins().
ref(new_cells_of_boundary_faces[boundary]);
676 for (
auto &itr :
domaine().faces_raccord())
678 Faces& faces = itr->faces();
679 faces.
typer(face_type);
681 faces.
voisins().
ref(new_cells_of_connector_faces[connector]);
688 int internal_frontier = 0;
689 for (
auto &itr :
domaine().bords_int())
691 Faces& faces = itr.faces();
692 faces.
typer(face_type);
693 faces.
les_sommets().
ref(new_nodes_of_internal_frontier_faces[internal_frontier]);
694 faces.
voisins().
ref(new_cells_of_internal_frontier_faces[internal_frontier]);
const Sous_Domaine_t & ss_domaine(int i) const
const OctreeRoot_t & construit_octree() const
DoubleTab_t & les_sommets()
int nb_frontieres_internes() const
int nb_ss_domaines() const
void typer(const Nom &)
Type les elements du domaine avec le nom passe en parametre.
const Nom & le_nom() const override
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
Une entree dont la source est une chaine de caracteres.
Class defining operators and methods for all reading operation in an input flow (file,...
void typer(const Motcle &)
Type les faces.
IntTab_t & voisins()
Renvoie le tableau des voisins (des faces).
const IntTab_t & les_sommets() const
Renvoie le tableau des sommets de toutes les faces.
void associer_domaine(Nom &nom_dom)
Domaine_t & domaine(int i=0)
Une chaine de caractere (Nom) en majuscules.
class Nom Une chaine de caractere pour nommer les objets de TRUST
const char * getChar() const
Un tableau de chaine de caracteres (VECT(Nom)).
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
void update_cells(const IntTab &new_cells)
void check_cell_type() const
void build_new_internal_frontier_faces_2D(IntTabs &new_nodes_of_internal_frontier_faces, IntTabs &new_cells_of_internal_frontier_faces, const Static_Int_Lists &incidence_from_node_to_edges) const
Entree & interpreter_(Entree &is) override
void build_new_connector_faces_3D(IntTabs &new_nodes_of_connector_faces, IntTabs &new_cells_of_connector_faces, const Static_Int_Lists &incidence_from_node_to_edges) const
void update_internal_frontier_faces(const Type_Face &face_type, const IntTabs &new_nodes_of_internal_frontier_faces, const IntTabs &new_cells_of_internal_frontier_faces)
void build_incidence_from_node_to_edges(int nb_nodes, const IntTab &nodes_of_edges, Static_Int_Lists &incidence) const
void update_octree(const Nom &cell_type)
void update_domain(const Nom &cell_type, const Type_Face &face_type, const DoubleTab &new_nodes, const IntTab &new_cells, const Noms &new_sub_domaines_descriptions, const IntTabs &new_nodes_of_boundary_faces, const IntTabs &new_cells_of_boundary_faces, const IntTabs &new_nodes_of_connector_faces, const IntTabs &new_cells_of_connector_faces, const IntTabs &new_nodes_of_internal_frontier_faces, const IntTabs &new_cells_of_internal_frontier_faces)
void build_new_boundary_faces_3D(IntTabs &new_nodes_of_boundary_faces, IntTabs &new_cells_of_boundary_faces, const Static_Int_Lists &incidence_from_node_to_edges) const
void update_sub_domaines(const Noms &new_sub_domaines_descriptions)
void build_new_internal_frontier_faces_3D(IntTabs &new_nodes_of_internal_frontier_faces, IntTabs &new_cells_of_internal_frontier_faces, const Static_Int_Lists &incidence_from_node_to_edges) const
void build_new_cells_2D(IntTab &new_cells, const IntTab &edges_of_cells) const
void update_nodes(const DoubleTab &new_nodes)
void build_edges_3D(IntTab &nodes_of_edges, IntTab &edges_of_cells) const
void check_dimension() const
void build_new_connector_faces_2D(IntTabs &new_nodes_of_connector_faces, IntTabs &new_cells_of_connector_faces, const Static_Int_Lists &incidence_from_node_to_edges) const
void build_new_cells_3D(IntTab &new_cells, const IntTab &edges_of_cells) const
int find_edge(const Static_Int_Lists &incidence_from_node_to_edges, int node0, int node1) const
void update_boundary_faces(const Type_Face &face_type, const IntTabs &new_nodes_of_boundary_faces, const IntTabs &new_cells_of_boundary_faces)
void update_connector_faces(const Type_Face &face_type, const IntTabs &new_nodes_of_connector_faces, const IntTabs &new_cells_of_connector_faces)
void build_new_nodes(DoubleTab &new_nodes, const IntTab &nodes_of_edges) const
void build_edges_2D(IntTab &nodes_of_edges, IntTab &edges_of_cells) const
void build_new_frontier_faces_3D(IntTab &new_nodes_of_frontier_faces, IntTab &new_cells_of_frontier_faces, const Static_Int_Lists &incidence_from_node_to_edges, const Faces &old_frontier_faces) const
void build_new_sub_domaines_descriptions(Noms &new_sub_domaines_descriptions) const
void build_new_frontier_faces_2D(IntTab &new_nodes_of_frontier_faces, IntTab &new_cells_of_frontier_faces, const Static_Int_Lists &incidence_from_node_to_edges, const Faces &old_frontier_faces) const
void build_new_boundary_faces_2D(IntTabs &new_nodes_of_boundary_faces, IntTabs &new_cells_of_boundary_faces, const Static_Int_Lists &incidence_from_node_to_edges) const
void build_edges(IntTab &nodes_of_edges, IntTab &edges_of_cells, int nb_edges_per_cell, int nb_nodes_per_edge, const IntTab &local_nodes_of_edges) const
Cette classe derivee de Sortie empile ce qu'on lui envoie dans une chaine de caracteres.
const char * get_str() const
returns a copy of the string stored by the SChaine
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...
static void uninit_sequential_domain(Domaine_32_64< _SIZE_ > &dom)
methode utilisee par les interpretes qui modifient le domaine (sequentiel), detruit les descripteurs ...
Classe de base des flux de sortie.
int_t nb_elem_tot() const
void copy_list_to_array(int_t i_liste, ArrOfInt_t &array) const
copie la i-ieme liste dans le tableau fourni Le tableau array doit etre resizable.
void set_value(int_t i_liste, int_t i_element, int_t valeur)
affecte la "valeur" au j-ieme element de la i-ieme liste avec 0 <= i < get_nb_lists() et 0 <= j < get...
void trier_liste(int_t i)
tri par ordre croissant des valeurs de la i-ieme liste.
void set_list_sizes(const ArrOfInt_t &sizes)
detruit les listes existantes et en cree de nouvelles.
_SIZE_ size_array() const
virtual void ref(const TRUSTTab &)
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension(int d) const