116 const Domaine& domaine = domaine_vf.
domaine();
121 const int nb_faces_front = domaine.nb_faces_frontiere();
124 int nb_faces_frontiere_virt = 0;
125 for (i_frontiere = 0; i_frontiere < nb_frontieres; i_frontiere++)
127 const ArrOfInt& liste_faces_virt =
128 domaine.frontiere(i_frontiere).get_faces_virt();
129 nb_faces_frontiere_virt += liste_faces_virt.
size_array();
133 const int nb_faces_front_tot = nb_faces_front + nb_faces_frontiere_virt;
137 ArrOfInt liste_faces(nb_faces_front_tot);
142 for (n = 0; n < nb_faces_front; n++)
148 const int nb_frontieres_cl = domaine.nb_front_Cl();
150 for (i_frontiere = 0; i_frontiere < nb_frontieres_cl; i_frontiere++)
152 const Frontiere& frontiere = domaine.frontiere(i_frontiere);
154 const int nb_faces_frontiere = faces_virtuelles.
size_array();
155 for (
int ii = 0; ii < nb_faces_frontiere; ii++)
157 liste_faces[n] = faces_virtuelles[ii];
170 IntTab les_aretes(nb_faces_front_tot * nb_aretes_par_face, 4);
177 for (i_face = 0; i_face < nb_faces_front_tot; i_face++)
181 const int face = liste_faces[i_face];
185 for (
int i_arete = 0; i_arete < nb_aretes_par_face; i_arete++)
191 int sommet0 = face_sommets(face, i_sommet0);
192 int sommet1 = (i_sommet1 >= 0) ? face_sommets(face, i_sommet1) : -1;
194 if (sommet1 >= 0 && sommet1 < sommet0)
201 les_aretes(nb_aretes, 0) = sommet0;
202 les_aretes(nb_aretes, 1) = sommet1;
203 les_aretes(nb_aretes, 2) = face;
204 les_aretes(nb_aretes, 3) = i_arete;
215 using quadruplet = std::array<int, 4>;
216 quadruplet* ptr =
reinterpret_cast<quadruplet*
>(les_aretes.
addr());
217 std::sort(ptr, ptr+nb_aretes, [&](
const quadruplet& q1,
const quadruplet& q2)
220 return ( q1[0]<q2[0] );
222 return ( q1[1]<q2[1] );
223 return ( q1[2]<q2[2] );
232 for (i = 0; i < nb_aretes - 1; i++)
235 if (les_aretes(i, 0) == les_aretes(i+1, 0)
236 && les_aretes(i, 1) == les_aretes(i+1, 1))
238 const int face0 = les_aretes(i, 2);
239 const int arete0= les_aretes(i, 3);
240 const int face1 = les_aretes(i+1, 2);
241 const int arete1= les_aretes(i+1, 3);
243 assert(face0 != face1);
244 assert(face0 >= nb_faces_front ||
faces_voisins_(face0, arete0) < 0);
245 assert(face1 >= nb_faces_front ||
faces_voisins_(face1, arete1) < 0);
247 if (face0 < nb_faces_front)
249 if (face1 < nb_faces_front)
255 for (i = 0; i < nb_faces_front; i++)
257 for (
int j = 0; j < nb_aretes_par_face; j++)
261 Cerr <<
"(PE" <<
me();
262 Cerr <<
") Erreur dans Connectivite_frontieres::associer_domaine_vf\n";
263 Cerr <<
" faces_voisins_(" << i <<
"," << j <<
") < 0" << finl;
int face_sommets(int i, int j) const
renvoie le numero du ieme sommet de la face num_face.
const Domaine & domaine() const