306 statistics().create_custom_counter(
"Remaillage local: suppressions / divisions aretes",3,
"FrontTracking");
307 statistics().begin_count(
"Remaillage local: suppressions / divisions aretes",statistics().get_last_opened_counter_level()+1);
311 static int compteur = 0;
312 static int test_val = -1;
322 if (compteur == test_val)
331 IntTabFT tab_aretesMarquees;
333 DoubleTabFT tab_deplacement_somD;
339 tab_deplacement_somD,
343 const int nb_aretes_divis = tab_aretesMarquees.
dimension(0);
347 const int nb_facettes0 = nb_facettes;
349 const int nb_som_par_facette = facettes.
dimension(1);
352 int fa7,iarete, isom,som,isom_s,som_s,isom_ss,som_ss, pe_somD,numOwner_somD,somD,somD_s,somD_ss;
355 const int nb_aretes_par_facette = (dimension3)?3:1;
357 IntTabFT tab_fa7Divis(nb_facettes,nb_aretes_par_facette);
358 for (fa7=0 ; fa7<nb_facettes ; fa7++)
360 for (isom=0 ; isom<nb_aretes_par_facette ; isom++)
362 tab_fa7Divis(fa7,isom) = -1;
367 for (iarete=0 ; iarete<nb_aretes_divis ; iarete++)
369 fa7 = tab_aretesMarquees(iarete,0);
370 isom = tab_aretesMarquees(iarete,1);
371 isom_s = (isom+1)%nb_som_par_facette;
373 som = facettes(fa7,isom);
375 som_s = facettes(fa7,isom_s);
377 pe_somD = tab_aretesMarquees(iarete,2);
378 numOwner_somD = tab_aretesMarquees(iarete,3);
389 somD = numOwner_somD;
392 tab_fa7Divis(fa7,isom) = somD;
400 int nb_areteScinder, isom0=-1,isom1=-1;
405 for (fa7=0 ; fa7<nb_facettes0 ; fa7++)
409 for (isom=0 ; isom<nb_aretes_par_facette ; isom++)
411 if (tab_fa7Divis(fa7,isom)>=0)
413 if (nb_areteScinder==0)
424 if (nb_areteScinder==1)
426 double concentration_surfactant_avant_decoupage = surfactant[fa7];
428 somD = tab_fa7Divis(fa7,isom0);
430 isom_s = (isom0+1)%nb_som_par_facette;
431 som_s = facettes(fa7,isom_s);
432 facettes(fa7,isom_s) = somD;
433 surfactant[fa7]=concentration_surfactant_avant_decoupage;
442 isom_ss = (isom_s+1)%nb_som_par_facette;
443 som_ss = facettes(fa7,isom_ss);
444 compo_connexe_facettes[nb_facettes] = compo_connexe_facettes[fa7];
445 surfactant[nb_facettes]=concentration_surfactant_avant_decoupage;
448 facettes(nb_facettes,isom0) = somD;
449 facettes(nb_facettes,isom_s) = som_s;
453 facettes(nb_facettes,0) = som_ss;
454 facettes(nb_facettes,1) = somD;
455 facettes(nb_facettes,2) = som_s;
459 else if (nb_areteScinder==2)
463 double concentration_surfactant_avant_decoupage = surfactant[fa7];
464 if (nb_facettes+2>=facettes.
dimension(0))
472 if (isom1==(isom0+1)%nb_som_par_facette)
482 isom_ss = ((isom_s+1)%nb_som_par_facette);
483 som = facettes(fa7,isom);
484 som_s = facettes(fa7,isom_s);
485 som_ss = facettes(fa7,isom_ss);
486 somD = tab_fa7Divis(fa7,isom);
487 somD_s = tab_fa7Divis(fa7,isom_s);
488 somD_ss = tab_fa7Divis(fa7,isom_ss);
490 facettes(fa7,0) = som;
491 facettes(fa7,1) = somD;
492 facettes(fa7,2) = som_ss;
493 surfactant[fa7]=concentration_surfactant_avant_decoupage;
495 compo_connexe_facettes[nb_facettes] = compo_connexe_facettes[fa7];
496 facettes(nb_facettes,0) = somD;
497 facettes(nb_facettes,1) = som_s;
498 facettes(nb_facettes,2) = somD_s;
499 surfactant[nb_facettes]=concentration_surfactant_avant_decoupage;
502 compo_connexe_facettes[nb_facettes] = compo_connexe_facettes[fa7];
503 facettes(nb_facettes,0) = somD;
504 facettes(nb_facettes,1) = somD_s;
505 facettes(nb_facettes,2) = som_ss;
506 surfactant[nb_facettes]=concentration_surfactant_avant_decoupage;
509 else if (nb_areteScinder==3)
513 double concentration_surfactant_avant_decoupage = surfactant[fa7];
514 if (nb_facettes+3>=facettes.
dimension(0))
524 som = facettes(fa7,isom);
525 som_s = facettes(fa7,isom_s);
526 som_ss = facettes(fa7,isom_ss);
527 somD = tab_fa7Divis(fa7,isom);
528 somD_s = tab_fa7Divis(fa7,isom_s);
529 somD_ss = tab_fa7Divis(fa7,isom_ss);
531 facettes(fa7,0) = som;
532 facettes(fa7,1) = somD;
533 facettes(fa7,2) = somD_ss;
534 surfactant[fa7]=concentration_surfactant_avant_decoupage;
536 compo_connexe_facettes[nb_facettes] = compo_connexe_facettes[fa7];
537 facettes(nb_facettes,0) = somD;
538 facettes(nb_facettes,1) = som_s;
539 facettes(nb_facettes,2) = somD_s;
540 surfactant[nb_facettes]=concentration_surfactant_avant_decoupage;
543 compo_connexe_facettes[nb_facettes] = compo_connexe_facettes[fa7];
544 facettes(nb_facettes,0) = somD_s;
545 facettes(nb_facettes,1) = som_ss;
546 facettes(nb_facettes,2) = somD_ss;
547 surfactant[nb_facettes]=concentration_surfactant_avant_decoupage;
550 compo_connexe_facettes[nb_facettes] = compo_connexe_facettes[fa7];
551 facettes(nb_facettes,0) = somD;
552 facettes(nb_facettes,1) = somD_s;
553 facettes(nb_facettes,2) = somD_ss;
554 surfactant[nb_facettes]=concentration_surfactant_avant_decoupage;
561 for (fa7=0 ; fa7<nb_facettes0 ; fa7++)
565 for (isom=0 ; isom<nb_aretes_par_facette ; isom++)
567 if (tab_fa7Divis(fa7,isom)>=0)
569 if (nb_areteScinder==0)
580 if (nb_areteScinder==1)
583 somD = tab_fa7Divis(fa7,isom0);
585 isom_s = (isom0+1)%nb_som_par_facette;
586 som_s = facettes(fa7,isom_s);
587 facettes(fa7,isom_s) = somD;
595 isom_ss = (isom_s+1)%nb_som_par_facette;
596 som_ss = facettes(fa7,isom_ss);
597 compo_connexe_facettes[nb_facettes] = compo_connexe_facettes[fa7];
600 facettes(nb_facettes,isom0) = somD;
601 facettes(nb_facettes,isom_s) = som_s;
605 facettes(nb_facettes,0) = som_ss;
606 facettes(nb_facettes,1) = somD;
607 facettes(nb_facettes,2) = som_s;
611 else if (nb_areteScinder==2)
615 if (nb_facettes+2>=facettes.
dimension(0))
622 if (isom1==(isom0+1)%nb_som_par_facette)
632 isom_ss = ((isom_s+1)%nb_som_par_facette);
633 som = facettes(fa7,isom);
634 som_s = facettes(fa7,isom_s);
635 som_ss = facettes(fa7,isom_ss);
636 somD = tab_fa7Divis(fa7,isom);
637 somD_s = tab_fa7Divis(fa7,isom_s);
638 somD_ss = tab_fa7Divis(fa7,isom_ss);
640 facettes(fa7,0) = som;
641 facettes(fa7,1) = somD;
642 facettes(fa7,2) = som_ss;
644 compo_connexe_facettes[nb_facettes] = compo_connexe_facettes[fa7];
645 facettes(nb_facettes,0) = somD;
646 facettes(nb_facettes,1) = som_s;
647 facettes(nb_facettes,2) = somD_s;
650 compo_connexe_facettes[nb_facettes] = compo_connexe_facettes[fa7];
651 facettes(nb_facettes,0) = somD;
652 facettes(nb_facettes,1) = somD_s;
653 facettes(nb_facettes,2) = som_ss;
656 else if (nb_areteScinder==3)
660 if (nb_facettes+3>=facettes.
dimension(0))
669 som = facettes(fa7,isom);
670 som_s = facettes(fa7,isom_s);
671 som_ss = facettes(fa7,isom_ss);
672 somD = tab_fa7Divis(fa7,isom);
673 somD_s = tab_fa7Divis(fa7,isom_s);
674 somD_ss = tab_fa7Divis(fa7,isom_ss);
676 facettes(fa7,0) = som;
677 facettes(fa7,1) = somD;
678 facettes(fa7,2) = somD_ss;
680 compo_connexe_facettes[nb_facettes] = compo_connexe_facettes[fa7];
681 facettes(nb_facettes,0) = somD;
682 facettes(nb_facettes,1) = som_s;
683 facettes(nb_facettes,2) = somD_s;
686 compo_connexe_facettes[nb_facettes] = compo_connexe_facettes[fa7];
687 facettes(nb_facettes,0) = somD_s;
688 facettes(nb_facettes,1) = som_ss;
689 facettes(nb_facettes,2) = somD_ss;
692 compo_connexe_facettes[nb_facettes] = compo_connexe_facettes[fa7];
693 facettes(nb_facettes,0) = somD;
694 facettes(nb_facettes,1) = somD_s;
695 facettes(nb_facettes,2) = somD_ss;
708 ArrOfIntFT liste_sommets_sortis;
709 ArrOfIntFT numero_face_sortie;
714 maillage.
deplacer_sommets(tab_somD,tab_deplacement_somD,liste_sommets_sortis,numero_face_sortie);
721 <<
" nb_aretes_divisees_on_proc="<< nb_aretes_divis;
722 Process::Journal()<<
" nb_aretes_divisees_tot="<< nb_aretes_divis_tot<<finl;
725 statistics().end_count(
"Remaillage local: suppressions / divisions aretes");
727 return nb_aretes_divis_tot;
735 ArrOfDouble& varVolume)
const
742 statistics().create_custom_counter(
"Supprimer_petites_aretes",3,
"FrontTracking");
743 statistics().begin_count(
"Supprimer_petites_aretes",statistics().get_last_opened_counter_level()+1);
746 int nb_sommets_supprimes_tot = 0;
747 int nb_sommets_supprimes = 0;
753 IntTabFT remplacement_ilocal(0,2);
758 IntTabFT tab_aretesMarquees;
761 DoubleTabFT tab_deplacement_somD;
765 tab_deplacement_somD,
774 IntTabFT sommets_remplacement;
775 SPA_choisir_sommets_remplacement(maillage,
777 sommets_remplacement);
782 ArrOfIntFT request_sommets_pe;
783 ArrOfIntFT request_sommets_num;
787 assert(nb_sommets == sommets_remplacement.
dimension(0));
788 for (i = 0; i < nb_sommets; i++)
790 const int pe = sommets_remplacement(i,0);
791 const int som= sommets_remplacement(i,1);
813 request_sommets_num);
822 for (ii = old_size; ii < new_size; ii++)
827 ArrOfIntFT request_sommets_ilocal;
833 request_sommets_ilocal);
835 const int n_rempl = remplacement_ilocal.
dimension(0);
836 for (i = 0; i < n_rempl; i++)
838 int som_new = remplacement_ilocal(i,1);
841 som_new = request_sommets_ilocal[j];
842 remplacement_ilocal(i,1) = som_new;
852 const DoubleTab& sommets = maillage.
sommets();
854 const int n_rempl = remplacement_ilocal.
dimension(0);
855 DoubleTabFT position_finale(sommets);
858 for (i = 0; i < n_rempl; i++)
860 const int som_old = remplacement_ilocal(i,0);
861 const int som_new = remplacement_ilocal(i,1);
863 for (j = 0; j < dim; j++)
864 position_finale(som_old, j) = position_finale(som_new, j);
867 ArrOfDoubleFT dvolume;
878 for (i = 0; i < n; i++)
883 varVolume[i] += dvolume[i];
886 for (i = 0; i < n_rempl; i++)
888 const int som_old = remplacement_ilocal(i,0);
889 const int som_new = remplacement_ilocal(i,1);
890 const double dv = varVolume[som_old];
891 varVolume[som_new] += dv;
892 varVolume[som_old] = 0;
907 ArrOfIntFT table_old_new(nb_som);
909 const int nb_rempl = remplacement_ilocal.
dimension(0);
910 for (
int i = 0; i < nb_rempl; i++)
912 const int som_old = remplacement_ilocal(i,0);
913 const int som_new = remplacement_ilocal(i,1);
914 table_old_new[som_old] = som_new;
917 const DoubleTab& sommets = maillage.
sommets_;
919 const int nb_facettes = facettes.
dimension(0);
920 const int nb_som_par_facette = facettes.
dimension(1);
945 double longueur_cara_fa7 = 0.;
947 for (
int fa = 0; fa < Sfa7.
size_array(); fa++)
949 longueur_cara_fa7 += Sfa7(fa);
956 longueur_cara_fa7 /= n ;
957 longueur_cara_fa7 = std::sqrt(longueur_cara_fa7);
963 DoubleTab liste_sommets_avant_deplacement(0, 3);
964 DoubleTab liste_sommets_apres_deplacement(0, 3);
965 ArrOfInt compo_connexe_sommets_deplace(0);
970 for (
int i = 0; i < nb_rempl; i++)
972 const int som_old = remplacement_ilocal(i,0);
973 const int som_new = remplacement_ilocal(i,1);
976 liste_sommets_avant_deplacement.
resize(index+1,3);
977 liste_sommets_apres_deplacement.
resize(index+1,3);
978 compo_connexe_sommets_deplace.
resize(index+1);
979 liste_sommets_avant_deplacement(index, 0) = sommets(som_old,0);
980 liste_sommets_avant_deplacement(index, 1) = sommets(som_old,1);
981 liste_sommets_avant_deplacement(index, 2) = sommets(som_old,2);
982 liste_sommets_apres_deplacement(index, 0) = sommets(som_new,0);
983 liste_sommets_apres_deplacement(index, 1) = sommets(som_new,1);
984 liste_sommets_apres_deplacement(index, 2) = sommets(som_new,2);
985 compo_connexe_sommets_deplace(index) = compo_connexe_sommet(som_old);
998 int nb_facettes_compo_complete = facettes_sommets_full_compo.
dimension(0);
999 int nbsom_compo_complete = liste_sommets_et_deplacements_full_compo.
dimension(0);
1020 for (
int indice_sommet_desordre = 0; indice_sommet_desordre < nbsom_compo_complete; indice_sommet_desordre++)
1022 int indice_sommet=sorted_index(indice_sommet_desordre);
1023 Vecteur3 pos(liste_sommets_et_deplacements_full_compo(indice_sommet,0),liste_sommets_et_deplacements_full_compo(indice_sommet,1),liste_sommets_et_deplacements_full_compo(indice_sommet,2));
1024 Vecteur3 pos_apres_dep(liste_sommets_et_deplacements_full_compo(indice_sommet,3),liste_sommets_et_deplacements_full_compo(indice_sommet,4),liste_sommets_et_deplacements_full_compo(indice_sommet,5));
1026 for (
int fa = 0; fa < nb_facettes_compo_complete; fa++)
1034 for (
int somfa7 = 0; somfa7 < nb_som_par_facette; somfa7++)
1036 double sx = facettes_sommets_full_compo(fa, 3*somfa7+0);
1037 double sy = facettes_sommets_full_compo(fa, 3*somfa7+1);
1038 double sz = facettes_sommets_full_compo(fa, 3*somfa7+2);
1040 Point3D p2 = {pos[0],pos[1],pos[2]};
1043 sx = facettes_sommets_full_compo(fa, 0);
1044 sy = facettes_sommets_full_compo(fa, 1);
1045 sz = facettes_sommets_full_compo(fa, 2);
1047 sx = facettes_sommets_full_compo(fa, 3);
1048 sy = facettes_sommets_full_compo(fa, 4);
1049 sz = facettes_sommets_full_compo(fa, 5);
1051 sx = facettes_sommets_full_compo(fa, 6);
1052 sy = facettes_sommets_full_compo(fa, 7);
1053 sz = facettes_sommets_full_compo(fa, 8);
1056 if (!(s0 == s1 or s1 == s2 or s0 == s2))
1067 for (
int dir = 0; dir < 3; dir++)
1068 facettes_sommets_full_compo(fa, 3*somfa7+dir)=pos_apres_dep[dir];
1070 facettes_sommets_full_compo(fa, 12)=n_apres_dep.
x;
1071 facettes_sommets_full_compo(fa, 13)=n_apres_dep.
y;
1072 facettes_sommets_full_compo(fa, 14)=n_apres_dep.
z;
1075 const int indice_fa_locale = int(facettes_sommets_full_compo(fa, 10));
1076 if(indice_fa_locale!=-1)
1079 const int i_sommet = facettes(indice_fa_locale,somfa7);
1080 const int new_sommet = table_old_new[i_sommet];
1081 facettes(indice_fa_locale,somfa7) = new_sommet;
1084 sx = facettes_sommets_full_compo(fa, 0);
1085 sy = facettes_sommets_full_compo(fa, 1);
1086 sz = facettes_sommets_full_compo(fa, 2);
1088 sx = facettes_sommets_full_compo(fa, 3);
1089 sy = facettes_sommets_full_compo(fa, 4);
1090 sz = facettes_sommets_full_compo(fa, 5);
1092 sx = facettes_sommets_full_compo(fa, 6);
1093 sy = facettes_sommets_full_compo(fa, 7);
1094 sz = facettes_sommets_full_compo(fa, 8);
1096 if (!(s0 == s1 or s1 == s2 or s0 == s2))
1105 for (
int somfa7bis = 0; somfa7bis < nb_som_par_facette; somfa7bis++)
1107 for (
int dir = 0; dir < 3; dir++)
1108 facettes_sommets_full_compo(fa, 3*somfa7bis+dir)=-123.;
1110 facettes_sommets_full_compo(fa, 9)=-123.;
1126 for (
int i = 0; i < nb_facettes; i++)
1131 if (nb_som_par_facette == 3)
1134 const int s0 = facettes(i,0);
1135 const int s1 = facettes(i,1);
1136 const int s2 = facettes(i,2);
1137 if (s0 == s2 || s1 == s2)
1146 nb_sommets_supprimes = remplacement_ilocal.
dimension(0);
1148 nb_sommets_supprimes_tot += nb_sommets_supprimes;
1152 while (nb_sommets_supprimes > 0);
1162 statistics().end_count(
"Supprimer_petites_aretes");
1163 return nb_sommets_supprimes_tot;