75 int nb_front_convergence=(int)
param.
get_valeur((
char*)
"Convergence_mailleur3d_frontal");
76 long Nb_front_max_mailleur3d=(long)
param.
get_valeur((
char*)
"Nb_front_max_mailleur3d");
79 std::vector<CAS_FRONT*> liste_cas;
88 if(nb>Nb_front_max_mailleur3d)
90 std::cerr <<
"*** MAILLEUR3D::progresse_front : Nb_front_max_mailleur3d atteint ! ***" << std::endl;
94 for (
int i=0;i<nb;i++)
97 if (nb>nb_front_convergence) fttmp->
ini_ifail();
110 if (numfront==(-1))
continue;
140 for (
int i=0;i<nb_seg;i++)
152 if (noeudtmp!=mgnoeud2)
153 if (noeudtmp!=mgnoeud3)
161 for (
int i=0;i<nb_seg;i++)
173 if (noeudtmp!=mgnoeud1)
174 if (noeudtmp!=mgnoeud3)
182 for (
int i=0;i<nb_seg;i++)
194 if (noeudtmp!=mgnoeud1)
195 if (noeudtmp!=mgnoeud2)
203 int nb_cas=liste_cas.size();
204 std::vector<CAS_FRONT*> liste_classe_cas[8];
207 for (
int j=0;j<nb_cas;j++)
214 if (cas->
liaison[0]==1) angle=std::min(angle,cas->
angle[0]);
215 if (cas->
liaison[1]==1) angle=std::min(angle,cas->
angle[1]);
216 if (cas->
liaison[2]==1) angle=std::min(angle,cas->
angle[2]);
223 if (cas->
liaison[0]==1) angle=std::min(angle,cas->
angle[0]);
224 if (cas->
liaison[1]==1) angle=std::min(angle,cas->
angle[1]);
225 if (cas->
liaison[2]==1) angle=std::min(angle,cas->
angle[2]);
232 if (cas->
liaison[0]==1) angle=std::min(angle,cas->
angle[0]);
233 if (cas->
liaison[1]==1) angle=std::min(angle,cas->
angle[1]);
234 if (cas->
liaison[2]==1) angle=std::min(angle,cas->
angle[2]);
242 if (cas->
liaison[0]==1) angle=std::min(angle,cas->
angle[0]);
243 if (cas->
liaison[1]==1) angle=std::min(angle,cas->
angle[1]);
244 if (cas->
liaison[2]==1) angle=std::min(angle,cas->
angle[2]);
252 if (cas->
liaison[0]==1) angle=std::min(angle,cas->
angle[0]);
253 if (cas->
liaison[1]==1) angle=std::min(angle,cas->
angle[1]);
254 if (cas->
liaison[2]==1) angle=std::min(angle,cas->
angle[2]);
262 if (cas->
liaison[0]==1) angle=std::min(angle,cas->
angle[0]);
263 if (cas->
liaison[1]==1) angle=std::min(angle,cas->
angle[1]);
264 if (cas->
liaison[2]==1) angle=std::min(angle,cas->
angle[2]);
285 std::vector<CAS_FRONT*> liste_classe_cas_temp;
286 liste_classe_cas_temp.insert(liste_classe_cas_temp.end(),cas);
287 solution=
traite_front(mgvol,type,ft,liste_cas,liste_classe_cas_temp,&cas);
300 while (bouclebis==
true);
304 sprintf(mess,
" Maillage terminé en %d couches et %d iterations",couche+1,
passe);
330 MG_NOEUD* noeud=liste_classe_cas[0]->mgnoeud;
347 MG_NOEUD* noeud=liste_classe_cas[0]->mgnoeud;
355 if (liste_classe_cas[0]->liaison[0]==0)
362 if (liste_classe_cas[0]->liaison[1]==0)
369 if (liste_classe_cas[0]->liaison[2]==0)
390 int nb_cas=liste_classe_cas.size();
393 qual=
new double[nb_cas];
397 for (
int i=0;i<nb_cas;i++)
399 MG_NOEUD* noeud=liste_classe_cas[i]->mgnoeud;
408 double* pos_max=std::max_element(qual,qual+nb_cas);
411 MG_NOEUD* noeud=liste_classe_cas[num]->mgnoeud;
413 if (tet!=NULL) fin=1;
421 if (liste_classe_cas[num]->liaison[0]==1)
429 if (liste_classe_cas[num]->liaison[1]==1)
437 if (liste_classe_cas[num]->liaison[2]==1)
464 int nb_cas=liste_classe_cas.size();
467 qual=
new double[nb_cas];
471 for (
int i=0;i<nb_cas;i++)
473 MG_NOEUD* noeud=liste_classe_cas[i]->mgnoeud;
481 double* pos_max=std::max_element(qual,qual+nb_cas);
483 int num=pos_max-qual;
484 MG_NOEUD* noeud=liste_classe_cas[num]->mgnoeud;
486 if (tet!=NULL) fin=1;
526 noeud_candidat=liste_noeud.
get(0);
527 int nb_cas=liste_cas.size();
528 for (
int i=0;i<nb_cas;i++)
529 if (liste_cas[i]->mgnoeud==noeud_candidat)
541 int nb_noeud_candidat=liste_noeud.
get_nb();
542 qual=
new double[nb_noeud_candidat];
544 for (
int i=0;i<nb_noeud_candidat;i++)
562 for (
int i=0;i<nb_noeud_candidat;i++)
566 double* max_i=std::max_element(qual,qual+nb_noeud_candidat);
569 int pos_max=max_i-qual;
572 liste_intersection.
vide();
573 tet=
insere_tetra(mgvol,ft,noeud,mode,liste_intersection);
574 if ((tet==NULL) && (liste_intersection.
get_nb()>0))
582 if (traite_reussi==
true)
597 else tet=
insere_tetra(mgvol,ft,noeud_candidat,mode,liste_intersection);
598 if ((tet==NULL) && (liste_intersection.
get_nb()>0))
606 if (traite_reussi==
true)
609 tet=
insere_tetra(mgvol,ft,noeud_candidat,mode,liste_intersection);
658 std::vector<CAS_FRONT*>::iterator i;
659 std::vector<CAS_FRONT*>::iterator nouveau = liste_cas.end();
661 for (i=liste_cas.begin();i!=liste_cas.end();i++)
663 if ((*i)->mgnoeud==noeud) nouveau=i;
667 if (nouveau==liste_cas.end())
669 cas=
new CAS_FRONT(type,noeud,numero_cote);
670 liste_cas.insert(liste_cas.end(),cas);
679 cas->
angle[numero_cote]=angle;
687 for (std::vector<CAS_FRONT*>::iterator i=liste_cas.begin();i!=liste_cas.end();i++)
715 static int nbpasse=0;
738 if (angle<ft->get_angle_voisin(0))
764 if (angle<ft->get_angle_voisin(1))
790 if (angle<ft->get_angle_voisin(2))
841 sprintf(chaine,
"%s.pfj",
nomlog.c_str());
842 inlog=fopen(chaine,
"wt");
844 sprintf(chaine,
"%s.frt2",
nomlog.c_str());
845 inlog=fopen(chaine,
"wb");
852 sprintf(chaine,
"%s.frt1",
nomlog.c_str());
853 inlog=fopen(chaine,
"wb");
861 fwrite(&nbnoeud,
sizeof(
int),1,
inlog);
862 fwrite(&nbseg,
sizeof(
int),1,
inlog);
863 fwrite(&nbtriangle2d,
sizeof(
int),1,
inlog);
864 fwrite(&nbtriangle,
sizeof(
int),1,
inlog);
865 for (
int i=0;i<nbnoeud;i++)
868 unsigned long num=noeud->
get_id();
869 fwrite(&num,
sizeof(
unsigned long),1,
inlog);
871 fwrite(xyz,
sizeof(
double),3,
inlog);
873 for (
int i=0;i<nbsegment;i++)
877 unsigned long num[3];
881 fwrite(num,
sizeof(
unsigned long),3,
inlog);
883 for (
int i=0;i<nbtriangle;i++)
886 unsigned long num[4];
891 fwrite(num,
sizeof(
unsigned long),4,
inlog);
901 for (
int i=0;i<12;i++)
911 unsigned long num=ft->get_triangle()->get_id();
912 fwrite(&num,
sizeof(
unsigned long),1,
inlog);
916 unsigned long num=fincouche;
917 fwrite(&num,
sizeof(
unsigned long),1,
inlog);
936 for (
int i=0;i<12;i++)
948 if (((
M3D_TRIANGLE*)(ft->get_triangle()))->get_nb_voisin()>1)
1002 if ((ft11!=ft) && (ft12!=ft) && (ft13!=ft) )
1004 if ((ft21!=ft) && (ft22!=ft) && (ft23!=ft) )
1006 if ((ft31!=ft) && (ft32!=ft) && (ft33!=ft) )