3#ifndef DUNE_GRIDGLUE_MERGING_COMPUTEINTERSECTION_HH
4#define DUNE_GRIDGLUE_MERGING_COMPUTEINTERSECTION_HH
6#include <dune/common/fvector.hh>
7#include <dune/common/fmatrix.hh>
12template<
int dimWorld,
int dim1,
int dim2,
typename T =
double>
15 typedef FieldVector<T, dimWorld>
Vector;
21 const std::vector<Vector> Y,
22 std::vector<std::vector<int> >& SX,
23 std::vector<std::vector<int> >& SY,
24 std::vector<Vector>& P);
26 std::vector<std::vector<unsigned int> >& subElements,
27 std::vector<std::vector<int> >& faceIds);
29 std::vector<std::vector<unsigned int> >& subElements,
30 std::vector<std::vector<int> >& faceIds);
41 typedef typename CM::Vector V;
42 const int dimWorld = V::dimension;
43 const int dim1 = CM::grid1Dimension;
44 const int dim2 = CM::grid2Dimension;
60 const std::vector<V>& Y,
61 std::vector<std::vector<int> >& SX,
62 std::vector<std::vector<int> >& SY,
74 template<
int isDim,
int dW>
76 const std::vector<std::vector<int> >& SX,
77 const std::vector<std::vector<int> >& SY,
78 const std::vector<V>& P,
79 std::vector<std::vector<int> >& H)
82 orderPoints_(std::integral_constant<int,isDim>(),std::integral_constant<int,dW>(),
83 centroid, SX, SY, P,H);
87 static void orderPoints_(std::integral_constant<int,1>,
88 std::integral_constant<int,1>,
90 const std::vector<std::vector<int> >& SX,
91 const std::vector<std::vector<int> >& SY,
92 const std::vector<V>& P,
93 std::vector<std::vector<int> >& H) {}
94 static void orderPoints_(std::integral_constant<int,1>,
95 std::integral_constant<int,2>,
97 const std::vector<std::vector<int> >& SX,
98 const std::vector<std::vector<int> >& SY,
99 const std::vector<V>& P,
100 std::vector<std::vector<int> >& H) {}
101 static void orderPoints_(std::integral_constant<int,1>,
102 std::integral_constant<int,3>,
104 const std::vector<std::vector<int> >& SX,
105 const std::vector<std::vector<int> >& SY,
106 const std::vector<V>& P,
107 std::vector<std::vector<int> >& H) {}
108 static void orderPoints_(std::integral_constant<int,2>,
109 std::integral_constant<int,2>,
111 const std::vector<std::vector<int> >& SX,
112 const std::vector<std::vector<int> >& SY,
113 const std::vector<V>& P,
114 std::vector<std::vector<int> >& H);
115 static void orderPoints_(std::integral_constant<int,2>,
116 std::integral_constant<int,3>,
118 const std::vector<std::vector<int> >& SX,
119 const std::vector<std::vector<int> >& SY,
120 const std::vector<V>& P,
121 std::vector<std::vector<int> >& H);
122 static void orderPoints_(std::integral_constant<int,3>,
123 std::integral_constant<int,3>,
125 const std::vector<std::vector<int> >& SX,
126 const std::vector<std::vector<int> >& SY,
127 const std::vector<V>& P,
128 std::vector<std::vector<int> > & H);
137 static void orderPointsCC(std::integral_constant<int,2>,
139 std::vector<int> &
id,
140 const std::vector<V>& P);
141 static void orderPointsCC(std::integral_constant<int,3>,
143 std::vector<int> &
id,
144 const std::vector<V>& P);
150 static void removeDuplicates( std::vector<int> & p);
159 static bool newFace3D(
const std::vector<int>&
id,
160 const std::vector<std::vector<int> >& H);
171 while ((k<P.size())&&
172 ((p - P[k]).infinity_norm()>eps*(P[k].infinity_norm()) &&
173 (p - P[k]).infinity_norm()>eps*(p.infinity_norm())) &&
174 !(p.infinity_norm() < eps && P[k].infinity_norm() <eps &&
175 (p - P[k]).infinity_norm() < eps))
Definition: gridglue.hh:37
int insertPoint(const V p, std::vector< V > &P)
Definition: computeintersection.hh:164
Definition: computeintersection.hh:13
static void grid2_subdivisions(const std::vector< Vector > elementCorners, std::vector< std::vector< unsigned int > > &subElements, std::vector< std::vector< int > > &faceIds)
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)
FieldVector< T, dimWorld > Vector
Definition: computeintersection.hh:15
static const int grid1Dimension
Definition: computeintersection.hh:16
static void grid1_subdivisions(const std::vector< Vector > elementCorners, std::vector< std::vector< unsigned int > > &subElements, std::vector< std::vector< int > > &faceIds)
static const int grid2Dimension
Definition: computeintersection.hh:17
static const int intersectionDimension
Definition: computeintersection.hh:18
Intersection computation method for two elements of arbitrary dimension.
Definition: computeintersection.hh:39
static void orderPoints(const V ¢roid, 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:75
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:14