Skip to content
Snippets Groups Projects
Select Git revision
  • f20ed84eb8243eca81818dcd739811e681d1441a
  • master default
  • cgnsUnstructured
  • partitioning
  • poppler
  • HighOrderBLCurving
  • gmsh_3_0_4
  • gmsh_3_0_3
  • gmsh_3_0_2
  • gmsh_3_0_1
  • gmsh_3_0_0
  • gmsh_2_16_0
  • gmsh_2_15_0
  • gmsh_2_14_1
  • gmsh_2_14_0
  • gmsh_2_13_2
  • gmsh_2_13_1
  • gmsh_2_12_0
  • gmsh_2_11_0
  • gmsh_2_10_1
  • gmsh_2_10_0
  • gmsh_2_9_3
  • gmsh_2_9_2
  • gmsh_2_9_1
  • gmsh_2_9_0
  • gmsh_2_8_6
26 results

triangle.h

Blame
  • Forked from gmsh / gmsh
    Source project has a limited visibility.
    delaunay_refinement.cpp 11.32 KiB
    #ifdef _OPENMP
    #include <omp.h>
    #endif
    #include <stack>
    #include <set>
    #include <vector>
    #include <algorithm>
    #include <math.h>
    #include "GmshMessage.h"
    #include "OS.h"
    #include "SPoint3.h"
    #include "delaunay3d_private.h"
    #include "delaunay3d.h"
    #include "rtree.h"
    #include "MVertex.h"
    #include "MTetrahedron.h"
    #include "MTriangle.h"
    #include "GRegion.h"
    #include "GFace.h"
    
    typedef  std::set< Edge > edgeContainer2;
    
    long int AVGSEARCH;
    
    struct edgeContainer
    {
      std::set< Edge > _hash2;
      std::vector<std::vector<Edge> > _hash;
      edgeContainer (unsigned int N = 1000000) {
        _hash.resize(N);
      }
      bool addNewEdge2 (const Edge &e) {
        std::set< Edge >::iterator it = _hash2.find(e);
        if (it != _hash2.end())return false;
        _hash2.insert(e);
        return true;
      }
      bool isNewEdge (const Edge &e) {
        size_t h = (size_t) e.first >> 3;
        std::vector<Edge> &v = _hash[h %_hash.size()];
        AVGSEARCH+=v.size();
        for (unsigned int i=0; i< v.size();i++)if (e == v[i]) {return false;}
        return true;
      }
    
      bool addNewEdge (const Edge &e)
      {
        size_t h = (size_t) e.first >> 3;
        std::vector<Edge> &v = _hash[h %_hash.size()];
        AVGSEARCH+=v.size();
        for (unsigned int i=0; i< v.size();i++)if (e == v[i]) {return false;}
        v.push_back(e);
        return true;
      }
    };
    
    struct IPT {
      double _x1,_x2,_x3,_x4;
      IPT(double x1, double x2, double x3, double x4) :
        _x1(x1),_x2(x2),_x3(x3),_x4(x4){};
    };
    
    double adaptiveTrapezoidalRule (SPoint3 p1 , SPoint3 p2 ,
    				double lc1 , double lc2 ,
    				double (*f)(const SPoint3 &p, void *),
    				void *data, std::vector< IPT > & _result,
    				double &dl, double epsilon = 1.e-6)
    {
      std::stack< IPT > _stack;
      _result.clear();