Loading [MathJax]/extensions/tex2jax.js

dune-mmesh (unstable)

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
19template <class Kernel>
20static inline FieldVector<typename Kernel::RT, 2> makeFieldVector(
21 const CGAL::Point_2<Kernel>& p) {
22 return FieldVector<typename Kernel::RT, 2>({p.x(), p.y()});
23}
24
29template <class Kernel>
30static inline FieldVector<typename Kernel::RT, 2> makeFieldVector(
31 const CGAL::Vector_2<Kernel>& p) {
32 return FieldVector<typename Kernel::RT, 2>({p.x(), p.y()});
33}
34
39template <class Kernel>
40static inline FieldVector<typename Kernel::RT, 3> makeFieldVector(
41 const CGAL::Point_3<Kernel>& p) {
42 return FieldVector<typename Kernel::RT, 3>({p.x(), p.y(), p.z()});
43}
44
49template <class Kernel>
50static inline FieldVector<typename Kernel::RT, 3> makeFieldVector(
51 const CGAL::Vector_3<Kernel>& p) {
52 return FieldVector<typename Kernel::RT, 3>({p.x(), p.y(), p.z()});
53}
54
57typedef CGAL::Exact_predicates_inexact_constructions_kernel PointKernel;
58
62template <typename ctype>
63static inline auto makePoint(const Dune::FieldVector<ctype, 2>& v) {
64 return CGAL::Point_2<PointKernel>(v[0], v[1]);
65}
66
70template <typename ctype>
71static inline auto makePoint(const Dune::FieldVector<ctype, 3>& v) {
72 return CGAL::Point_3<PointKernel>(v[0], v[1], v[2]);
73}
74
77template <class Geometry>
78auto computeCircumcenter(const Geometry& geo) {
79 static constexpr int mydim = Geometry::mydim;
80
81 if constexpr (mydim == 3) {
82 // obtain circumcenter by CGAL
83 return makeFieldVector(
84 CGAL::circumcenter(makePoint(geo.corner(0)), makePoint(geo.corner(1)),
85 makePoint(geo.corner(2)), makePoint(geo.corner(3))));
86 }
87
88 if constexpr (mydim == 2) {
89 // obtain circumcenter by CGAL
90 return makeFieldVector(CGAL::circumcenter(makePoint(geo.corner(0)),
91 makePoint(geo.corner(1)),
92 makePoint(geo.corner(2))));
93 }
94
95 if constexpr (mydim == 1) return 0.5 * (geo.corner(0) + geo.corner(1));
96
97 if constexpr (mydim == 0) return geo.corner(0);
98}
99
100} // namespace Dune
101
102#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:20
static auto makePoint(const Dune::FieldVector< ctype, 2 > &v)
Convert FieldVector to CGAL Point 2.
Definition: pointfieldvector.hh:63
CGAL::Exact_predicates_inexact_constructions_kernel PointKernel
Convert FieldVector to CGAL Point.
Definition: pointfieldvector.hh:57
auto computeCircumcenter(const Geometry &geo)
Compute circumcenter.
Definition: pointfieldvector.hh:78
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Mar 16, 23:47, 2025)