82 ArrOfInt num_face_bord;
83 ArrOfIntFT indice_global_sommet(nb_sommets);
86 coord_elem.
resize(nb_sommets, dim);
87 coord_som.
resize(nb_sommets, dim);
89 const DoubleTab& xp = domaine_vf.
xp();
91 int nb_sommets_reels = 0;
93 for (i = 0; i < nb_sommets; i++)
97 indice_global_sommet[i] = -1;
101 for (j = 0; j < dim; j++)
102 coord_elem(nb_sommets_reels, j) = xp(indice_element, j);
103 for (j = 0; j < dim; j++)
104 coord_som(nb_sommets_reels, j) = mesh.
sommets_(i, j);
106 int i_face_bord = -1;
110 assert(face_bord == domaine_vf.
elem_faces(indice_element, i_face_bord));
112 num_face_bord[nb_sommets_reels] = i_face_bord;
113 indice_global_sommet[i] = nb_sommets_reels;
116 coord_elem.
resize(nb_sommets_reels, dim);
117 coord_som.
resize(nb_sommets_reels, dim);
121 for (i = 0; i < nb_sommets; i++)
122 if (indice_global_sommet[i] >= 0)
123 indice_global_sommet[i] += offset;
126 ecrire_tableau(fichier, coord_elem);
127 ecrire_tableau(fichier, coord_som);
128 ecrire_tableau(fichier, num_face_bord);
133 IntTab facettes_to_save;
135 facettes_to_save.
resize(nb_facettes, dim);
136 int nb_facettes_reeles = 0;
137 for (i = 0; i < nb_facettes; i++)
141 for (j = 0; j < dim; j++)
144 const int i_som_global = indice_global_sommet[i_som];
145 assert(i_som_global >= 0);
146 facettes_to_save(nb_facettes_reeles, j) = i_som_global;
148 nb_facettes_reeles++;
150 facettes_to_save.
resize(nb_facettes_reeles, dim);
151 ecrire_tableau(fichier, facettes_to_save);
164 const Domaine * domaine_src)
167 assert((fichier && (!domaine_src)) || ((!fichier) && domaine_src));
178 int nb_som_tot, dummy_int;
182 (*fichier) >> nb_som_tot >> dummy_int;
183 assert(dummy_int == dim);
188 nb_som_tot = domaine_src->
nb_som();
191 Cerr <<
"Error in Sauvegarde_Reprise_Maillage_FT::lire_xyz : source domain has bad dimension" << finl;
196 const int chunk_size = 65536;
198 ArrOfInt indice_global_sommet;
199 const Domaine *
const domaine = (domaine_vf ? &domaine_vf->
domaine() : 0);
201 int erreur_sommets_exterieurs = 0;
209 const int nb_elements_reels = (domaine_vf ? domaine->
nb_elem() : 0);
210 while (i < nb_som_tot)
212 const int n_to_read = std::min(chunk_size, nb_som_tot - i);
213 tmp.
resize(n_to_read, dim);
225 for (
int j = 0; j < n_to_read; j++)
226 for (
int k = 0; k < dim; k++)
227 tmp(j, k) = coord(i+j, k);
231 domaine->chercher_elements(tmp, tmp2);
233 for (
int j = 0; j < n_to_read; j++)
234 if (tmp2[j] >= nb_elements_reels)
243 for (
int j = 0; j < n_to_read; j++)
253 recevoir(tmp3, moi - 1, moi, 0 );
254 for (
int j = 0; j < n_to_read; j++)
257 else if (tmp2[j] >= 0)
262 envoyer(tmp3, moi, moi + 1, 0 );
267 for (
int j = 0; j < n_to_read; j++)
273 erreur_sommets_exterieurs=1;
277 for (
int j = 0; j < n_to_read; j++)
293 if (erreur_sommets_exterieurs)
295 Cerr <<
"Erreur a la lecture d'un maillage front-tracking :\n"
296 <<
" Certains sommets sont a l'exterieur du maillage eulerien.\n"
297 <<
" On ne sait pas encore traiter ce cas." << finl;
306 (*fichier) >> n >> dummy_int;
314 while (i < nb_som_tot)
316 const int n_to_read = std::min(chunk_size, nb_som_tot - i);
317 tmp.
resize(n_to_read, dim);
326 for (
int j = 0; j < n_to_read; j++)
327 for (
int k = 0; k < dim; k++)
328 tmp(j, k) = coord(i+j, k);
332 for (
int j = 0; j < n_to_read; j++)
334 const int i_glob = i+j;
336 if (i_sommet >= nb_sommets_locaux || i_glob != indice_global_sommet[i_sommet])
338 for (
int k = 0; k < dim; k++)
339 mesh.
sommets_(i_sommet, k) = tmp(j, k);
345 assert(domaine_vf == 0 || i_sommet == mesh.
nb_sommets());
356 const IntTab * elem_faces = (domaine_vf ? &domaine_vf->
elem_faces() : 0);
357 const int nb_faces_bord = (domaine ? domaine->nb_faces_frontiere() : 0);
358 while (i < nb_som_tot)
360 const int n_to_read = std::min(chunk_size, nb_som_tot - i);
365 for (
int j = 0; j < n_to_read; j++)
367 const int i_glob = i+j;
369 if (i_sommet >= nb_sommets_locaux || i_glob != indice_global_sommet[i_sommet])
372 const int i_face_local = tmp[j];
373 if (i_face_local >= 0)
376 i_face = (*elem_faces)(elem, i_face_local);
377 if (i_face >= nb_faces_bord)
382 Cerr <<
"Erreur a la relecture des faces de bord" << finl;
392 assert(domaine_vf == 0 || i_sommet == mesh.
nb_sommets());
403 IntTab facettes(0, dim);
407 (*fichier) >> nb_faces_tot >> dummy_int;
408 assert(dummy_int == dim);
413 nb_faces_tot = domaine_src->
nb_elem();
416 Cerr <<
"Error in Sauvegarde_Reprise_Maillage_FT::lire_xyz : source domain elements have bad dimension" << finl;
423 while (i < nb_faces_tot)
425 const int n_to_read = std::min(chunk_size, nb_faces_tot - i);
426 tmp.
resize(n_to_read, dim);
432 const IntTab& elems = domaine_src->
les_elems();
433 for (
int j = 0; j < n_to_read; j++)
434 for (
int k = 0; k < dim; k++)
435 tmp(j, k) = elems(i+j, k);
439 for (
int j = 0; j < n_to_read; j++)
442 const int i_som = tmp(j, 0);
444 const int i_som_loc = array_bsearch(indice_global_sommet, i_som);
449 facettes.
resize(n+1, dim);
450 for (
int k = 0; k < dim; k++)
451 facettes(n, k) = tmp(j, k);
466 for (
int i = 0; i < n; i++)
481 ArrOfIntFT liste_sommets_to_send;
483 ArrOfIntFT liste_pe_to_send;
487 ArrOfInt liste_sommets_globaux;
491 const ArrOfInt& liste_tous_sommets = facettes;
493 ArrOfInt& liste_sommets_locaux = mesh.
facettes_;
494 const int n = liste_tous_sommets.
size_array();
495 for (
int i = 0; i < n; i++)
497 const int som = liste_tous_sommets[i];
498 const int i_som_loc = array_bsearch(indice_global_sommet, som);
499 liste_sommets_locaux[i] = i_som_loc;
503 array_trier_retirer_doublons(liste_sommets_globaux);
507 int next_pe = (pe_sender + 1) % nproc;
508 int prec_pe = (pe_sender + nproc - 1) % nproc;
511 const int send_list_size = (pe_sender == next_pe ? 0 : 1);
512 ArrOfInt send_list(send_list_size);
513 ArrOfInt recv_list(send_list_size);
516 send_list[0] = next_pe;
517 recv_list[0] = prec_pe;
524 for (
int num_proc = 0; num_proc < nproc - 1; num_proc++)
529 pe_sender = (pe_sender + nproc - 1) % nproc;
532 schema_comm.
send_buffer(next_pe) << liste_sommets_globaux;
534 schema_comm.
recv_buffer(prec_pe) >> liste_sommets_globaux;
538 const int n = liste_sommets_globaux.
size_array();
541 for (
int i = 0; i < n; i++)
543 const int som = liste_sommets_globaux[i];
544 const int i_som_loc = array_bsearch(indice_global_sommet, som);
556 liste_sommets_globaux = new_list;
563 Cerr <<
"Erreur sur PE " << moi <<
" : les sommets d'indices suivants"
564 <<
" ne sont sur aucun processeur\n" << liste_sommets_globaux << finl;
568 reverse_send_recv_pe_list(send_list, recv_list);
576 const int nb_sommets_reels = indice_global_sommet.
size_array();
582 const int nb_sommets_tot = indice_global_sommet.
size_array();
584 const ArrOfInt& indices_globaux = facettes;
585 ArrOfInt& indices_locaux = mesh.
facettes_;
587 for (
int i = 0; i < n; i++)
589 if (indices_locaux[i] < 0)
591 const int indice_global = indices_globaux[i];
594 for (indice_local = nb_sommets_reels; indice_local < nb_sommets_tot; indice_local++)
595 if (indice_global_sommet[indice_local] == indice_global)
597 assert(indice_local < nb_sommets_tot);
598 indices_locaux[i] = indice_local;
606 for (
int i = 0; i < n; i++)
int_t nb_som() const
Renvoie le nombre de sommets du domaine.
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est