89 double dist=
sqrt((xyz[0]-x)*(xyz[0]-x)+(xyz[1]-y)*(xyz[1]-y)+(xyz[2]-z)*(xyz[2]-z));
93 if (ps<0.) dist=-dist;
101 LISTE_MG_ARETE::iterator it;
115 xyz[0]=0.5*(xyz1[0]+xyz2[0]);
116 xyz[1]=0.5*(xyz1[1]+xyz2[1]);
117 xyz[2]=0.5*(xyz1[2]+xyz2[2]);
119 if (((
ot.estdansletetra(tet,xyz[0],xyz[1],xyz[2])>>1)&1)!=0)
return 1;
139 double ps=normal*dir;
148 IBrep TOIBREP::importer(std::string nomfichier,std::string nomfichieribrep,
MG_GROUPE_TOPOLOGIQUE* mggt)
154 for (
int i=0;i<nb;i++)
157 mggt->get(i)->get_topologie_sousjacente(&lst);
163 for (
int i=0;i<nbvol;i++)
169 affiche((
char*)
"Recherche aretes tangeantes");
173 sprintf(mess,
" Nombre d'aretes tangeantes %d",lstaretetan.
get_nb());
176 affiche((
char*)
"Traitement de base");
181 if (ele->get_dimension()==2) nbvraiface++;
184 std::string nomfichier2=nomfichier+
"_dis.sol";
188 nomfichier2=nomfichier+
"_ele.sol";
193 if (ele->get_dimension()!=2)
continue;
195 sprintf(mess,
"F %lu",ele->get_id());
204 sprintf(mess,
"A %lu",are->get_id());
211 double xmin=1e300,ymin=1e300,zmin=1e308;
212 double xmax=-1e300,ymax=-1e300,zmax=-1e308;
214 LISTE_FEM_NOEUD::iterator it2;
218 double* xyz=noeud->get_coord();
219 if (xyz[0]<xmin) xmin=xyz[0];
220 if (xyz[1]<ymin) ymin=xyz[1];
221 if (xyz[2]<zmin) zmin=xyz[2];
222 if (xyz[0]>xmax) xmax=xyz[0];
223 if (xyz[1]>ymax) ymax=xyz[1];
224 if (xyz[2]>zmax) zmax=xyz[2];
225 for (
int j=0;j<nbvraiface+lstaretetan.
get_nb();j++)
226 solution->
ecrire(1e300,i,j);
231 LISTE_FEM_ELEMENT3::iterator it3;
236 for (
int j=0;j<nbvraiface+lstaretetan.
get_nb();j++)
237 solution_ele->
ecrire(0,i,j);
241 for (
int i=0;i<nbface;i++)
248 sprintf(mess,
" Face %d numero %lu",i,face->
get_id());
251 if (!lst.
existe(face))
continue;
252 vector<MG_FACE*> lstface;
253 lstface.push_back(face);
299 sprintf(mess,
" Arete tangeante %d numero %lu",i,are->get_id());
307 affiche((
char*)
"Exportation IBREP");
308 IBrep brep=exporter_IBrep(nomfichieribrep,solution,solution_ele,mggt);
310 affiche((
char*)
"Decoupage maillage");
311 for (
int i=0;i<lstaretetan.
get_nb();i++)
313 for (
int i=0;i<nbface;i++)
316 affiche((
char*)
"Tag maillage");
401 double vol= (vec12&vec13)*vec14*1./6.;
477 for (
int i=0;i<nb;i++)
483 double u = -(x3 * y1 * z4 - x3 * y1 * z - y1 * z4 * x - z3 * y1 * x4 + z3 * y1 * x + y1 * z * x4 - y3 * x1 * z4 - z1 * y * x4 + z1 * y3 * x4 - z3 * x1 * y - z1 * y3 * x + y3 * x1 * z - z * x1 * y4 + z * x3 * y4 + z4 * y3 * x + z4 * x1 * y - z4 * x3 * y - z3 * y4 * x + z1 * y4 * x - z1 * x3 * y4 - y3 * z * x4 + z3 * x1 * y4 + z3 * y * x4 + z1 * x3 * y) / (-z1 * y2 * x3 - z1 * x2 * y4 - z1 * y3 * x4 + z1 * x2 * y3 + z1 * x3 * y4 + z3 * y1 * x4 + y2 * z3 * x1 + x2 * y1 * z4 - y1 * z2 * x4 + y1 * z2 * x3 + z1 * y2 * x4 + y3 * z2 * x4 + x1 * z2 * y4 - x1 * z2 * y3 - x3 * y1 * z4 - x3 * z2 * y4 - z3 * x1 * y4 + y2 * x3 * z4 - x2 * y3 * z4 + x2 * z3 * y4 - x2 * z3 * y1 - y2 * z3 * x4 - y2 * x1 * z4 + y3 * x1 * z4);
484 double v = (z1 * y4 * x + z1 * y2 * x4 - z1 * y2 * x + z1 * x2 * y - z1 * x2 * y4 - z1 * y * x4 + z4 * x1 * y - z * x1 * y4 + y2 * x1 * z - y1 * z4 * x + y1 * z * x4 + z * x2 * y4 - z * y2 * x4 + z4 * y2 * x - y4 * z2 * x + y * z2 * x4 - z4 * x2 * y + y1 * z2 * x - x2 * y1 * z - x1 * z2 * y + x2 * y1 * z4 - y1 * z2 * x4 + x1 * z2 * y4 - y2 * x1 * z4) / (-z1 * y2 * x3 - z1 * x2 * y4 - z1 * y3 * x4 + z1 * x2 * y3 + z1 * x3 * y4 + z3 * y1 * x4 + y2 * z3 * x1 + x2 * y1 * z4 - y1 * z2 * x4 + y1 * z2 * x3 + z1 * y2 * x4 + y3 * z2 * x4 + x1 * z2 * y4 - x1 * z2 * y3 - x3 * y1 * z4 - x3 * z2 * y4 - z3 * x1 * y4 + y2 * x3 * z4 - x2 * y3 * z4 + x2 * z3 * y4 - x2 * z3 * y1 - y2 * z3 * x4 - y2 * x1 * z4 + y3 * x1 * z4);
485 double w = -(-y2 * x3 * z - y2 * z3 * x1 + y2 * z3 * x + y2 * x1 * z - z3 * y1 * x + y1 * z2 * x - y1 * z2 * x3 - y3 * x1 * z - y3 * z2 * x + x2 * y3 * z + x2 * z3 * y1 - x2 * z3 * y - x2 * y1 * z - x1 * z2 * y + x1 * z2 * y3 + z1 * x2 * y + x3 * z2 * y + z3 * x1 * y + z1 * y2 * x3 + z1 * y3 * x - z1 * y2 * x - z1 * x2 * y3 + x3 * y1 * z - z1 * x3 * y) / (-z1 * y2 * x3 - z1 * x2 * y4 - z1 * y3 * x4 + z1 * x2 * y3 + z1 * x3 * y4 + z3 * y1 * x4 + y2 * z3 * x1 + x2 * y1 * z4 - y1 * z2 * x4 + y1 * z2 * x3 + z1 * y2 * x4 + y3 * z2 * x4 + x1 * z2 * y4 - x1 * z2 * y3 - x3 * y1 * z4 - x3 * z2 * y4 - z3 * x1 * y4 + y2 * x3 * z4 - x2 * y3 * z4 + x2 * z3 * y4 - x2 * z3 * y1 - y2 * z3 * x4 - y2 * x1 * z4 + y3 * x1 * z4);
486 double sol=(1.-u-v-w)*sol1+u*sol2+v*sol3+w*sol4;
506 if (val1>0.00000001) signep++;
507 else if (val1<-0.00000001) signem++;
512 if (val2>0.00000001) signep++;
513 else if (val2<-0.00000001) signem++;
518 if (val3>0.00000001) signep++;
519 else if (val3<-0.00000001) signem++;
524 if (val4>0.00000001) signep++;
525 else if (val4<-0.00000001) signem++;
528 if ((signep==0) && (signem>0))
return -1;
529 if ((signem==0) && (signep>0))
return 1;
539 std::vector<TOIBREP_POINT*> lst;
540 LISTE_FEM_ELEMENT3::iterator ittetra;
542 tet->change_etat(1,0);
543 LISTE_FEM_NOEUD::iterator itnoeud;
545 no->change_etat(1,0);
548 double eps=1e-3*(tmax-tmin);
549 for (
int i=0;i<
NPAS+1;i++)
551 double t=tmin+i*1.0/
NPAS*(tmax-tmin);
552 double xyz[3],xyzplus[3],xyzmoins[3];
568 for (
int i=0;i<lst.size();i++)
578 if (tet->get_etat(1)==1)
continue;
583 for (
int k=0;k<nbeps;k++)
595 for (
int k=0;k<tet->get_nb_fem_noeud();k++)
598 tet->get_fem_noeud(k)->change_solution(dist);
599 tet->get_fem_noeud(k)->change_numero(pt->
get_id());
600 tet->change_etat(1,1);
601 tet->get_fem_noeud(k)->change_etat(1,1);
613 if (noeud->get_etat(1)==1) solution->
ecrire(noeud->get_solution(),i,numsol);
614 else solution->
ecrire(1e300,i,numsol);
620 if (tet->get_etat(1)==1) solution_ele->
ecrire(1.,i,numsol);
624 for (
int i=0;i<nbpt;i++)
delete lst[i];
633 for (
int i=0;i<nbbou;i++)
637 for (
int j=0;j<nb_arete;j++)
648 som->get_point()->evaluer(xyz);
653 for (
int k=0;k<N+1;k++)
656 uv2[0]=uv[0]+rayon*
cos(k*1.0/N*2.*M_PI);
657 uv2[1]=uv[1]+rayon*
sin(k*1.0/N*2.*M_PI);
677 for (
int i=0;i<nbbou;i++)
681 for (
int j=0;j<nb_arete;j++)
687 for (
int k=0;k<N+1;k++)
689 double t=tmin+k*1.0/N*(tmax-tmin);
716 sprintf(mess,
" Echantillonnage");
720 std::vector<TOIBREP_POINT*> lst;
738 LISTE_FEM_ELEMENT3::iterator ittetra;
740 tet->change_etat(1,0);
741 LISTE_FEM_NOEUD::iterator itnoeud;
743 no->change_etat(1,0);
758 double epsu=1e-3*(umax-umin);
759 double epsv=1e-3*(vmax-vmin);
760 for (
int i=0;i<
NPAS;i++)
761 for (
int j=0;j<
NPAS;j++)
764 uv[0]=umin+(i*1.0+0.5)/
NPAS*(umax-umin);
765 uv[1]=vmin+(j*1.0+0.5)/
NPAS*(vmax-vmin);
771 if (distance>0.) inte=1.;
else continue;
777 double uvtmp[2]={uv[0]+epsu,uv[1]};
787 double uvtmp[2]={uv[0]-epsu,uv[1]};
797 double uvtmp[2]={uv[0],uv[1]+epsv};
807 double uvtmp[2]={uv[0],uv[1]-epsv};
837 sprintf(mess,
" Preparation newton");
846 sprintf(mess,
" Newton");
854 sprintf(mess,
" Remplissage des trous");
873 for (
int i=0;i<nbpt;i++)
delete lst[i];
886 for (
int i=0;i<nbchamp;i++)
891 sscanf(nom.c_str(),
"%s %lu",nom2,&
id);
892 if (
id==face1->
get_id()) num1=i;
893 if (
id==face2->
get_id()) num2=i;
895 LISTE_FEM_ELEMENT3::iterator ittet;
899 if (solution_ele->
lire(i,num1)>0.000001)
900 lst_element3_concerne.
ajouter(tet);
901 if (solution_ele->
lire(i,num2)>0.000001)
902 lst_element3_concerne.
ajouter(tet);
913 std::vector<FEM_ELEMENT3*> couche;
917 if (tet->get_etat(1)!=0)
continue;
944 if ((nbactif==3) && (nbpositif<3) && (nbpositif>0))
946 couche.push_back(tet);
949 for (
int i=0;i<couche.size();i++)
968 lst->push_back(nvpt);
981 if (tet->get_etat(1)==0)
984 for (
int i=0;i<tet->get_nb_fem_noeud();i++)
986 if (reactive)
continue;
994 tet->change_etat(1,1);
1011 tet->change_etat(1,-1);
1016 while (couche_active==1);
1020 if (tet->get_etat(1)!=1)
continue;
1036 if (!(((nbnegatif>0) && (nbpositif>0)) ||(nbnegatif+nbpositif==1)))
1037 tet->change_etat(1,0);
1048 LISTE_FEM_ELEMENT3::iterator ittetra;
1053 std::vector<FEM_ELEMENT3*> couche;
1057 if (tet->get_etat(1)!=0)
continue;
1084 if ((nbactif==3) && (nbpositif<3) && (nbpositif>0))
1086 couche.push_back(tet);
1089 for (
int i=0;i<couche.size();i++)
1108 normal[0]=normal[0]*sens*(-1.);
1109 normal[1]=normal[1]*sens*(-1.);
1110 normal[2]=normal[2]*sens*(-1.);
1111 double dist2=
calculdist(normal,xyz[0],xyz[1],xyz[2],noeudref);
1112 if (dist2<0.) dist=dist*(-1);
1116 lst->push_back(nvpt);
1130 if (tet->get_etat(1)==0)
1133 double lstptdecoup[5*3];
1135 for (
int num=0;num<2;num++)
1136 for (
int i=0;i<tet->get_nb_xfem(num);i++)
1138 if (reactive)
continue;
1140 if (lstentitetopoface->
existe(mgt)==1)
1143 tet->change_etat(1,1);
1154 for (
int i=0;i<nb;i++)
1156 if (reactive)
continue;
1158 face->
inverser(uv,lstptdecoup+3*i);
1166 tet->change_etat(1,1);
1182 tet->change_etat(1,-1);
1187 while (couche_active==1);
1201 if (tet->get_etat(1)!=1)
continue;
1213 if (!(((nbnegatif>0) && (nbpositif>0)) ||(nbnegatif+nbpositif==1)))
1214 tet->change_etat(1,0);
1218 double res=cas*100.0/castot;
1220 sprintf(mess,
" %lf%% en %d couches",
res,nb_couche);
1226 sprintf(mess,
" pas de trou");
1233 std::vector<FEM_NOEUD*> lstno;
1241 if (t<0.0000000001) lstno.push_back(no1);
1242 else if (t>1.-0.0000000001) lstno.push_back(no2);
1249 no->change_solution(0.0);
1251 lstno.push_back(no);
1257 if (t<0.0000000001) lstno.push_back(no1);
1258 else if (t>1.-0.0000000001) lstno.push_back(no3);
1265 no->change_solution(0.0);
1267 lstno.push_back(no);
1273 if (t<0.0000000001) lstno.push_back(no1);
1274 else if (t>1.-0.0000000001) lstno.push_back(no4);
1281 no->change_solution(0.0);
1283 lstno.push_back(no);
1289 if (t<0.0000000001) lstno.push_back(no2);
1290 else if (t>1.-0.0000000001) lstno.push_back(no3);
1297 no->change_solution(0.0);
1299 lstno.push_back(no);
1306 if (t<0.0000000001) lstno.push_back(no2);
1307 else if (t>1.-0.0000000001) lstno.push_back(no4);
1314 no->change_solution(0.0);
1316 lstno.push_back(no);
1323 if (t<0.0000000001) lstno.push_back(no3);
1324 else if (t>1.-0.0000000001) lstno.push_back(no4);
1331 no->change_solution(0.0);
1333 lstno.push_back(no);
1338 int nb=lstno.size();
1342 lstnoeud[0]=lstno[0];
1343 lstnoeud[1]=lstno[1];
1344 lstnoeud[2]=lstno[2];
1358 lstnoeud[0]=lstno[0];
1359 lstnoeud[1]=lstno[1];
1360 lstnoeud[2]=lstno[2];
1366 lstnoeud[0]=lstno[0];
1367 lstnoeud[1]=lstno[1];
1368 lstnoeud[2]=lstno[3];
1379 lstnoeud[0]=lstno[0];
1380 lstnoeud[1]=lstno[1];
1381 lstnoeud[2]=lstno[2];
1387 lstnoeud[0]=lstno[0];
1388 lstnoeud[1]=lstno[2];
1389 lstnoeud[2]=lstno[3];
1400 lstnoeud[0]=lstno[0];
1401 lstnoeud[1]=lstno[1];
1402 lstnoeud[2]=lstno[3];
1408 lstnoeud[0]=lstno[0];
1409 lstnoeud[1]=lstno[2];
1410 lstnoeud[2]=lstno[3];
1421 lstnoeud[0]=lstno[0];
1422 lstnoeud[1]=lstno[1];
1423 lstnoeud[2]=lstno[2];
1429 lstnoeud[0]=lstno[1];
1430 lstnoeud[1]=lstno[2];
1431 lstnoeud[2]=lstno[3];
1442 lstnoeud[0]=lstno[0];
1443 lstnoeud[1]=lstno[1];
1444 lstnoeud[2]=lstno[3];
1450 lstnoeud[0]=lstno[1];
1451 lstnoeud[1]=lstno[2];
1452 lstnoeud[2]=lstno[3];
1463 lstnoeud[0]=lstno[0];
1464 lstnoeud[1]=lstno[2];
1465 lstnoeud[2]=lstno[3];
1471 lstnoeud[0]=lstno[1];
1472 lstnoeud[1]=lstno[2];
1473 lstnoeud[2]=lstno[3];
1636 for (
int i=n1;i<n2;i++)
1645 normal[0]=normal[0]*sens*(-1.);
1646 normal[1]=normal[1]*sens*(-1.);
1647 normal[2]=normal[2]*sens*(-1.);
1653 if (tet->get_etat(1)==1)
continue;
1658 for (
int k=0;k<nbeps;k++)
1670 for (
int k=0;k<tet->get_nb_fem_noeud();k++)
1672 double dist=
calculdist(normal,xyz[0],xyz[1],xyz[2],tet->get_fem_noeud(k));
1673 if (fabs(dist)<fabs(tet->get_fem_noeud(k)->get_solution()))
1675 tet->get_fem_noeud(k)->change_solution(dist);
1676 tet->get_fem_noeud(k)->change_numero(pt->
get_id());
1683 tet->change_etat(1,1);
1684 for (
int k=0;k<tet->get_nb_fem_noeud();k++)
1686 tet->get_fem_noeud(k)->change_etat(1,1);
1700 LISTE_FEM_NOEUD::iterator itno;
1702 if (no->get_solution()<1e250)
1706 double xyz[3],uv[2];
1709 if (no->get_solution()<0) signe=-1;
1710 no->change_solution(signe*dist);
1730 double xyz[3],dxyz[3],ddxyz[3];
1734 OT_VECTEUR_3D Ct_deriver_seconde(ddxyz[0],ddxyz[1],ddxyz[2]);
1736 tii=ti-Ct_deriver*Distance/(Ct_deriver_seconde*Distance+Ct_deriver.
get_longueur2());
1739 if (tii<are->get_tmin())
1750 while (eps>precision);
1753 double distance=(Ct-Pt).get_longueur();
1778 double d=-(sensv.
get_x()*xyz[0]+sensv.
get_y()*xyz[1],sensv.
get_z()*xyz[2]);
1781 if (sensv*distv<0.) dist=-dist;
1792 double delta_u,delta_v;
1799 double xyzduu[3],xyzdvv[3],xyzduv[3],xyzdu[3],xyzdv[3],xyz[3];
1810 a[1]=Su*Sv+Distance*Suv;
1811 a[2]=Su*Sv+Distance*Suv;
1813 b[0]=Distance*Su;b[0]=-b[0];
1814 b[1]=Distance*Sv;b[1]=-b[1];
1815 double deltau,deltav;
1816 double denominateur_delta=(
a[0]*
a[3]-
a[2]*
a[1]);
1819 else delta_u=(b[0]*
a[3]-b[1]*
a[1])/denominateur_delta;
1822 else delta_v=(
a[0]*b[1]-
a[2]*b[0])/denominateur_delta;
1825 uvii[0]=uvi[0]+delta_u;
1826 uvii[1]=uvi[1]+delta_v;
1837 delta_u=uvii[0]-uvi[0];
1838 delta_v=uvii[1]-uvi[1];
1842 while ((fabs(delta_u)>precision)||(fabs(delta_v)>precision));
1845 double distance=(S-Pt).get_longueur();
1866 LISTE_FEM_ELEMENT3::iterator ittet;
1869 tet->change_solution(0.);
1871 if (tet->get_fem_noeud(0)->get_solution()<1e200) {numsol++;tet->get_fem_noeud(0)->change_numero(1);}
else tet->get_fem_noeud(0)->change_numero(0);
1872 if (tet->get_fem_noeud(1)->get_solution()<1e200) {numsol++;tet->get_fem_noeud(1)->change_numero(1);}
else tet->get_fem_noeud(1)->change_numero(0);
1873 if (tet->get_fem_noeud(2)->get_solution()<1e200) {numsol++;tet->get_fem_noeud(2)->change_numero(1);}
else tet->get_fem_noeud(2)->change_numero(0);
1874 if (tet->get_fem_noeud(3)->get_solution()<1e200) {numsol++;tet->get_fem_noeud(3)->change_numero(1);}
else tet->get_fem_noeud(3)->change_numero(0);
1880 if (tet->get_fem_noeud(0)->get_numero()==0) tet->change_numero(0);
1881 else if (tet->get_fem_noeud(1)->get_numero()==0) tet->change_numero(1);
1882 else if (tet->get_fem_noeud(2)->get_numero()==0) tet->change_numero(2);
1883 else tet->change_numero(3);
1890 for (LISTE_FM::iterator i=trial.begin();i!=trial.end();i++)
1895 if (fabs(sol)>0.00000001)
1910 LISTE_FM_TRI::iterator itfin=trialtri.end();
1912 double longref=(*itfin).first;
1915 LISTE_FM_TRI::iterator it=trialtri.begin();
1917 double longcourant=(*it).first;
1923 std::cout <<
"BUGGGGGGG" <<std::endl;
1925 for (
int i=0;i<nbtetra;i++)
1928 if (tet2==tet)
continue;
1929 LISTE_FM_TRI_ID::iterator it=trialtriid.find(tet2->
get_id());
1930 if (it!=trialtriid.end())
1935 if (fabs(sol)>0.00000001)
1936 if (!((solution<1e200)&&(sol*solution<0)))
1937 if (fabs(sol)<fabs(solution))
1944 LISTE_FM::iterator it2=find(far.begin(),far.end(),tet2);
1963 if (fabs(sol)>0.00000001)
1965 if (!((ancsol<1e200) && (ancsol*sol<0.) ))
1980 if (trialtri.size()==0) fin=1;
1981 if (exterieur.size()>0)
1983 if (longcourant>longref)
1985 int nombre=exterieur.size();
1986 for (
int i=0;i<nombre;i++)
1991 for (
int nd=0;nd<4;nd++)
1995 for (
int i=0;i<nbtetra;i++)
1998 if (tet2==tet3)
continue;
1999 LISTE_FM::iterator it2=find(far.begin(),far.end(),tet3);
2009 LISTE_FM_TRI::iterator itfin=trialtri.end();
2011 longref=(*itfin).first;
2015 LISTE_FEM_NOEUD::iterator itnoeud;
2017 noeud->change_numero(0);
2020 if (tet->get_solution()>1e200)
continue;
2021 tet->get_fem_noeud(0)->change_numero(1);
2022 tet->get_fem_noeud(1)->change_numero(1);
2023 tet->get_fem_noeud(2)->change_numero(1);
2024 tet->get_fem_noeud(3)->change_numero(1);
2029 if (noeud->get_numero()==1) sol->
ecrire(noeud->get_solution(),i,numsol);
else sol->
ecrire(1e300,i,numsol);
2040 for (
int i=0;i<nbvol;i++)
2045 int nbmggt=mggt->
get_nb();
2046 for (
int i=0;i<nbmggt;i++)
2047 if (mggt->get(i)->get_dimension()==3)
2051 int nbvolexp=lst.
get_nb();
2052 for (
int i=0;i<nbvolexp;i++)
2056 IVolumeN ivoltmp(vol->
get_id());
2057 pair<IVolume*,bool> pair_ivol=brep.AddVolume(ivoltmp);
2059 IVolume* ivol=pair_ivol.first;
2060 for (
int j=0;j<nbcoq;j++)
2064 IShell ishell(nbface);
2065 for (
int k=0;k<nbface;k++)
2068 ishell[k]=coface->
get_id();
2071 ICoFaceN icoface(coface->
get_id(),face->
get_id(),sens);
2072 brep.AddCoFace(icoface);
2073 IFace* iface=brep.GetFace(face->
get_id());
2076 IFaceN ifacenew(face->
get_id());
2077 pair<IFace*,bool> pair_iface=brep.AddFace(ifacenew);
2079 iface=pair_iface.first;
2081 for (
int l=0;l<nbbou;l++)
2086 for (
int m=0;
m<nbare;
m++)
2093 brep.AddCoEdge(icoedge);
2094 IEdge* iedge=brep.GetEdge(are->
get_id());
2095 IVertex *ivertex1,*ivertex2;
2096 ICoVertex *icover1,*icover2;
2105 pair<ICoVertex*,bool> pair_icover1=brep.AddCoVertex(icovertmp1);
2106 pair<ICoVertex*,bool> pair_icover2=brep.AddCoVertex(icovertmp2);
2107 icover1=pair_icover1.first;
2108 icover2=pair_icover2.first;
2110 ivertex1=brep.GetVertex(ver1->
get_id());
2111 ivertex2=brep.GetVertex(ver2->
get_id());
2117 IVertexN ivertex(ver1->
get_id(),xyz);
2118 pair<IVertex*,bool> pair_ivertex1=brep.AddVertex(ivertex);
2120 ivertex1=pair_ivertex1.first;
2127 IVertexN ivertex(ver2->
get_id(),xyz);
2128 pair<IVertex*,bool> pair_ivertex2=brep.AddVertex(ivertex);
2130 ivertex2=pair_ivertex2.first;
2132 ivertex1->AddCoVertex(cover1->
get_id());
2133 ivertex2->AddCoVertex(cover2->
get_id());
2134 pair<IEdge*,bool> pair_iedge=brep.AddEdge(iedgetmp);
2136 iedge=pair_iedge.first;
2138 iedge->AddCoEdge(coare->
get_id(),brep);
2141 icover1=brep.GetCoVertex(iedge->FromCoVertex());
2142 ivertex1=brep.GetVertex(icover1->Vertex());
2143 ivertex1->AddFace(face->
get_id());
2147 icover2=brep.GetCoVertex(iedge->ToCoVertex());
2148 ivertex2=brep.GetVertex(icover2->Vertex());
2149 ivertex2->AddFace(face->
get_id());
2152 iface->AddLoop(iloop);
2155 iface->AddCoFace(coface->
get_id());
2157 ivol->AddShell(ishell);
2161 for (
int i=0;i<nbsol;i++)
2166 sscanf(nom.c_str(),
"%s %lu",nom2,&
id);
2167 std::pair<IField *,bool> fld=brep.AddField(
id);
2170 IField *
f=fld.first;
2174 LISTE_FEM_NOEUD::iterator itnoeud;
2179 for (
int j=0;j<nbsol;j++)
2181 if (solution->
lire(i,j)<1e200) nbsolnoeud++;
2183 double *xyz=noeud->get_coord();
2184 INodeN inoeudtmp(noeud->get_id(),xyz[0],xyz[1],xyz[2],nbsolnoeud);
2185 pair<INode*,bool> pair_inoeud=brep.AddNode(inoeudtmp);
2186 INode* inoeud=pair_inoeud.first;
2188 IBrep::iterator_fields itf=brep.begin_fields();
2189 for (
int j=0;j<nbsol;j++)
2191 if (solution->
lire(i,j)<1e200)
2193 inoeud->Fields()[num]=(*itf).num;
2194 inoeud->Values()[num]=solution->
lire(i,j);
2201 LISTE_FEM_ELEMENT3::iterator ittet;
2207 for (
int j=0;j<nbsol;j++)
2209 if (fabs(solution_ele->
lire(i,j)-1.)<0.0000000001) nbsolele++;
2211 IElementN xfemele(IElement::TETRAHEDRON,nbsolele);
2214 xfemele.GetNode(0)=tet->get_fem_noeud(0)->get_id();
2215 xfemele.GetNode(1)=tet->get_fem_noeud(1)->get_id();
2216 xfemele.GetNode(2)=tet->get_fem_noeud(2)->get_id();
2217 xfemele.GetNode(3)=tet->get_fem_noeud(3)->get_id();
2219 IBrep::iterator_fields itf=brep.begin_fields();
2220 for (
int j=0;j<nbsol;j++)
2222 if (fabs(solution_ele->
lire(i,j)-1.)<0.0000000001)
2224 xfemele.Fields()[num]=(*itf).num;
2229 brep.AddElement(xfemele);
2236 std::ofstream output(chemin.c_str());
2237 output << brep << std::endl;
2306 if (fabs(det)<1e-10)
return 0;
2310 if (uv[2]<1e-10)
return 0;
2311 if (uv[2]>1.-1e-10)
return 0;
2312 if (uv[0]<-1e-10)
return 0;
2313 if (uv[0]>1+1e-10)
return 0;
2314 if (uv[1]<-1e-10)
return 0;
2315 if (uv[1]>1+1e-10)
return 0;
2316 if (uv[0]+uv[1]<-1e-10)
return 0;
2317 if (uv[0]+uv[1]>1+1e-10)
return 0;
2333 if (uv[2]>are->
get_tmax())
return 0;
2340 if (nbiter>40) ok=2;
2341 double arexyz[3],darexyz[3];
2344 double f1=ori.
get_x()+uv[0]*vec1.
get_x()+uv[1]*vec2.
get_x()-arexyz[0];
2345 double f2=ori.
get_y()+uv[0]*vec1.
get_y()+uv[1]*vec2.
get_y()-arexyz[1];
2346 double f3=ori.
get_z()+uv[0]*vec1.
get_z()+uv[1]*vec2.
get_z()-arexyz[2];
2348 vecdare=(-1.)*vecdare;
2355 if (fabs(det)<1e-10)
2359 uv[2]=tdep+0.05*titer;
2374 if (fabs(dt)<1e-11) ok=1;
2377 if (ok==2)
return 0;
2378 if (uv[2]<tdep+1e-10)
return 0;
2379 if (uv[2]>are->
get_tmax()-1e-10)
return 0;
2380 if (uv[0]<-1e-10)
return 0;
2381 if (uv[0]>1+1e-10)
return 0;
2382 if (uv[1]<-1e-10)
return 0;
2383 if (uv[1]>1+1e-10)
return 0;
2384 if (uv[0]+uv[1]<-1e-10)
return 0;
2385 if (uv[0]+uv[1]>1+1e-10)
return 0;
2394 for (
int i=0;i<nb;i++)
2398 for (
int i=0;i<nb;i++)
2414 for (
int i=0;i<nb;i++)
2416 for (
int i=0;i<nb;i++)
2423 if (no->
get_id()==598016)
2424 std::cout << std::endl;
2427 if (status==0)
return 0;
2431 int aretetot=arete1+arete2+arete3;
2497 int facetot=face1+face2+face3+face4;
2557 for (
int i=nb-1;i>-1;i--)
2569 std::cout <<
"pb " << ele->
get_id() <<
" " << nb <<
"," << ele->
get_nb_xfem(3) <<
" xfem" << std::endl;
2576 std::map<double,FEM_NOEUD*> lstnoeud;
2580 double xyz1[3],xyz2[3],xyz3[3],xyz4[3],uv1[3],uv2[3],uv3[3],uv4[3];
2587 std::map<double,FEM_NOEUD*>::iterator it=lstnoeud.lower_bound(uv1[2]-1e-6);
2589 if (it!=lstnoeud.end())
2590 l=(uv1[2]-it->first)*(uv1[2]-it->first);
2591 if ((l>1e-10) || (it==lstnoeud.end()))
2595 std::pair<double,FEM_NOEUD*> tmp(uv1[2],no);
2596 lstnoeud.insert(tmp);
2601 std::map<double,FEM_NOEUD*>::iterator it=lstnoeud.lower_bound(uv2[2]-1e-6);
2603 if (it!=lstnoeud.end())
2604 l=(uv2[2]-it->first)*(uv2[2]-it->first);
2605 if ((l>1e-10) || (it==lstnoeud.end()))
2609 std::pair<double,FEM_NOEUD*> tmp(uv2[2],no);
2610 lstnoeud.insert(tmp);
2615 std::map<double,FEM_NOEUD*>::iterator it=lstnoeud.lower_bound(uv3[2]-1e-6);
2617 if (it!=lstnoeud.end())
2618 l=(uv3[2]-it->first)*(uv3[2]-it->first);
2619 if ((l>1e-10) || (it==lstnoeud.end()))
2623 std::pair<double,FEM_NOEUD*> tmp(uv3[2],no);
2624 lstnoeud.insert(tmp);
2629 std::map<double,FEM_NOEUD*>::iterator it=lstnoeud.lower_bound(uv4[2]-1e-6);
2631 if (it!=lstnoeud.end())
2632 l=(uv4[2]-it->first)*(uv4[2]-it->first);
2633 if ((l>1e-10) || (it==lstnoeud.end()))
2637 std::pair<double,FEM_NOEUD*> tmp(uv4[2],no);
2638 lstnoeud.insert(tmp);
2642 int nbnoeudcree=lstnoeud.size();
2643 for (std::map<double,FEM_NOEUD*>::iterator it=lstnoeud.begin();it!=lstnoeud.end();it++)
2645 std::pair<double,FEM_NOEUD*> tmp(0.,xseg->
get_fem_noeud(0));
2646 lstnoeud.insert(tmp);
2647 std::pair<double,FEM_NOEUD*> tmp2(1.,xseg->
get_fem_noeud(1));
2648 lstnoeud.insert(tmp2);
2649 std::map<double,FEM_NOEUD*>::iterator it=lstnoeud.begin();
2650 std::map<double,FEM_NOEUD*>::iterator it2=lstnoeud.begin();
2652 for (
int i=0;i<nbnoeudcree+1;i++)
2664 std::cout <<
" toto " << std::endl;
2733 if (tet->
get_id()==433021)
2734 std::cout <<
"ttoot";
2735 if (nb_xtri!=2)
return;
2749 if (tab1[0]!=tab2[0])
2750 if (tab1[0]!=tab2[1])
2751 if (tab1[0]!=tab2[2])
2753 tabnoeud[0]=tab1[0];
2754 tabnoeud[1]=tab1[1];
2755 tabnoeud[2]=tab1[2];
2757 if (tab1[1]!=tab2[0])
2758 if (tab1[1]!=tab2[1])
2759 if (tab1[1]!=tab2[2])
2761 tabnoeud[0]=tab1[1];
2762 tabnoeud[1]=tab1[2];
2763 tabnoeud[2]=tab1[0];
2765 if (tab1[2]!=tab2[0])
2766 if (tab1[2]!=tab2[1])
2767 if (tab1[2]!=tab2[2])
2769 tabnoeud[0]=tab1[2];
2770 tabnoeud[1]=tab1[0];
2771 tabnoeud[2]=tab1[1];
2773 if (tab2[2]!=tab1[0])
2774 if (tab2[2]!=tab1[1])
2775 if (tab2[2]!=tab1[2])
2776 tabnoeud[3]=tab2[2];
2777 if (tab2[1]!=tab1[0])
2778 if (tab2[1]!=tab1[1])
2779 if (tab2[1]!=tab1[2])
2780 tabnoeud[3]=tab2[1];
2781 if (tab2[0]!=tab1[0])
2782 if (tab2[0]!=tab1[1])
2783 if (tab2[0]!=tab1[2])
2784 tabnoeud[3]=tab2[0];
2787 for (
int i=0;i<nbxfem1;i++)
2792 if ((no1->
get_id()==598025) && (no2->
get_id()==598034))
2793 std::cout <<
"ttoot";
2794 if ((no2->
get_id()==598025) && (no1->
get_id()==598034))
2795 std::cout <<
"ttoot";
2802 std::cout << tet->
get_id();
2818 listeasupprimer.
ajouter(xfem1);
2821 for (
int i=0;i<listeasupprimer.
get_nb();i++)
2830 for (
int i=0;i<nb;i++)
2857 if (dir*dircor<0) dircor=(-1.)*dircor;
2860 double vecnormal[3];
2866 for (
int j=0;j<nbxtri;j++)
2876 OT_VECTEUR_3D dirxtri(x/3.-xyz1[0],y/3.-xyz1[1],z/3.-xyz1[2]);
2878 if (dirxtri*vecext>0.)
2938 OT_VECTEUR_3D vec1(tabnoeud[0]->get_coord(),tabnoeud[1]->get_coord());
2939 OT_VECTEUR_3D vec2(tabnoeud[0]->get_coord(),tabnoeud[2]->get_coord());
2948 if (xtri->
get_id()==616861)
2949 std::cout<<
""<<std::endl;
2950 if (xtri->
get_id()==616862)
2951 std::cout<<
""<<std::endl;
2952 if (xtri->
get_id()==616855)
2953 std::cout<<
""<<std::endl;
2968 double *xyz=no->get_coord();
2972 if (no->get_lien_topologie()==NULL)
2973 no->change_topologie_null(topo);
2987 double xmin=1e300,ymin=1e300,zmin=1e308;
2988 double xmax=-1e300,ymax=-1e300,zmax=-1e308;
2990 LISTE_FEM_NOEUD::iterator it2;
2993 double* xyz=noeud->get_coord();
2994 if (xyz[0]<xmin) xmin=xyz[0];
2995 if (xyz[1]<ymin) ymin=xyz[1];
2996 if (xyz[2]<zmin) zmin=xyz[2];
2997 if (xyz[0]>xmax) xmax=xyz[0];
2998 if (xyz[1]>ymax) ymax=xyz[1];
2999 if (xyz[2]>zmax) zmax=xyz[2];
3002 BOITE_3D boite(xmin,ymin,zmin,xmax,ymax,zmax);
3007 LISTE_FEM_ELEMENT3::iterator it3;
3019 std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*>::iterator it;
3023 ele->get_topologie_sousjacente(&lst);
3029 for (
int i=0;i<nbvol;i++)
3040 sprintf(mess,
" Predecoupage sommets");
3044 if (eletopo->get_dimension()==0)
3080 sprintf(mess,
" ---> CPU : %lf",tps);
3088 sprintf(mess,
" Predecoupage aretes");
3092 if (eletopo->get_dimension()==1)
3097 double xyz1[3],xyzcible[3];
3124 xyz1[0]=ele_inter.
xyz2[0];
3125 xyz1[1]=ele_inter.
xyz2[1];
3126 xyz1[2]=ele_inter.
xyz2[2];
3139 ele_inter.
no2=nofin;
3151 sprintf(mess,
" ---> CPU : %lf",tps);
3159 sprintf(mess,
" Decoupage XFEM");
3168 int compteur_dim2=0;
3170 if ((eletopo->get_dimension()==2) && (compteur_dim2++==2))
3173 noeud->change_solution(1e300);
3175 tet->change_solution(0.);
3180 sprintf(mess,
" Face id %lu",face->
get_id());
3188 if (tet->get_etat(1)==1)
3197 for (
int num=0;num<2;num++)
3198 for (
int i=0;i<tet->get_nb_xfem(num);i++)
3201 if (lstentitetopo.
existe(mgt)==1)
3202 std::cout <<
"probleme tetra "<< num <<
":" << tet->
get_id() <<
" " << tet->get_etat(1) <<
" = " << tet->get_fem_noeud(0)->get_etat(1)<<
"-"<< tet->get_fem_noeud(1)->get_etat(1)<<
"-"<< tet->get_fem_noeud(2)->get_etat(1)<<
"-"<< tet->get_fem_noeud(3)->get_etat(1) << std::endl;
3217 sprintf(mess,
" ---> CPU : %lf",tps);
3227 int res=tet->verifie_validite_decoupage_xfem(&vol);
3229 int volnul=(
res<<1)&1;
3232 std::cout <<
"Erreur decoupage tetra de id " << tet->get_id() <<
" volume residuel " << vol << std::endl;
3236 std::cout <<
"Erreur decoupage tetra de id " << tet->get_id() <<
" volume nul d'un xfem" << std::endl;
3238 int nb1=tet->get_nb_xfem(1);
3239 for (
int i=0;i<nb1;i++)
3246 for (
int j=0;j<nb3;j++)
3253 if ((no1==not1) || (no1==not2) || (no1==not3) || (no1==not4))
3254 if ((no2==not1) || (no2==not2) || (no2==not3) || (no2==not4))
3259 std::cout <<
"Erreur decoupage tetra de id " << tet->
get_id() <<
" xfem1 pas coherent " << std::endl;
3261 if (tet->get_id()==-407234)
3283 FEM_TETRA4* tettmp=
new FEM_TETRA4(tet->get_lien_topologie(),tet->get_mg_element_maillage(),tab);
3285 int nb1=tet->get_nb_xfem(1);
3286 for (
int j=0;j<nb1;j++)
3303 int nb3=tet->get_nb_xfem(3);
3304 for (
int j=0;j<nb3;j++)
3342 for (
int i=0;i<nb;i++)
3350 double xyz1[3],uv1[3],xyz4[3],uv4[3],xyz2[3],uv2[3],xyz3[3],uv3[3];
3363 xele_inter.
xele=xele;
3364 xele_inter.
xyz1[0]=xyz[0];
3365 xele_inter.
xyz1[1]=xyz[1];
3366 xele_inter.
xyz1[2]=xyz[2];
3367 xele_inter.
xyz2[0]=xyz1[0];
3368 xele_inter.
xyz2[1]=xyz1[1];
3369 xele_inter.
xyz2[2]=xyz1[2];
3377 xele_inter.
xele=xele;
3378 xele_inter.
xyz1[0]=xyz[0];
3379 xele_inter.
xyz1[1]=xyz[1];
3380 xele_inter.
xyz1[2]=xyz[2];
3381 xele_inter.
xyz2[0]=xyz2[0];
3382 xele_inter.
xyz2[1]=xyz2[1];
3383 xele_inter.
xyz2[2]=xyz2[2];
3391 xele_inter.
xele=xele;
3392 xele_inter.
xyz1[0]=xyz[0];
3393 xele_inter.
xyz1[1]=xyz[1];
3394 xele_inter.
xyz1[2]=xyz[2];
3395 xele_inter.
xyz2[0]=xyz3[0];
3396 xele_inter.
xyz2[1]=xyz3[1];
3397 xele_inter.
xyz2[2]=xyz3[2];
3405 xele_inter.
xele=xele;
3406 xele_inter.
xyz1[0]=xyz[0];
3407 xele_inter.
xyz1[1]=xyz[1];
3408 xele_inter.
xyz1[2]=xyz[2];
3409 xele_inter.
xyz2[0]=xyz4[0];
3410 xele_inter.
xyz2[1]=xyz4[1];
3411 xele_inter.
xyz2[2]=xyz4[2];
3437 double uv1[3],xyz1[3],uv2[3],xyz2[3],uv3[3],xyz3[3],uv4[3],xyz4[3];
3438 int inter_face1,inter_face2,inter_face3,inter_face4;
3443 if (t+boucle*0.05*titer>are->
get_tmax())
break;
3444 uv1[2]=t+boucle*0.05*titer;
3445 uv2[2]=t+boucle*0.05*titer;
3446 uv3[2]=t+boucle*0.05*titer;
3447 uv4[2]=t+boucle*0.05*titer;
3454 while (inter_face1+inter_face2+inter_face3+inter_face4==0);
3466 ele_inter.
xyz1[0]=xyz[0];
3467 ele_inter.
xyz1[1]=xyz[1];
3468 ele_inter.
xyz1[2]=xyz[2];
3469 ele_inter.
xyz2[0]=xyz1[0];
3470 ele_inter.
xyz2[1]=xyz1[1];
3471 ele_inter.
xyz2[2]=xyz1[2];
3486 ele_inter.
xyz1[0]=xyz[0];
3487 ele_inter.
xyz1[1]=xyz[1];
3488 ele_inter.
xyz1[2]=xyz[2];
3489 ele_inter.
xyz2[0]=xyz2[0];
3490 ele_inter.
xyz2[1]=xyz2[1];
3491 ele_inter.
xyz2[2]=xyz2[2];
3506 ele_inter.
xyz1[0]=xyz[0];
3507 ele_inter.
xyz1[1]=xyz[1];
3508 ele_inter.
xyz1[2]=xyz[2];
3509 ele_inter.
xyz2[0]=xyz3[0];
3510 ele_inter.
xyz2[1]=xyz3[1];
3511 ele_inter.
xyz2[2]=xyz3[2];
3526 ele_inter.
xyz1[0]=xyz[0];
3527 ele_inter.
xyz1[1]=xyz[1];
3528 ele_inter.
xyz1[2]=xyz[2];
3529 ele_inter.
xyz2[0]=xyz4[0];
3530 ele_inter.
xyz2[1]=xyz4[1];
3531 ele_inter.
xyz2[2]=xyz4[2];
3560 std::pair<double,FEM_ELEMENT3*> p(val,tet);
3561 LISTE_FM_TRI::iterator it=lst.insert(p);
3567 LISTE_FM_TRI::iterator it2=lstid[tet->
get_id()];
3568 LISTE_FM_TRI_ID::iterator it3=lstid.find(tet->
get_id());
3580 LISTE_FM::iterator it=find(lst.begin(),lst.end(),tet);
3581 if (it!=lst.end()) lst.erase(it);
3590 double jN[12]={0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
3592 double uv[2]={0.25,0.25};
3596 for (
int i=0;i<3;i++)
3597 for (
int k=0;k<4;k++)
3602 for (
int i=0;i<4;i++)
3606 if (fabs(T[i])>0.000001)
3609 if (T[i]>0) (*signe)=1;
else (*signe)=-1;
3610 else if (T[i]*(*signe)<0) (*signe)=0;
3615 if (T[i]<tmin) tmin=T[i];
3616 if (T[i]>tmax) tmax=T[i];
3620 for (
int i=0;i<3;i++)
3621 for (
int k=0;k<4;k++)
3622 for (
int l=0;l<3;l++)
3623 jN[i*4+k]=jN[i*4+k]+j[i*3+l]*N[l*4+k];
3624 double a=0.,b=0.,c=-1.;
3625 for (
int i=0;i<3;i++)
3629 for (
int l=0;l<4;l++)
3631 if (tet->
get_numero()!=l) coef=coef+jN[i*4+l]*T[l];
3632 else coefinc=coefinc+jN[i*4+l];
3635 a=
a+coefinc*coefinc;
3640 double det=b*b-4.*
a*c;
3641 if (det<0.) det=0.;
else det=
sqrt(det);
3642 double sol1=(-b-det)/2./
a;
3643 double sol2=(-b+det)/2./
a;
3645 if (sol2>sol1) sol=sol2;
3678 double ab[3],cd[3],ac[3];
3679 ab[0]=xyz2[0]-xyz1[0];
3680 ab[1]=xyz2[1]-xyz1[1];
3681 ab[2]=xyz2[2]-xyz1[2];
3682 cd[0]=xyzs2p[0]-xyzs1p[0];
3683 cd[1]=xyzs2p[1]-xyzs1p[1];
3684 cd[2]=xyzs2p[2]-xyzs1p[2];
3685 ac[0]=xyzs1p[0]-xyz1[0];
3686 ac[1]=xyzs1p[1]-xyz1[1];
3687 ac[2]=xyzs1p[2]-xyz1[2];
3689 double det1=-ab[0]*cd[1]+ab[1]*cd[0];
3690 double det2=-ab[0]*cd[2]+ab[2]*cd[0];
3691 double det3=-ab[1]*cd[2]+ab[2]*cd[1];
3693 if ( (fabs(det1)>=fabs(det2)) && (fabs(det1)>=fabs(det3)) )
3701 if ( (fabs(det2)>=fabs(det1)) && (fabs(det2)>=fabs(det3)) )
3709 if ( (fabs(det3)>=fabs(det2)) && (fabs(det3)>=fabs(det1)) )
3718 double tt=ab[n1]*ac[n2]-ab[n2]*ac[n1];
3720 if (tt<0.0000000001)
return 0;
3721 if (tt>1.-0.0000000001)
return 0;
3732 LISTE_XFEM_ELEMENT0::iterator it0;
3733 LISTE_XFEM_ELEMENT1::iterator it1;
3734 LISTE_XFEM_ELEMENT2::iterator it2;
3735 LISTE_XFEM_ELEMENT3::iterator it3;
3738 if (ele->get_fem_noeud(0)->get_lien_topologie()==NULL) std::cout <<
"Noeud de xele 0 " << ele->get_fem_noeud(0)->get_id() <<
" non attache à la topologie" << std::endl;
3742 if (ele->get_lien_topologie()==NULL) std::cout <<
"Xele1 " << ele->get_id() <<
" non attache à la topologie " << std::endl;
3743 if (ele->get_fem_noeud(0)->get_lien_topologie()==NULL) std::cout <<
"Noeud de xele 1 " << ele->get_fem_noeud(0)->get_id() <<
" non attache à la topologie. " << ele->get_fem_noeud(0)->get_lien_element3()->get_nb() <<
" tetras lies" << std::endl;
3744 if (ele->get_fem_noeud(1)->get_lien_topologie()==NULL) std::cout <<
"Noeud de xele 1 " << ele->get_fem_noeud(1)->get_id() <<
" non attache à la topologie. " << ele->get_fem_noeud(0)->get_lien_element3()->get_nb() <<
" tetras lies" << std::endl;
3748 if (ele->get_lien_topologie()==NULL) std::cout <<
"Xele2 " << ele->get_id() <<
" non attache à la topologie " << std::endl;
3749 if (ele->get_fem_noeud(0)->get_lien_topologie()==NULL) std::cout <<
"Noeud de xele 2 " << ele->get_fem_noeud(0)->get_id() <<
" non attache à la topologie" << std::endl;
3750 if (ele->get_fem_noeud(1)->get_lien_topologie()==NULL) std::cout <<
"Noeud de xele 2 " << ele->get_fem_noeud(1)->get_id() <<
" non attache à la topologie" << std::endl;