/[ff3d]/ff3d/solver/SurfaceMeshGenerator.cpp
ViewVC logotype

Diff of /ff3d/solver/SurfaceMeshGenerator.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.40 by delpinux, Sun Sep 21 14:34:18 2003 UTC revision 1.41 by dobj, Mon Sep 22 10:00:03 2003 UTC
# Line 984  __DeterminatePoint(const size_t& ncase, Line 984  __DeterminatePoint(const size_t& ncase,
984    std::pair<const Vertex*,const Vertex*> pV(Vo0,Vo1);    std::pair<const Vertex*,const Vertex*> pV(Vo0,Vo1);
985    std::pair<const Vertex*,const Vertex*> pV2(Vo1,Vo0);    std::pair<const Vertex*,const Vertex*> pV2(Vo1,Vo0);
986    
987    real_t epsilon=1e-10;    real_t epsilon=1e-6;
988    real_t pscalar,k;    real_t pscalar,k;
989    size_t num;    size_t num;
990    Vertex P;    Vertex P;
# Line 1022  __DeterminatePoint(const size_t& ncase, Line 1022  __DeterminatePoint(const size_t& ncase,
1022          __InTriangle(P,V,num);          __InTriangle(P,V,num);
1023          if(num==3) {          if(num==3) {
1024            if(!(norm2>epsilon)) {            if(!(norm2>epsilon)) {
1025                //point confondus avec un des sommets
1026              Pinter.addPoint(Vo0);              Pinter.addPoint(Vo0);
1027            } else            } else
1028              if(!(norm3>epsilon)) {              if(!(norm3>epsilon)) {
1029                  //point confondus avec l'autre sommet
1030                Pinter.addPoint(Vo1);                Pinter.addPoint(Vo1);
1031              } else              } else
1032                if(listVertexIntersectionNew.find(pV)==listVertexIntersectionNew.end()                if(listVertexIntersectionNew.find(pV)==listVertexIntersectionNew.end()
# Line 1059  __DeterminatePoint(const size_t& ncase, Line 1061  __DeterminatePoint(const size_t& ncase,
1061            Pinter.cutTriangle1()[ncase]=Pinter.size();            Pinter.cutTriangle1()[ncase]=Pinter.size();
1062          }          }
1063        } else {        } else {
1064              //il ne faut pas que le point soit sur une arete du tr 1
1065          if(inV01 > epsilon and inV02 > epsilon and inV12 > epsilon ) {          if(inV01 > epsilon and inV02 > epsilon and inV12 > epsilon ) {
1066            __InTriangle(P,V,num);            __InTriangle(P,V,num);
1067            if(num==3) {            if(num==3) {
# Line 1202  __createPointIntersection(std::list<Tria Line 1205  __createPointIntersection(std::list<Tria
1205      TinyVector<3,size_t >& cutTr2= pairTriangleToIntersectionPoints[pTriangle].cutTriangle2();      TinyVector<3,size_t >& cutTr2= pairTriangleToIntersectionPoints[pTriangle].cutTriangle2();
1206    
1207      for(size_t i=0 ; i<Pinter.size() ; ++i) {      for(size_t i=0 ; i<Pinter.size() ; ++i) {
1208        real_t epsilon=1e-10;        real_t epsilon=1e-6;
1209        const Triangle& To=(*(*currentTriangle));        const Triangle& To=(*(*currentTriangle));
1210        const Vertex& Vo0 = To(0);        const Vertex& Vo0 = To(0);
1211        const Vertex& Vo1 = To(1);        const Vertex& Vo1 = To(1);
# Line 1327  __createCase1(int ncase, Line 1330  __createCase1(int ncase,
1330        const Vertex& B=__determinateNumber(vertexNum[0],pointsIntersection);        const Vertex& B=__determinateNumber(vertexNum[0],pointsIntersection);
1331        if(edgesCut[1]==1) {        if(edgesCut[1]==1) {
1332          const Vertex& C=__determinateNumber(vertexNum[1],pointsIntersection);          const Vertex& C=__determinateNumber(vertexNum[1],pointsIntersection);
1333  //#warning Reference not set.            if(B==C) {
1334          __addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew);                //cas ou les 2 points d'intersections sont de meme adresse (donc confondus)
1335                  //ffout(4)<<"we have a problem createcase1\n";
1336                  //ffout(4)<<A<<&A<<"\n";
1337                  //ffout(4)<<B<<&B<<"\n";
1338                  //ffout(4)<<C<<&C<<"\n";
1339              } else {
1340                  __addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew);
1341              }
1342        } else {        } else {
1343          ffout(4) <<"pbs 10\n"<<std::flush;          ffout(4) <<"pbs 10\n"<<std::flush;
1344          ffout(4)<<V0<<"\n";          ffout(4)<<V0<<"\n";
# Line 1361  __createCase1(int ncase, Line 1371  __createCase1(int ncase,
1371        const Vertex& B=__determinateNumber(vertexNum[0],pointsIntersection);        const Vertex& B=__determinateNumber(vertexNum[0],pointsIntersection);
1372        if(edgesCut[1]==1) {        if(edgesCut[1]==1) {
1373          const Vertex& C=__determinateNumber(vertexNum[1],pointsIntersection);          const Vertex& C=__determinateNumber(vertexNum[1],pointsIntersection);
1374  //#warning Reference not set.            if( D==B ) {
1375          __addTriangle(Triangle(A,B,D,K.reference()),cell,triangleListIntersectionNew);                __addTriangle(Triangle(A,C,D,K.reference()),cell,triangleListIntersectionNew);
1376          __addTriangle(Triangle(A,D,C,K.reference()),cell,triangleListIntersectionNew);            } else if(C==D){
1377                  __addTriangle(Triangle(A,B,D,K.reference()),cell,triangleListIntersectionNew);
1378              } else {
1379                  __addTriangle(Triangle(A,B,D,K.reference()),cell,triangleListIntersectionNew);
1380                  __addTriangle(Triangle(A,D,C,K.reference()),cell,triangleListIntersectionNew);
1381              }
1382        } else {        } else {
1383          ffout(4)<<"-------- warning trou in 0\n"<<std::flush;          ffout(4)<<"-------- warning trou in 0\n"<<std::flush;
1384          ffout(4)<<V0<<"\n";          ffout(4)<<V0<<"\n";
# Line 1388  __createCase1(int ncase, Line 1403  __createCase1(int ncase,
1403  #warning is it true? case where only one edge is cut?  #warning is it true? case where only one edge is cut?
1404      ffout(4) << numberPointsInterior<<" be careful 1\n"<<std::flush;      ffout(4) << numberPointsInterior<<" be careful 1\n"<<std::flush;
1405        //case 1 point inside and more than 1 point in the triangle        //case 1 point inside and more than 1 point in the triangle
1406      __createByEdges(K, cell, triangleListIntersectionNew);     // __createByEdges(K, cell, triangleListIntersectionNew);
1407    }    }
1408    }    }
1409  }  }
# Line 1450  __createCase2(int ncase, Line 1465  __createCase2(int ncase,
1465          const Vertex& D=__determinateNumber(vertexNum[1],pointsIntersection);          const Vertex& D=__determinateNumber(vertexNum[1],pointsIntersection);
1466  //#warning Reference not set.  //#warning Reference not set.
1467            if(D==C) {            if(D==C) {
1468                if(!(D==K(0) or D==K(1) or D==K(2))) {                //si les 2 points d'inter sont confondus
1469                    if(Norm(D-K(0))<1e-6 or Norm(D-K(1))<1e-6 or Norm(D-K(2))<1e-6) {                if(!(D==V0 or D==V1 or D==V2)) {
1470                        __addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew);                    //si le point d'inter n'est confondus avec aucun des sommets
1471                    } else {                    //ffout(4)<<"we have a problem\n";
1472                        ffout(4)<<"we have a problem\n";                    //ffout(4)<<V0<<&V0<<"\n";
1473                      //ffout(4)<<V1<<&V1<<"\n";
1474                      //ffout(4)<<V2<<&V2<<"\n";
1475                      //ffout(4)<<A<<&A<<"\n";
1476                      //ffout(4)<<B<<&B<<"\n";
1477                      //ffout(4)<<C<<&C<<"\n";
1478                      // le triangle est vraisemblablement plat mais il le faut pour la connectivite du maillage
1479                      __addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew);
1480                  } else {
1481                      //il y a une point d'inter confondu avec un des sommets
1482                      //il faut voir si ce n'est pas A ou B et dans ce cas on construit
1483                      if(!(C==A or C==B)) {
1484                        __addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew);                        __addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew);
                       __addTriangle(Triangle(C,B,D,K.reference()),cell,triangleListIntersectionNew);  
1485                    }                    }
               } else {  
                   __addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew);  
1486                }                }
1487            } else {            } else {
1488                __addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew);                __addTriangle(Triangle(A,B,C,K.reference()),cell,triangleListIntersectionNew);
1489                __addTriangle(Triangle(C,B,D,K.reference()),cell,triangleListIntersectionNew);                __addTriangle(Triangle(C,B,D,K.reference()),cell,triangleListIntersectionNew);
1490            }            }
1491              
1492        } else {        } else {
1493           ffout(4) <<"pbs 20\n";           ffout(4) <<"pbs 20\n";
1494  //#warning Reference not set.  //#warning Reference not set.
# Line 2393  __createTrianglesIntersection(const size Line 2417  __createTrianglesIntersection(const size
2417          }          }
2418                    
2419        std::list<Triangle*> listTriangle0=(*it0).second;        std::list<Triangle*> listTriangle0=(*it0).second;
         ffout(4)<<listTriangle0.size()<<"\n";  
