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 &)
Sets the element type of the domain using the name passed as parameter.
const Nom & le_nom() const override
Returns the name of the Objet_U. Virtual method to override: returns "neant" in this implementation.
An input stream whose source is a character string.
Class defining operators and methods for all reading operation in an input flow (file,...
void typer(const Motcle &)
Sets the type of the faces.
IntTab_t & voisins()
Returns the array of neighbors (of the faces).
const IntTab_t & les_sommets() const
Returns the array of vertices of all faces.
void associer_domaine(Nom &nom_dom)
Domaine_t & domaine(int i=0)
A character string (Nom) in uppercase.
class Nom: a character string for naming TRUST objects.
const char * getChar() const
An array of character strings (VECT(Nom)).
const Nom & que_suis_je() const
Returns the string identifying the class.
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
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
This class, derived from Sortie, accumulates what is sent to it into a character string.
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)
Method used by interpreters that modify the domain (sequential), destroys the descriptors of vertices...
Base class for output streams.
int_t nb_elem_tot() const
void copy_list_to_array(int_t i_liste, ArrOfInt_t &array) const
Copies the i-th list into the provided array. The array must be resizable.
void set_value(int_t i_liste, int_t i_element, int_t valeur)
Assigns "valeur" to the j-th element of the i-th list with 0 <= i < get_nb_lists() and 0 <= j < get_l...
void trier_liste(int_t i)
Sorts the values of the i-th list in ascending order.
void set_list_sizes(const ArrOfInt_t &sizes)
Destroys existing lists and creates new ones.
_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