Flow123d  release_2.2.0-914-gf1a3a4f
intersection_aux.cc
Go to the documentation of this file.
1 /*
2  * Created on: 14.3.2016
3  * Author: pex
4  */
5 
6 #include "intersection_aux.hh"
8 
9 
10 template<unsigned int dimA, unsigned int dimB>
11 IntersectionAux<dimA,dimB>::IntersectionAux(unsigned int component_element_idx,
12  unsigned int bulk_element_idx)
13 : component_element_idx_(component_element_idx),
14  bulk_element_idx_(bulk_element_idx),
15  pathologic_(false)
16 {}
17 
18 template<unsigned int dimA, unsigned int dimB>
20 {}
21 
22 template<unsigned int dimA, unsigned int dimB>
24 {}
25 
26 
27 
28 // 1D-3D
29 
30 template<>
32 {
33  double length = 0;
34 
35  if(i_points_.size() > 1)
36  for(unsigned int i=0; i < i_points_.size()-1; i++)
37  {
38  length += std::abs(i_points_[i].local_bcoords_A()[1] - i_points_[i+1].local_bcoords_A()[1]);
39  }
40  return length;
41 }
42 
43 
44 
45 // 2D-3D
46 
47 template<>
49 {
50  double subtotal = 0.0;
51 
52  if(i_points_.size() > 2)
53  for(unsigned int j = 2; j < i_points_.size();j++){
54  //xprintf(Msg, "volani %d %d\n",j, i_points_.size());
55  subtotal += fabs(i_points_[0].local_bcoords_A()(1)*(i_points_[j-1].local_bcoords_A()(2) - i_points_[j].local_bcoords_A()(2)) +
56  i_points_[j-1].local_bcoords_A()(1)*(i_points_[j].local_bcoords_A()(2) - i_points_[0].local_bcoords_A()(2)) +
57  i_points_[j].local_bcoords_A()(1)*(i_points_[0].local_bcoords_A()(2) - i_points_[j-1].local_bcoords_A()(2)));
58  }
59  return fabs(subtotal/2);
60 }
61 
62 
63 template<unsigned int dimA, unsigned int dimB>
64 ostream& operator<<(ostream& os, const IntersectionAux<dimA,dimB>& intersection)
65 {
66  for(unsigned int i = 0; i < intersection.points().size(); i++)
67  os << intersection.points()[i];
68 
69  return os;
70 }
71 
72 
73 template class IntersectionAux<1,2>;
74 template class IntersectionAux<2,2>;
75 template class IntersectionAux<1,3>;
76 template class IntersectionAux<2,3>;
77 
78 template ostream& operator<< <1,2>(ostream &os, const IntersectionAux<1,2>& s);
79 template ostream& operator<< <2,2>(ostream &os, const IntersectionAux<2,2>& s);
80 template ostream& operator<< <1,3>(ostream &os, const IntersectionAux<1,3>& s);
81 template ostream& operator<< <2,3>(ostream &os, const IntersectionAux<2,3>& s);
82 
83 
std::vector< IntersectionPointAux< dimA, dimB > > i_points_
Vector of internal intersection points.
template ostream & operator<< < 2, 2 >(ostream &os, const IntersectionAux< 2, 2 > &s)
virtual ~IntersectionAux()
Destructor.
template ostream & operator<< < 1, 3 >(ostream &os, const IntersectionAux< 1, 3 > &s)
IntersectionAux()
Default constructor.
template ostream & operator<< < 2, 3 >(ostream &os, const IntersectionAux< 2, 3 > &s)
template ostream & operator<< < 1, 2 >(ostream &os, const IntersectionAux< 1, 2 > &s)
double compute_measure()
Internal class representing intersection point.
Internal class representing intersection object.