2420        for(std::list<Triangle*>::iterator jt0=listTriangle0.begin() ;        for(std::list<Triangle*>::iterator jt0=listTriangle0.begin() ;
2421            jt0!=listTriangle0.end() ; ++jt0) {            jt0!=listTriangle0.end() ; ++jt0) {
2422    
# Line 3368  generateSurfacicMesh(const Domain& omega Line 3391  generateSurfacicMesh(const Domain& omega
3391    (*__internals).__constructionFinalMesh((*objectStack.top()),    (*__internals).__constructionFinalMesh((*objectStack.top()),
3392                                           s_mesh);                                           s_mesh);
3393    
3394    //  #warning _________________________________A ENLEVER_________
3395    //  Connectivity<Triangle> connect(s_mesh.numberOfCells());
3396    //  ConnectivityBuilder<SurfaceMeshOfTriangles> C(s_mesh,connect);
3397    //  size_t compt=0;
3398    //  for(size_t i=0 ; i<s_mesh.numberOfCells() ; ++i) {
3399    //      const Triangle& T=s_mesh.cell(i);
3400    //      TinyVector<3,const Triangle*> V=connect(s_mesh.cellNumber(T));
3401    //      for(size_t j=0 ; j<3 ; ++j) {
3402    //        if(V[j]==0) {
3403    //            //ffout(4)<<"attention un des voisins n'existe pas\n";
3404    //            ++compt;
3405    //        }
3406    //      }
3407    //  }
3408    //  ffout(4)<<"****************************il manque "<<compt<<" sommets\n";
3409    //  /////////////////////////////////////////////////////////////////////////////
3410    
3411    int n0=0, n1=0;    int n0=0, n1=0;
3412    
3413  #warning REMOVE THIS CALL  #warning REMOVE THIS CALL

Legend:
Removed from v.1.40  
changed lines
  Added in v.1.41

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26