181 if ((
domaine.type_elem()->que_suis_je() ==
"Hexaedre") || (
domaine.type_elem()->que_suis_je() ==
"Hexaedre_VEF"))
183 IntTab& les_elems =
domaine.les_elems();
186 IntTab elem_traite(oldsz);
187 int oldnbsom =
domaine.nb_som();
188 IntTab new_elems(24 * oldsz, 4);
190 IntTab new_soms_old_elems(oldsz, 7);
197 Cerr <<
" NB ELEM : " << oldsz <<
" NB NODE : " << nbs << finl;
198 IntTab fait_sommet(3 * nbs, 4);
208 DoubleTab& sommets_dom =
domaine.les_sommets();
210 int dim_som_max = 16 * oldsz;
211 int dim_som_old = sommets_dom.
dimension(0);
212 sommets_dom.
resize(dim_som_max, 3);
215 DoubleTab new_soms(7, 3);
217 for (i = 0; i < oldsz; i++)
219 if (nface >= 3 * nbs)
221 Cerr <<
" The sizing of the array fait_sommet in Tetraedriser_homogene_compact::Trianguler is inappropriate " << finl;
225 int i0 = les_elems(i, 0);
226 int i1 = les_elems(i, 1);
227 int i2 = les_elems(i, 2);
228 int i3 = les_elems(i, 3);
229 int i4 = les_elems(i, 4);
230 int i5 = les_elems(i, 5);
231 int i6 = les_elems(i, 6);
232 int i7 = les_elems(i, 7);
247 indice(0) =
creer_sommet(
domaine, new_soms, elem_traite, new_soms_old_elems, 8, sommets, compteur, oldnbsom, nbnewsoms, fait_sommet, nface);
254 indice(1) =
creer_sommet(
domaine, new_soms, elem_traite, new_soms_old_elems, 4, sommets, compteur, oldnbsom, nbnewsoms, fait_sommet, nface);
261 indice(4) =
creer_sommet(
domaine, new_soms, elem_traite, new_soms_old_elems, 4, sommets, compteur, oldnbsom, nbnewsoms, fait_sommet, nface);
268 indice(3) =
creer_sommet(
domaine, new_soms, elem_traite, new_soms_old_elems, 4, sommets, compteur, oldnbsom, nbnewsoms, fait_sommet, nface);
275 indice(6) =
creer_sommet(
domaine, new_soms, elem_traite, new_soms_old_elems, 4, sommets, compteur, oldnbsom, nbnewsoms, fait_sommet, nface);
282 indice(2) =
creer_sommet(
domaine, new_soms, elem_traite, new_soms_old_elems, 4, sommets, compteur, oldnbsom, nbnewsoms, fait_sommet, nface);
289 indice(5) =
creer_sommet(
domaine, new_soms, elem_traite, new_soms_old_elems, 4, sommets, compteur, oldnbsom, nbnewsoms, fait_sommet, nface);
292 for (
int t = 0; t < 7; t++)
294 new_soms_old_elems(i, t) = indice(t);
297 Cerr <<
"Error negative index" << finl;
300 for (
int s = 0; s < t; s++)
301 if (indice(s) == indice(t))
303 Cerr <<
"Error repeated index" << finl;
308 for (
int j = 0; j < compteur; j++)
309 for (
int k = 0; k < 3; k++)
310 sommets_dom(dim_som_old + j, k) = new_soms(j, k);
311 dim_som_old += compteur;
318 new_elems(i, 0) = les_elems(i, 0);
319 new_elems(i, 1) = les_elems(i, 1);
320 new_elems(i, 2) = indice(1);
321 new_elems(i, 3) = indice(0);
323 new_elems(i + oldsz, 0) = les_elems(i, 1);
324 new_elems(i + oldsz, 1) = les_elems(i, 3);
325 new_elems(i + oldsz, 2) = indice(1);
326 new_elems(i + oldsz, 3) = indice(0);
329 new_elems(i + 2 * oldsz, 0) = les_elems(i, 3);
330 new_elems(i + 2 * oldsz, 1) = les_elems(i, 2);
331 new_elems(i + 2 * oldsz, 2) = indice(1);
332 new_elems(i + 2 * oldsz, 3) = indice(0);
335 new_elems(i + 3 * oldsz, 0) = les_elems(i, 2);
336 new_elems(i + 3 * oldsz, 1) = les_elems(i, 0);
337 new_elems(i + 3 * oldsz, 2) = indice(1);
338 new_elems(i + 3 * oldsz, 3) = indice(0);
343 new_elems(i + 4 * oldsz, 0) = les_elems(i, 4);
344 new_elems(i + 4 * oldsz, 1) = les_elems(i, 5);
345 new_elems(i + 4 * oldsz, 2) = indice(4);
346 new_elems(i + 4 * oldsz, 3) = indice(0);
349 new_elems(i + 5 * oldsz, 0) = les_elems(i, 5);
350 new_elems(i + 5 * oldsz, 1) = les_elems(i, 7);
351 new_elems(i + 5 * oldsz, 2) = indice(4);
352 new_elems(i + 5 * oldsz, 3) = indice(0);
355 new_elems(i + 6 * oldsz, 0) = les_elems(i, 7);
356 new_elems(i + 6 * oldsz, 1) = les_elems(i, 6);
357 new_elems(i + 6 * oldsz, 2) = indice(4);
358 new_elems(i + 6 * oldsz, 3) = indice(0);
361 new_elems(i + 7 * oldsz, 0) = les_elems(i, 6);
362 new_elems(i + 7 * oldsz, 1) = les_elems(i, 4);
363 new_elems(i + 7 * oldsz, 2) = indice(4);
364 new_elems(i + 7 * oldsz, 3) = indice(0);
369 new_elems(i + 8 * oldsz, 0) = les_elems(i, 0);
370 new_elems(i + 8 * oldsz, 1) = les_elems(i, 1);
371 new_elems(i + 8 * oldsz, 2) = indice(3);
372 new_elems(i + 8 * oldsz, 3) = indice(0);
375 new_elems(i + 9 * oldsz, 0) = les_elems(i, 1);
376 new_elems(i + 9 * oldsz, 1) = les_elems(i, 5);
377 new_elems(i + 9 * oldsz, 2) = indice(3);
378 new_elems(i + 9 * oldsz, 3) = indice(0);
381 new_elems(i + 10 * oldsz, 0) = les_elems(i, 5);
382 new_elems(i + 10 * oldsz, 1) = les_elems(i, 4);
383 new_elems(i + 10 * oldsz, 2) = indice(3);
384 new_elems(i + 10 * oldsz, 3) = indice(0);
387 new_elems(i + 11 * oldsz, 0) = les_elems(i, 4);
388 new_elems(i + 11 * oldsz, 1) = les_elems(i, 0);
389 new_elems(i + 11 * oldsz, 2) = indice(3);
390 new_elems(i + 11 * oldsz, 3) = indice(0);
395 new_elems(i + 12 * oldsz, 0) = les_elems(i, 2);
396 new_elems(i + 12 * oldsz, 1) = les_elems(i, 3);
397 new_elems(i + 12 * oldsz, 2) = indice(6);
398 new_elems(i + 12 * oldsz, 3) = indice(0);
401 new_elems(i + 13 * oldsz, 0) = les_elems(i, 3);
402 new_elems(i + 13 * oldsz, 1) = les_elems(i, 7);
403 new_elems(i + 13 * oldsz, 2) = indice(6);
404 new_elems(i + 13 * oldsz, 3) = indice(0);
407 new_elems(i + 14 * oldsz, 0) = les_elems(i, 7);
408 new_elems(i + 14 * oldsz, 1) = les_elems(i, 6);
409 new_elems(i + 14 * oldsz, 2) = indice(6);
410 new_elems(i + 14 * oldsz, 3) = indice(0);
413 new_elems(i + 15 * oldsz, 0) = les_elems(i, 6);
414 new_elems(i + 15 * oldsz, 1) = les_elems(i, 2);
415 new_elems(i + 15 * oldsz, 2) = indice(6);
416 new_elems(i + 15 * oldsz, 3) = indice(0);
421 new_elems(i + 16 * oldsz, 0) = les_elems(i, 0);
422 new_elems(i + 16 * oldsz, 1) = les_elems(i, 2);
423 new_elems(i + 16 * oldsz, 2) = indice(2);
424 new_elems(i + 16 * oldsz, 3) = indice(0);
427 new_elems(i + 17 * oldsz, 0) = les_elems(i, 2);
428 new_elems(i + 17 * oldsz, 1) = les_elems(i, 6);
429 new_elems(i + 17 * oldsz, 2) = indice(2);
430 new_elems(i + 17 * oldsz, 3) = indice(0);
433 new_elems(i + 18 * oldsz, 0) = les_elems(i, 6);
434 new_elems(i + 18 * oldsz, 1) = les_elems(i, 4);
435 new_elems(i + 18 * oldsz, 2) = indice(2);
436 new_elems(i + 18 * oldsz, 3) = indice(0);
439 new_elems(i + 19 * oldsz, 0) = les_elems(i, 4);
440 new_elems(i + 19 * oldsz, 1) = les_elems(i, 0);
441 new_elems(i + 19 * oldsz, 2) = indice(2);
442 new_elems(i + 19 * oldsz, 3) = indice(0);
447 new_elems(i + 20 * oldsz, 0) = les_elems(i, 1);
448 new_elems(i + 20 * oldsz, 1) = les_elems(i, 3);
449 new_elems(i + 20 * oldsz, 2) = indice(5);
450 new_elems(i + 20 * oldsz, 3) = indice(0);
453 new_elems(i + 21 * oldsz, 0) = les_elems(i, 3);
454 new_elems(i + 21 * oldsz, 1) = les_elems(i, 7);
455 new_elems(i + 21 * oldsz, 2) = indice(5);
456 new_elems(i + 21 * oldsz, 3) = indice(0);
459 new_elems(i + 22 * oldsz, 0) = les_elems(i, 7);
460 new_elems(i + 22 * oldsz, 1) = les_elems(i, 5);
461 new_elems(i + 22 * oldsz, 2) = indice(5);
462 new_elems(i + 22 * oldsz, 3) = indice(0);
465 new_elems(i + 23 * oldsz, 0) = les_elems(i, 5);
466 new_elems(i + 23 * oldsz, 1) = les_elems(i, 1);
467 new_elems(i + 23 * oldsz, 2) = indice(5);
468 new_elems(i + 23 * oldsz, 3) = indice(0);
472 sommets_dom.
resize(dim_som_old, 3);
473 les_elems.
ref(new_elems);
476 Cerr <<
"We have split the cubes..." << finl;
480 Cerr <<
"Splitting of the boundaries" << finl;
481 for (
auto &itr :
domaine.faces_bord())
483 Faces& les_faces = itr.faces();
484 les_faces.
typer(Type_Face::triangle_3D);
485 decoupe(
domaine, les_faces, new_soms_old_elems, fait_sommet, nface);
488 Cerr <<
"Splitting of the connectors" << finl;
489 for (
auto &itr :
domaine.faces_raccord())
491 Faces& les_faces = itr->faces();
492 les_faces.
typer(Type_Face::triangle_3D);
493 decoupe(
domaine, les_faces, new_soms_old_elems, fait_sommet, nface);
496 Cerr <<
"Splitting of the internal boundary faces" << finl;
497 for (
auto &itr :
domaine.bords_int())
499 Faces& les_faces = itr.faces();
500 les_faces.
typer(Type_Face::triangle_3D);
501 decoupe(
domaine, les_faces, new_soms_old_elems, fait_sommet, nface);
504 Cerr <<
"Splitting of the group of faces" << finl;
505 for (
auto &itr :
domaine.groupes_faces())
507 Faces& les_faces = itr.faces();
508 les_faces.
typer(Type_Face::triangle_3D);
509 decoupe(
domaine, les_faces, new_soms_old_elems, fait_sommet, nface);
512 Cerr <<
"END of Tetraedriser_homogene_compact..." << finl;
513 Cerr <<
" 1 NbElem=" <<
domaine.les_elems().dimension(0) <<
" NbNod=" <<
domaine.nb_som() << finl;
516 Cerr <<
"We do not yet know how to Tetraedriser_homogene_compact the " <<
domaine.type_elem()->que_suis_je() <<
"s" << finl;