55 LISTE_FEM_NOEUD::iterator it;
58 if (no->get_mg_element_maillage()==NULL)
continue;
59 double x=no->get_x(coef);
60 double y=no->get_y(coef);
61 double z=no->get_z(coef);
64 no->change_numero(newno->
get_id());
66 LISTE_FEM_ELEMENT1::iterator it1;
69 if (ele->get_nb_fem_noeud()==2)
76 if (ele->get_nb_fem_noeud()==3)
85 LISTE_FEM_ELEMENT2::iterator it2;
88 if (ele->get_nb_fem_noeud()==3)
95 if (ele->get_nb_fem_noeud()==6)
102 if (ele->get_nb_fem_noeud()==4)
110 if (ele->get_nb_fem_noeud()==8)
119 LISTE_FEM_ELEMENT3::iterator it3;
122 if (ele->get_nb_fem_noeud()==4)
130 if (ele->get_nb_fem_noeud()==10)
138 if (ele->get_nb_fem_noeud()==8)
150 if (ele->get_nb_fem_noeud()==20)
177 LISTE_MG_NOEUD::iterator itNo;
180 if ((noeud->get_lien_topologie()!=NULL) && (lst.
get_nb()!=0))
181 if (lst.
existe(noeud->get_lien_topologie())==
false)
continue;
182 double x=noeud->get_x();
183 double y=noeud->get_y();
184 double z=noeud->get_z();
189 LISTE_MG_SEGMENT::iterator itSeg;
192 if ((segment->get_lien_topologie()!=NULL) && (lst.
get_nb()!=0))
193 if (lst.
existe(segment->get_lien_topologie())==
false)
continue;
199 LISTE_MG_TRIANGLE::iterator itTri;
202 if ((triangle->get_lien_topologie()!=NULL) && (lst.
get_nb()!=0))
203 if (lst.
existe(triangle->get_lien_topologie())==
false)
continue;
209 LISTE_MG_QUADRANGLE::iterator itquad;
212 if ((quad->get_lien_topologie()!=NULL) && (lst.
get_nb()!=0))
213 if (lst.
existe(quad->get_lien_topologie())==
false)
continue;
220 LISTE_MG_TETRA::iterator ittet;
223 if ((tet->get_lien_topologie()!=NULL) && (lst.
get_nb()!=0))
224 if (lst.
existe(tet->get_lien_topologie())==
false)
continue;
231 LISTE_MG_HEXA::iterator ithex;
234 if ((hex->get_lien_topologie()!=NULL) && (lst.
get_nb()!=0))
235 if (lst.
existe(hex->get_lien_topologie())==
false)
continue;
246 LISTE_MG_PENTA::iterator itpen;
249 if ((pen->get_lien_topologie()!=NULL) && (lst.
get_nb()!=0))
250 if (lst.
existe(pen->get_lien_topologie())==
false)
continue;
267 LISTE_ENTITE::const_iterator i;
268 LISTE_MG_NOEUD::iterator itNo;
270 noeud->dupliquer(mgmai,decalage);
271 LISTE_MG_SEGMENT::iterator itSeg;
273 segment->dupliquer(mgmai,decalage);
274 LISTE_MG_TRIANGLE::iterator itTri;
276 triangle->dupliquer(mgmai,decalage);
277 LISTE_MG_TETRA::iterator itTetra;
279 tetra->dupliquer(mgmai,decalage);
424 if (num==0) mgnoeud=
new MG_NOEUD(topo,xx,yy,zz,origine);
425 else mgnoeud=
new MG_NOEUD(num,topo,xx,yy,zz,origine);
439 std::pair<LISTE_ENTITE::iterator,bool> p=
lst_entite.insert(
id);
445 std::pair<const unsigned long,MG_NOEUD*> tmp(mgnoeud->
get_id(),mgnoeud);
458 return ((*i).second);
470 for (
unsigned long j=0;j<num;j++) i++;
471 return ((*i).second);
526 for (
unsigned int k=0;k<num;k++) j++;
568 if (num==0) mgsegment=
new MG_SEGMENT(topo,mgnoeud1,mgnoeud2,origine,longue);
569 else mgsegment=
new MG_SEGMENT(num,topo,mgnoeud1,mgnoeud2,origine,longue);
583 std::pair<LISTE_ENTITE::iterator,bool> p=
lst_entite.insert(
id);
589 std::pair<const unsigned long,MG_SEGMENT*> tmp(mgsegment->
get_id(),mgsegment);
602 return ((*i).second);
607 unsigned long id=std::min(noeud1id,noeud2id);
610 for (
int i=0;i<nb_segment;i++)
627 return ((*i).second);
694 for (
unsigned int k=0;k<num;k++) j++;
736 toposousjacente=NULL;
740 if (mgsegment1==NULL) mgsegment1=
ajouter_mg_segment(toposousjacente,mgnoeud1,mgnoeud2,origine);
741 if (mgsegment2==NULL) mgsegment2=
ajouter_mg_segment(toposousjacente,mgnoeud2,mgnoeud3,origine);
742 if (mgsegment3==NULL) mgsegment3=
ajouter_mg_segment(toposousjacente,mgnoeud3,mgnoeud1,origine);
744 if (num==0) mgtriangle=
new MG_TRIANGLE(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgsegment1,mgsegment2,mgsegment3,origine);
745 else mgtriangle=
new MG_TRIANGLE(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgsegment1,mgsegment2,mgsegment3,origine);
760 std::pair<LISTE_ENTITE::iterator,bool> p=
lst_entite.insert(
id);
766 std::pair<const unsigned long,MG_TRIANGLE*> tmp(mgtriangle->
get_id(),mgtriangle);
779 return ((*i).second);
791 for (
unsigned long j=0;j<num;j++) i++;
792 return ((*i).second);
797 unsigned long id=std::min(noeud1id,noeud2id);
798 id=std::min(
id,noeud3id);
801 for (
int i=0;i<nb_triangle;i++)
823 if (mgtriangle==NULL)
861 if (mgtriangle==NULL)
869 for (
unsigned int k=0;k<num;k++) j++;
935 toposousjacente=NULL;
940 if (mgsegment1==NULL) mgsegment1=
ajouter_mg_segment(toposousjacente,mgnoeud1,mgnoeud2,origine);
941 if (mgsegment2==NULL) mgsegment2=
ajouter_mg_segment(toposousjacente,mgnoeud2,mgnoeud3,origine);
942 if (mgsegment3==NULL) mgsegment3=
ajouter_mg_segment(toposousjacente,mgnoeud3,mgnoeud4,origine);
943 if (mgsegment4==NULL) mgsegment4=
ajouter_mg_segment(toposousjacente,mgnoeud4,mgnoeud1,origine);
945 if (num==0) mgquadrangle=
new MG_QUADRANGLE(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgsegment1,mgsegment2,mgsegment3,mgsegment4,origine);
946 else mgquadrangle=
new MG_QUADRANGLE(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgsegment1,mgsegment2,mgsegment3,mgsegment4,origine);
961 std::pair<LISTE_ENTITE::iterator,bool> p=
lst_entite.insert(
id);
967 std::pair<const unsigned long,MG_QUADRANGLE*> tmp(mgquadrangle->
get_id(),mgquadrangle);
980 return ((*i).second);
992 for (
unsigned long j=0;j<num;j++) i++;
993 return ((*i).second);
998 unsigned long id=std::min(noeud1id,noeud2id);
999 id=std::min(
id,noeud3id);
1000 id=std::min(
id,noeud4id);
1001 std::map<unsigned long,unsigned long> map1;
1002 map1[noeud1id]=noeud1id;
1003 map1[noeud2id]=noeud2id;
1004 map1[noeud3id]=noeud3id;
1005 map1[noeud4id]=noeud4id;
1008 for (
int i=0;i<nb_quadrangle;i++)
1011 std::map<unsigned long,unsigned long> map2;
1016 std::map<unsigned long,unsigned long>::iterator it1,it2;
1017 it1=map1.begin();it2=map2.begin();
1019 while (it1!=map1.end())
1021 if ((*it1).first!=(*it2).first) {ok=0;
break;}
1025 if (ok)
return mgquadrangle;
1039 if (mgquadrangle==NULL)
1044 LISTE_ENTITE::iterator i=
lst_entite.find(
id);
1052 delete mgquadrangle;
1084 if (mgquadrangle==NULL)
1089 LISTE_ENTITE::iterator i=
lst_entite.find(
id);
1092 for (
unsigned int k=0;k<num;k++) j++;
1098 delete mgquadrangle;
1134 LISTE_ENTITE::iterator i=
lst_entite.find(
id);
1137 delete mgquadrangle;
1163 toposousjacente=NULL;
1168 if (mgtriangle1==NULL) mgtriangle1=
ajouter_mg_triangle(toposousjacente,mgnoeud1,mgnoeud3,mgnoeud2,origine);
1169 if (mgtriangle2==NULL) mgtriangle2=
ajouter_mg_triangle(toposousjacente,mgnoeud1,mgnoeud2,mgnoeud4,origine);
1170 if (mgtriangle3==NULL) mgtriangle3=
ajouter_mg_triangle(toposousjacente,mgnoeud2,mgnoeud3,mgnoeud4,origine);
1171 if (mgtriangle4==NULL) mgtriangle4=
ajouter_mg_triangle(toposousjacente,mgnoeud1,mgnoeud4,mgnoeud3,origine);
1173 if (num==0) mgtetra=
new MG_TETRA(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4,origine);
1174 else mgtetra=
new MG_TETRA(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4,origine);
1189 std::pair<LISTE_ENTITE::iterator,bool> p=
lst_entite.insert(
id);
1195 std::pair<const unsigned long,MG_TETRA*> tmp(mgtetra->
get_id(),mgtetra);
1208 return ((*i).second);
1220 for (
unsigned long j=0;j<num;j++) i++;
1221 return ((*i).second);
1231 for (
int i=0;i<nb_tetra;i++)
1276 LISTE_ENTITE::iterator i=
lst_entite.find(
id);
1321 LISTE_ENTITE::iterator i=
lst_entite.find(
id);
1324 for (
unsigned int k=0;k<num;k++) j++;
1366 LISTE_ENTITE::iterator i=
lst_entite.find(
id);
1390 MG_HEXA*
MG_MAILLAGE::ajouter_mg_hexa(
MG_ELEMENT_TOPOLOGIQUE* topo,
class MG_NOEUD *mgnoeud1,
class MG_NOEUD *mgnoeud2,
class MG_NOEUD *mgnoeud3,
class MG_NOEUD *mgnoeud4,
class MG_NOEUD *mgnoeud5,
class MG_NOEUD *mgnoeud6,
class MG_NOEUD *mgnoeud7,
class MG_NOEUD *mgnoeud8,
int origine,
unsigned long num)
1395 toposousjacente=NULL;
1402 if (mgquadrangle1==NULL) mgquadrangle1=
ajouter_mg_quadrangle(toposousjacente,mgnoeud1,mgnoeud2,mgnoeud6,mgnoeud5,origine);
1403 if (mgquadrangle2==NULL) mgquadrangle2=
ajouter_mg_quadrangle(toposousjacente,mgnoeud2,mgnoeud3,mgnoeud7,mgnoeud6,origine);
1404 if (mgquadrangle3==NULL) mgquadrangle3=
ajouter_mg_quadrangle(toposousjacente,mgnoeud3,mgnoeud4,mgnoeud8,mgnoeud7,origine);
1405 if (mgquadrangle4==NULL) mgquadrangle4=
ajouter_mg_quadrangle(toposousjacente,mgnoeud4,mgnoeud1,mgnoeud5,mgnoeud8,origine);
1406 if (mgquadrangle5==NULL) mgquadrangle5=
ajouter_mg_quadrangle(toposousjacente,mgnoeud1,mgnoeud4,mgnoeud3,mgnoeud2,origine);
1407 if (mgquadrangle6==NULL) mgquadrangle6=
ajouter_mg_quadrangle(toposousjacente,mgnoeud5,mgnoeud6,mgnoeud7,mgnoeud8,origine);
1409 if (num==0) mghexa=
new MG_HEXA(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgnoeud6,mgnoeud7,mgnoeud8,mgquadrangle1,mgquadrangle2,mgquadrangle3,mgquadrangle4,mgquadrangle5,mgquadrangle6,origine);
1410 else mghexa=
new MG_HEXA(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgnoeud6,mgnoeud7,mgnoeud8,mgquadrangle1,mgquadrangle2,mgquadrangle3,mgquadrangle4,mgquadrangle5,mgquadrangle6,origine);
1425 std::pair<LISTE_ENTITE::iterator,bool> p=
lst_entite.insert(
id);
1431 std::pair<const unsigned long,MG_HEXA*> tmp(mghexa->
get_id(),mghexa);
1444 return ((*i).second);
1456 for (
unsigned long j=0;j<num;j++) i++;
1457 return ((*i).second);
1472 std::map<unsigned long,unsigned long> map1;
1482 for (
int i=0;i<nb_hexa;i++)
1485 std::map<unsigned long,unsigned long> map2;
1494 std::map<unsigned long,unsigned long>::iterator it1,it2;
1495 it1=map1.begin();it2=map2.begin();
1497 while (it1!=map1.end())
1499 if ((*it1).first!=(*it2).first) {ok=0;
break;}
1503 if (ok)
return mghexa;
1526 LISTE_ENTITE::iterator i=
lst_entite.find(
id);
1585 LISTE_ENTITE::iterator i=
lst_entite.find(
id);
1588 for (
unsigned int k=0;k<num;k++) j++;
1644 LISTE_ENTITE::iterator i=
lst_entite.find(
id);
1674 toposousjacente=NULL;
1680 if (mgquadrangle1==NULL) mgquadrangle1=
ajouter_mg_quadrangle(toposousjacente,mgnoeud1,mgnoeud2,mgnoeud5,mgnoeud4,origine);
1681 if (mgquadrangle2==NULL) mgquadrangle2=
ajouter_mg_quadrangle(toposousjacente,mgnoeud2,mgnoeud3,mgnoeud6,mgnoeud5,origine);
1682 if (mgquadrangle3==NULL) mgquadrangle3=
ajouter_mg_quadrangle(toposousjacente,mgnoeud3,mgnoeud1,mgnoeud4,mgnoeud6,origine);
1683 if (mgtriangle1==NULL) mgtriangle1=
ajouter_mg_triangle(toposousjacente,mgnoeud1,mgnoeud2,mgnoeud3,origine);
1684 if (mgtriangle2==NULL) mgtriangle2=
ajouter_mg_triangle(toposousjacente,mgnoeud4,mgnoeud5,mgnoeud6,origine);
1686 if (num==0) mgpenta=
new MG_PENTA(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgnoeud6,mgtriangle1,mgtriangle2,mgquadrangle1,mgquadrangle2,mgquadrangle3,origine);
1687 else mgpenta=
new MG_PENTA(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgnoeud6,mgtriangle1,mgtriangle2,mgquadrangle1,mgquadrangle2,mgquadrangle3,origine);
1702 std::pair<LISTE_ENTITE::iterator,bool> p=
lst_entite.insert(
id);
1708 std::pair<const unsigned long,MG_PENTA*> tmp(mgpenta->
get_id(),mgpenta);
1721 return ((*i).second);
1733 for (
unsigned long j=0;j<num;j++) i++;
1734 return ((*i).second);
1747 std::map<unsigned long,unsigned long> map1;
1755 for (
int i=0;i<nb_penta;i++)
1758 std::map<unsigned long,unsigned long> map2;
1765 std::map<unsigned long,unsigned long>::iterator it1,it2;
1766 it1=map1.begin();it2=map2.begin();
1768 while (it1!=map1.end())
1770 if ((*it1).first!=(*it2).first) {ok=0;
break;}
1774 if (ok)
return mgpenta;
1797 LISTE_ENTITE::iterator i=
lst_entite.find(
id);
1849 LISTE_ENTITE::iterator i=
lst_entite.find(
id);
1852 for (
unsigned int k=0;k<num;k++) j++;
1901 LISTE_ENTITE::iterator i=
lst_entite.find(
id);
1931 toposousjacente=NULL;
1937 if (mgquadrangle1==NULL) mgquadrangle1=
ajouter_mg_quadrangle(toposousjacente,mgnoeud1,mgnoeud2,mgnoeud5,mgnoeud4,origine);
1938 if (mgtriangle1==NULL) mgtriangle1=
ajouter_mg_triangle(toposousjacente,mgnoeud1,mgnoeud2,mgnoeud5,origine);
1939 if (mgtriangle2==NULL) mgtriangle2=
ajouter_mg_triangle(toposousjacente,mgnoeud2,mgnoeud3,mgnoeud5,origine);
1940 if (mgtriangle3==NULL) mgtriangle3=
ajouter_mg_triangle(toposousjacente,mgnoeud3,mgnoeud4,mgnoeud5,origine);
1941 if (mgtriangle4==NULL) mgtriangle4=
ajouter_mg_triangle(toposousjacente,mgnoeud4,mgnoeud1,mgnoeud5,origine);
1943 if (num==0) mgpyramide=
new MG_PYRAMIDE(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4,mgquadrangle1,origine);
1944 else mgpyramide=
new MG_PYRAMIDE(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4,mgquadrangle1,origine);
1959 std::pair<LISTE_ENTITE::iterator,bool> p=
lst_entite.insert(
id);
1965 std::pair<const unsigned long,MG_PYRAMIDE*> tmp(mgpyramide->
get_id(),mgpyramide);
1978 return ((*i).second);
1990 for (
unsigned long j=0;j<num;j++) i++;
1991 return ((*i).second);
2003 std::map<unsigned long,unsigned long> map1;
2010 for (
int i=0;i<nb_pyr;i++)
2013 std::map<unsigned long,unsigned long> map2;
2019 std::map<unsigned long,unsigned long>::iterator it1,it2;
2020 it1=map1.begin();it2=map2.begin();
2022 while (it1!=map1.end())
2024 if ((*it1).first!=(*it2).first) {ok=0;
break;}
2028 if (ok)
return mgpyramide;
2051 LISTE_ENTITE::iterator i=
lst_entite.find(
id);
2103 LISTE_ENTITE::iterator i=
lst_entite.find(
id);
2106 for (
unsigned int k=0;k<num;k++) j++;
2155 LISTE_ENTITE::iterator i=
lst_entite.find(
id);
2191 if (recherchedim==1)
2210 LISTE_ENTITE::const_iterator i;
2221 LISTE_ENTITE::const_iterator i;
2223 (*i)->get_fichier_dependant(liste_fichier);
2243 o << nb_noeud <<
" " << nb_seg << std::endl;
2250 o << (ii+1) <<
" " << noeud->
get_x() <<
" " << noeud->
get_y() <<
" " << noeud->
get_z() <<
" " ;
2277 for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
2284 for (LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.begin();i!=lst_mg_triangle.end();i++)
2290 o << nb_noeud <<
" " << nb_tri << std::endl;
2292 for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
2297 o << (ii+1) <<
" " << noeud->
get_x() <<
" " << noeud->
get_y() <<
" " << noeud->
get_z() <<
" " ;
2308 for (LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.begin();i!=lst_mg_triangle.end();i++)
2332 o << (ii+1) <<
" " << noeud->
get_x() <<
" " << noeud->
get_y() <<
" " << noeud->
get_z() <<
" " ;
2367 sprintf(chaine,
"%s_1D.mai",nomfic.c_str());
2368 std::ofstream of1(chaine,std::ios::out|std::ios::trunc);
2370 of1.setf(std::ios::showpoint);
2372 sprintf(chaine,
"%s_2D.mai",nomfic.c_str());
2373 std::ofstream of2(chaine,std::ios::out|std::ios::trunc);
2375 of2.setf(std::ios::showpoint);
2377 sprintf(chaine,
"%s_3D.mai",nomfic.c_str());
2378 std::ofstream of3(chaine,std::ios::out|std::ios::trunc);
2380 of3.setf(std::ios::showpoint);
2511 sprintf(chaine,
"%s.mail",nomfic.c_str());
2512 FILE *in=fopen(chaine,
"wt");
2515 fprintf(in,
"8 Maillage\n");
2516 fprintf(in,
"11 Version 1.0\n");
2517 fprintf(in,
"%lu\n\n",
get_id());
2519 fprintf(in,
"%d\n",nb);
2521 LISTE_MG_NOEUD::iterator ind;
2539 fprintf(in,
"\n%d\n",nb);
2541 LISTE_MG_SEGMENT::iterator iseg;
2559 fprintf(in,
"\n%d\n",nb);
2560 for (
int i=0;i<nb;i++)
2573 fprintf(in,
"\n0\n\n0\n\n0\n\n%d\n",nb);
2574 for (
int i=0;i<nb;i++)
2598 for (
int j=0;j<6;j++)
2614 fprintf(in,
"%d %d %d %d %d %d %d %d %d %d %d %d %d %d 0 %d \n",tet->
get_noeud1()->
get_nouveau_numero(),tet->
get_noeud2()->
get_nouveau_numero(),tet->
get_noeud3()->
get_nouveau_numero(),tet->
get_noeud4()->
get_nouveau_numero(),lst_segment.
get(tab[0])->
get_nouveau_numero(),lst_segment.
get(tab[1])->
get_nouveau_numero(),lst_segment.
get(tab[2])->
get_nouveau_numero(),lst_segment.
get(tab[3])->
get_nouveau_numero(),lst_segment.
get(tab[4])->
get_nouveau_numero(),lst_segment.
get(tab[5])->
get_nouveau_numero(),tet->
get_triangle1()->
get_nouveau_numero(),tet->
get_triangle2()->
get_nouveau_numero(),tet->
get_triangle3()->
get_nouveau_numero(),tet->
get_triangle4()->
get_nouveau_numero(),topo->
get_nouveau_numero());
2617 fprintf(in,
"\n0\n\n0\n\n8 Maillage\n");
2632 std::string nomsol=
"Carte de taille reelle";
2635 for (
int j=0;j<nb_noeud;j++)
2641 for (
int k=0;k<nb_segment;k++)
2652 mgsol->
ecrire(ec,j,0,0,0);