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;
58 const std::vector<V>& Y,
59 std::vector<std::vector<int> >& SX,
60 std::vector<std::vector<int> >& SY,
72 template<
int isDim,
int dW>
74 const std::vector<std::vector<int> >& SX,
75 const std::vector<std::vector<int> >& SY,
76 const std::vector<V>& P,
77 std::vector<std::vector<int> >& H)
80 orderPoints_(std::integral_constant<int,isDim>(),std::integral_constant<int,dW>(),
81 centroid, SX, SY, P,H);
85 static void orderPoints_(std::integral_constant<int,1>,
86 std::integral_constant<int,1>,
88 const std::vector<std::vector<int> >& SX,
89 const std::vector<std::vector<int> >& SY,
90 const std::vector<V>& P,
91 std::vector<std::vector<int> >& H) {}
92 static void orderPoints_(std::integral_constant<int,1>,
93 std::integral_constant<int,2>,
95 const std::vector<std::vector<int> >& SX,
96 const std::vector<std::vector<int> >& SY,
97 const std::vector<V>& P,
98 std::vector<std::vector<int> >& H) {}
99 static void orderPoints_(std::integral_constant<int,1>,
100 std::integral_constant<int,3>,
102 const std::vector<std::vector<int> >& SX,
103 const std::vector<std::vector<int> >& SY,
104 const std::vector<V>& P,
105 std::vector<std::vector<int> >& H) {}
106 static void orderPoints_(std::integral_constant<int,2>,
107 std::integral_constant<int,2>,
109 const std::vector<std::vector<int> >& SX,
110 const std::vector<std::vector<int> >& SY,
111 const std::vector<V>& P,
112 std::vector<std::vector<int> >& H);
113 static void orderPoints_(std::integral_constant<int,2>,
114 std::integral_constant<int,3>,
116 const std::vector<std::vector<int> >& SX,
117 const std::vector<std::vector<int> >& SY,
118 const std::vector<V>& P,
119 std::vector<std::vector<int> >& H);
120 static void orderPoints_(std::integral_constant<int,3>,
121 std::integral_constant<int,3>,
123 const std::vector<std::vector<int> >& SX,
124 const std::vector<std::vector<int> >& SY,
125 const std::vector<V>& P,
126 std::vector<std::vector<int> > & H);
135 static void orderPointsCC(std::integral_constant<int,2>,
137 std::vector<int> &
id,
138 const std::vector<V>& P);
139 static void orderPointsCC(std::integral_constant<int,3>,
141 std::vector<int> &
id,
142 const std::vector<V>& P);
148 static void removeDuplicates( std::vector<int> & p);
157 static bool newFace3D(
const std::vector<int>&
id,
158 const std::vector<std::vector<int> >& H);
169 while ((k<P.size())&&
170 ((p - P[k]).infinity_norm()>eps*(P[k].infinity_norm()) &&
171 (p - P[k]).infinity_norm()>eps*(p.infinity_norm())) &&
172 !(p.infinity_norm() < eps && P[k].infinity_norm() <eps &&
173 (p - P[k]).infinity_norm() < eps))