gmsh-TingyuanDoc
0.1
An Open-Source Timing-driven Analytical Mixed-size FPGA Placer
|
Go to the documentation of this file.
6 #ifndef MESH_GREGION_DELAUNAY_INSERTION_H
7 #define MESH_GREGION_DELAUNAY_INSERTION_H
26 double circumcenter[3],
double *xi,
double *eta,
81 double A[4] = {v0->
x(), v0->
y(), v0->
z()};
82 double B[4] = {v1->
x(), v1->
y(), v1->
z()};
83 double C[4] = {v2->
x(), v2->
y(), v2->
z()};
84 double D[4] = {v3->
x(), v3->
y(), v3->
z()};
89 std::vector<double> &sizesBGM)
126 std::vector<double> &sizesBGM,
double lcA,
double lcB)
175 const double p[3] = {x, y,
z};
198 for(
int i = 0; i < 4; i++)
204 for(
int i = 0; i < 4; i++)
205 if(
neigh[i] == t)
return true;
211 const std::set<MFace, MFaceLessThan> * =
nullptr);
213 const std::set<MFace, MFaceLessThan> * =
nullptr);
214 void delaunayMeshIn3D(std::vector<MVertex *> &, std::vector<MTetrahedron *> &,
215 bool removeBox =
false);
217 double worstTetRadiusTarget,
bool _classify =
true,
237 #ifdef GMSH_PRE_ALLOCATE_STRATEGY
240 std::stack<MTet4 *> emptySlots;
241 inline MTet4 *getANewSlot()
243 if(s_last >= s_alloc)
return 0;
244 MTet4 *t = &(allSlots[s_last]);
248 inline MTet4 *getAnEmptySlot()
250 if(!emptySlots.empty()) {
251 MTet4 *t = emptySlots.top();
255 return getANewSlot();
261 #ifdef GMSH_PRE_ALLOCATE_STRATEGY
264 allSlots =
new MTet4[s_alloc];
269 #ifdef GMSH_PRE_ALLOCATE_STRATEGY
274 std::vector<double> &sizesBGM)
276 #ifdef GMSH_PRE_ALLOCATE_STRATEGY
277 MTet4 *t4 = getAnEmptySlot();
281 t4->
setup(t, sizes, sizesBGM);
285 std::vector<double> &sizesBGM,
double lc1,
double lc2)
287 #ifdef GMSH_PRE_ALLOCATE_STRATEGY
288 MTet4 *t4 = getAnEmptySlot();
292 t4->
setup(t, sizes, sizesBGM, lc1, lc2);
298 if(t->
tet())
delete t->
tet();
300 #ifdef GMSH_PRE_ALLOCATE_STRATEGY
virtual std::size_t getNum() const
int inCircumSphere(const MVertex *v) const
bool operator()(MTet4 const *const a, MTet4 const *const b) const
MTet4 * Create(MTetrahedron *t, std::vector< double > &sizes, std::vector< double > &sizesBGM, double lc1, double lc2)
void insertVerticesInRegion(GRegion *gr, int maxIter, double worstTetRadiusTarget, bool _classify=true, splitQuadRecovery *sqr=nullptr)
static double c(int i, int j, fullMatrix< double > &CA, const std::vector< SPoint3 > &P, const std::vector< SPoint3 > &Q)
void setup(MTetrahedron *t, std::vector< double > &sizes, std::vector< double > &sizesBGM, double lcA, double lcB)
double tetcircumcenter(double a[3], double b[3], double c[3], double d[3], double circumcenter[3], double *xi, double *eta, double *zeta)
void setNeigh(int iN, MTet4 *n)
void setQuality(const double &q)
std::set< MTet4 *, compareTet4Ptr > container
container::iterator iterator
void setup(MTetrahedron *t, std::vector< double > &sizes, std::vector< double > &sizesBGM)
void delaunayMeshIn3D(std::vector< MVertex * > &, std::vector< MTetrahedron * > &, bool removeBox=false)
MTetrahedron * tet() const
int inCircumSphere(double x, double y, double z) const
virtual MVertex * getVertex(int num)
static double qm(MTetrahedron *t, const Measures &cr, double *volume=nullptr)
void forceRadius(double r)
MTet4(MTetrahedron *t, double qual)
long int getIndex() const
double getQuality() const
MTet4(MTetrahedron *t, const qmTetrahedron::Measures &qm)
MTet4Factory(int _size=1000000)
void setOnWhat(GRegion *g)
void setTet(MTetrahedron *t)
void optimizeMesh(GRegion *gr, const qmTetrahedron::Measures &qm)
void circumcenter(double *res)
REAL orient3d(REAL *pa, REAL *pb, REAL *pc, REAL *pd)
void connectTets(std::list< MTet4 * > &, const std::set< MFace, MFaceLessThan > *=nullptr)
int inCircumSphere(const double *p) const
MTet4 * Create(MTetrahedron *t, std::vector< double > &sizes, std::vector< double > &sizesBGM)
void bowyerWatsonFrontalLayers(GRegion *gr, bool hex)
bool isNeigh(const MTet4 *t) const
void changeTetRadius(iterator it, double r)
MTet4 * getNeigh(int iN) const
void setDeleted(bool const d)