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);
156 if (nb_elem_found == 0)
158 if (nb_elem_liste > 0)
162 const _SIZE_ elem_i = elements[i];
163 const _SIZE_ elem_j = som_elem(sommet, j);
164 if (elem_i == elem_j)
167 elements[nb_elems_restants] = elem_i;
170 if (elem_i >= elem_j)
173 if (j >= nb_elem_liste)
176 if (elem_j >= elem_i)
179 if (i >= nb_elem_found)
186 nb_elems_restants = 0;
188 nb_elem_found = nb_elems_restants;
193template 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);
194template void find_adjacent_elements(
const Static_Int_Lists_32_64<int>& som_elem,
const SmallArrOfTID_T<int>& sommets_to_find, SmallArrOfTID_T<int>& elements);
197template 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);
198template void find_adjacent_elements(
const Static_Int_Lists_32_64<trustIdType>& som_elem,
const SmallArrOfTID_T<trustIdType>& sommets_to_find, SmallArrOfTID_T<trustIdType>& elements);
Cette classe permet de stocker des listes d'entiers accessibles en temps constant.
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...
int_t get_list_size(int_t i_liste) const
renvoie le nombre d'elements de la liste i
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
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