15#include <Connectivite_som_elem.h>
16#include <Static_Int_Lists.h>
21template <
typename _SIZE_>
23 SmallArrOfTID_T<_SIZE_>& elements)
28 SmallArrOfTID_T<int>& elements)
35 SmallArrOfTID_T<trustIdType>& elements)
37 BigArrOfTID elem_as_big;
53template <
typename _SIZE_>
54void construire_connectivite_som_elem(
const _SIZE_ nb_sommets,
55 const IntTab_T<_SIZE_>& les_elems,
62 const _SIZE_ nb_sommets_par_element = les_elems.
dimension(1);
66 ArrOfInt_T<_SIZE_> nb_elements_voisins(nb_sommets);
70 ToDo_Kokkos(
"critical");
71 for (_SIZE_ elem = 0; elem < nb_elem; elem++)
73 for (
int i = 0; i < nb_sommets_par_element; i++)
75 _SIZE_ sommet = les_elems(elem, i);
77 if (sommet==-1)
break;
78 nb_elements_voisins[sommet]++;
85 nb_elements_voisins = 0;
88 ToDo_Kokkos(
"critical");
89 for (_SIZE_ elem = 0; elem < nb_elem; elem++)
91 for (
int i = 0; i < nb_sommets_par_element; i++)
93 _SIZE_ sommet = les_elems(elem, i);
95 if (sommet==-1)
break;
96 _SIZE_ n = (nb_elements_voisins[sommet])++;
113template <
typename _SIZE_>
115 const SmallArrOfTID_T<_SIZE_>& sommets_to_find,
116 SmallArrOfTID_T<_SIZE_>& elements)
118 int nb_som_to_find = sommets_to_find.
size_array();
120 while (sommets_to_find[nb_som_to_find-1]==-1) nb_som_to_find--;
121 if (nb_som_to_find == 0)
133 const _SIZE_ sommet = sommets_to_find[0];
140 ::copy_list_internal<_SIZE_>(som_elem, sommet, elements);
144 for (i_sommet = 1; i_sommet < nb_som_to_find; i_sommet++)
146 const _SIZE_ sommet = sommets_to_find[i_sommet];
149 int nb_elems_restants = 0;
151 const int nb_elem_liste = (int)som_elem.
get_list_size(sommet);
155 if (nb_elem_found == 0)
157 if (nb_elem_liste > 0)
161 const _SIZE_ elem_i = elements[i];
162 const _SIZE_ elem_j = som_elem(sommet, j);
163 if (elem_i == elem_j)
166 elements[nb_elems_restants] = elem_i;
169 if (elem_i >= elem_j)
172 if (j >= nb_elem_liste)
175 if (elem_j >= elem_i)
178 if (i >= nb_elem_found)
185 nb_elems_restants = 0;
187 nb_elem_found = nb_elems_restants;
192template void construire_connectivite_som_elem(
const int nb_sommets,
const IntTab_T<int>& les_elems,
Static_Int_Lists_32_64<int>& som_elem,
bool include_virtual);
193template void find_adjacent_elements(
const Static_Int_Lists_32_64<int>& som_elem,
const SmallArrOfTID_T<int>& sommets_to_find, SmallArrOfTID_T<int>& elements);
196template void construire_connectivite_som_elem(
const trustIdType nb_sommets,
const IntTab_T<trustIdType>& les_elems,
Static_Int_Lists_32_64<trustIdType>& som_elem,
bool include_virtual);
197template void find_adjacent_elements(
const Static_Int_Lists_32_64<trustIdType>& som_elem,
const SmallArrOfTID_T<trustIdType>& sommets_to_find, SmallArrOfTID_T<trustIdType>& elements);
This class allows storing lists of integers accessible in constant time.
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...
int_t get_list_size(int_t i_liste) const
Returns the number of elements in list i.
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
void ref_as_big(TRUSTArray< _TYPE_, trustIdType > &out) const
void resize_array(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension_tot(int) const override
_SIZE_ dimension(int d) const