dune-mmesh (1.4)

pointfieldvector.hh
Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2// vi: set et ts=4 sw=2 sts=2:
3#ifndef DUNE_GRID_MMESHPOINTFIELDVECTOR_HH
4#define DUNE_GRID_MMESHPOINTFIELDVECTOR_HH
5
6// Dune includes
7#include <dune/common/fvector.hh>
8
13namespace Dune
14{
15
20 template< class Kernel >
21 static inline FieldVector<typename Kernel::RT, 2> makeFieldVector( const CGAL::Point_2<Kernel>& p )
22 {
23 return FieldVector<typename Kernel::RT, 2>( { p.x(), p.y() } );
24 }
25
30 template< class Kernel >
31 static inline FieldVector<typename Kernel::RT, 2> makeFieldVector( const CGAL::Vector_2<Kernel>& p )
32 {
33 return FieldVector<typename Kernel::RT, 2>( { p.x(), p.y() } );
34 }
35
40 template< class Kernel >
41 static inline FieldVector<typename Kernel::RT, 3> makeFieldVector( const CGAL::Point_3<Kernel>& p )
42 {
43 return FieldVector<typename Kernel::RT, 3>( { p.x(), p.y(), p.z() } );
44 }
45
50 template< class Kernel >
51 static inline FieldVector<typename Kernel::RT, 3> makeFieldVector( const CGAL::Vector_3<Kernel>& p )
52 {
53 return FieldVector<typename Kernel::RT, 3>( { p.x(), p.y(), p.z() } );
54 }
55
56
59 typedef CGAL::Exact_predicates_inexact_constructions_kernel PointKernel;
60
64 template< typename ctype >
65 static inline auto makePoint( const Dune::FieldVector<ctype, 2>& v )
66 {
67 return CGAL::Point_2<PointKernel> ( v[ 0 ], v[ 1 ] );
68 }
69
73 template< typename ctype >
74 static inline auto makePoint( const Dune::FieldVector<ctype, 3>& v )
75 {
76 return CGAL::Point_3<PointKernel> ( v[ 0 ], v[ 1 ], v[ 2 ] );
77 }
78
81 template <class Geometry>
82 auto computeCircumcenter(const Geometry& geo)
83 {
84 static constexpr int mydim = Geometry::mydim;
85
86 if constexpr (mydim == 3)
87 {
88 // obtain circumcenter by CGAL
89 return makeFieldVector(
90 CGAL::circumcenter(
91 makePoint(geo.corner(0)),
92 makePoint(geo.corner(1)),
93 makePoint(geo.corner(2)),
94 makePoint(geo.corner(3))
95 )
96 );
97 }
98
99 if constexpr (mydim == 2)
100 {
101 // obtain circumcenter by CGAL
102 return makeFieldVector(
103 CGAL::circumcenter(
104 makePoint(geo.corner(0)),
105 makePoint(geo.corner(1)),
106 makePoint(geo.corner(2))
107 )
108 );
109 }
110
111 if constexpr (mydim == 1)
112 return 0.5 * (geo.corner(0) + geo.corner(1));
113
114 if constexpr (mydim == 0)
115 return geo.corner(0);
116 }
117
118} // namespace Dune
119
120#endif
static FieldVector< typename Kernel::RT, 2 > makeFieldVector(const CGAL::Point_2< Kernel > &p)
Helper function to create DUNE::FieldVector from CGAL::Point_2.
Definition: pointfieldvector.hh:21
static auto makePoint(const Dune::FieldVector< ctype, 2 > &v)
Convert FieldVector to CGAL Point 2.
Definition: pointfieldvector.hh:65
CGAL::Exact_predicates_inexact_constructions_kernel PointKernel
Convert FieldVector to CGAL Point.
Definition: pointfieldvector.hh:59
auto computeCircumcenter(const Geometry &geo)
Compute circumcenter.
Definition: pointfieldvector.hh:82
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Apr 6, 22:49, 2025)