1 #ifndef DUNE_GRIDGLUE_MERGING_COMPUTEINTERSECTION_HH
2 #define DUNE_GRIDGLUE_MERGING_COMPUTEINTERSECTION_HH
4 #include <dune/common/fvector.hh>
5 #include <dune/common/fmatrix.hh>
10 template<
int dimWorld,
int dim1,
int dim2,
typename T =
double>
13 typedef FieldVector<T, dimWorld>
Vector;
19 const std::vector<Vector> Y,
20 std::vector<std::vector<int> >& SX,
21 std::vector<std::vector<int> >& SY,
22 std::vector<Vector>& P);
24 std::vector<std::vector<unsigned int> >& subElements,
25 std::vector<std::vector<int> >& faceIds);
27 std::vector<std::vector<unsigned int> >& subElements,
28 std::vector<std::vector<int> >& faceIds);
39 typedef typename CM::Vector V;
40 const int dimWorld = V::dimension;
41 const int dim1 = CM::grid1Dimension;
42 const int dim2 = CM::grid2Dimension;
59 const std::vector<V> Y,
60 std::vector<std::vector<int> >& SX,
61 std::vector<std::vector<int> >& SY,
73 template<
int isDim,
int dW>
75 const std::vector<std::vector<int> > SX,
76 const std::vector<std::vector<int> > SY,
77 const std::vector<V> P,
78 std::vector<std::vector<int> >& H)
81 orderPoints_(std::integral_constant<int,isDim>(),std::integral_constant<int,dW>(),
82 centroid, SX, SY, P,H);
86 static void orderPoints_(std::integral_constant<int,1>,
87 std::integral_constant<int,1>,
89 const std::vector<std::vector<int> > SX,
90 const std::vector<std::vector<int> > SY,
91 const std::vector<V> P,
92 std::vector<std::vector<int> >& H) {}
93 static void orderPoints_(std::integral_constant<int,1>,
94 std::integral_constant<int,2>,
96 const std::vector<std::vector<int> > SX,
97 const std::vector<std::vector<int> > SY,
98 const std::vector<V> P,
99 std::vector<std::vector<int> >& H) {}
100 static void orderPoints_(std::integral_constant<int,1>,
101 std::integral_constant<int,3>,
103 const std::vector<std::vector<int> > SX,
104 const std::vector<std::vector<int> > SY,
105 const std::vector<V> P,
106 std::vector<std::vector<int> >& H) {}
107 static void orderPoints_(std::integral_constant<int,2>,
108 std::integral_constant<int,2>,
110 const std::vector<std::vector<int> > SX,
111 const std::vector<std::vector<int> > SY,
112 const std::vector<V> P,
113 std::vector<std::vector<int> >& H);
114 static void orderPoints_(std::integral_constant<int,2>,
115 std::integral_constant<int,3>,
117 const std::vector<std::vector<int> > SX,
118 const std::vector<std::vector<int> > SY,
119 const std::vector<V> P,
120 std::vector<std::vector<int> >& H);
121 static void orderPoints_(std::integral_constant<int,3>,
122 std::integral_constant<int,3>,
124 const std::vector<std::vector<int> > SX,
125 const std::vector<std::vector<int> > SY,
126 const std::vector<V> P,
127 std::vector<std::vector<int> > & H);
136 static void orderPointsCC(std::integral_constant<int,2>,
138 std::vector<int> &
id,
139 const std::vector<V> P);
140 static void orderPointsCC(std::integral_constant<int,3>,
142 std::vector<int> &
id,
143 const std::vector<V> P);
149 static void removeDuplicates( std::vector<int> & p);
158 static bool newFace3D(
const std::vector<int>
id,
159 const std::vector<std::vector<int> > H);
170 while ((k<P.size())&&
171 ((p - P[k]).infinity_norm()>eps*(P[k].infinity_norm()) &&
172 (p - P[k]).infinity_norm()>eps*(p.infinity_norm())) &&
173 !(p.infinity_norm() < eps && P[k].infinity_norm() <eps &&
174 (p - P[k]).infinity_norm() < eps))
static const int grid2Dimension
Definition: computeintersection.hh:15
FieldVector< T, dimWorld > Vector
Definition: computeintersection.hh:13
static void orderPoints(const V centroid, const std::vector< std::vector< int > > SX, const std::vector< std::vector< int > > SY, const std::vector< V > P, std::vector< std::vector< int > > &H)
Order Points in the point list P face-wise such that a subsimplex subdivision can be constructed...
Definition: computeintersection.hh:74
static const int grid1Dimension
Definition: computeintersection.hh:14
Definition: gridglue.hh:34
static bool computeIntersection(const std::vector< V > X, const std::vector< V > Y, std::vector< std::vector< int > > &SX, std::vector< std::vector< int > > &SY, std::vector< V > &P)
Compute the intersection of two elements X and Y Compute the intersection of two elements X and Y...
Definition: computeintersection.cc:12
static bool computeIntersectionPoints(const std::vector< Vector > X, const std::vector< Vector > Y, std::vector< std::vector< int > > &SX, std::vector< std::vector< int > > &SY, std::vector< Vector > &P)
static void grid2_subdivisions(const std::vector< Vector > elementCorners, std::vector< std::vector< unsigned int > > &subElements, std::vector< std::vector< int > > &faceIds)
static const int intersectionDimension
Definition: computeintersection.hh:16
Intersection computation method for two elements of arbitrary dimension.
Definition: computeintersection.hh:37
static void grid1_subdivisions(const std::vector< Vector > elementCorners, std::vector< std::vector< unsigned int > > &subElements, std::vector< std::vector< int > > &faceIds)
int insertPoint(const V p, std::vector< V > &P)
Definition: computeintersection.hh:163
Definition: computeintersection.hh:11