10#if !defined(MiniTensor_Geometry_h)
11#define MiniTensor_Geometry_h
42template<
typename T, Index N>
45length(Vector<T, N>
const & p0, Vector<T, N>
const & p1);
50template<
typename T, Index N>
53area(Vector<T, N>
const & p0, Vector<T, N>
const & p1,
54 Vector<T, N>
const & p2);
65template<
typename T, Index N>
68area(Vector<T, N>
const & p0, Vector<T, N>
const & p1,
69 Vector<T, N>
const & p2, Vector<T, N>
const & p3);
74template<
typename T, Index N>
77volume(Vector<T, N>
const & p0, Vector<T, N>
const & p1,
78 Vector<T, N>
const & p2, Vector<T, N>
const & p3);
89template<
typename T, Index N>
92volume(Vector<T, N>
const & p0, Vector<T, N>
const & p1,
93 Vector<T, N>
const & p2, Vector<T, N>
const & p3,
94 Vector<T, N>
const & p4, Vector<T, N>
const & p5,
95 Vector<T, N>
const & p6, Vector<T, N>
const & p7);
103template<
typename T, Index N>
105centroid(std::vector<Vector<T, N>>
const & points);
112template<
typename T, Index N>
115normal(Vector<T, N>
const & p0,
116 Vector<T, N>
const & p1,
117 Vector<T, N>
const & p2);
125template<
typename T, Index N>
129 Vector<T, N>
const & p,
130 Vector<T, N>
const & p0,
131 Vector<T, N>
const & p1,
132 Vector<T, N>
const & p2,
133 T
const tolerance = 0);
142template<
typename T,
typename I, Index N>
144std::pair<Vector<T, N>, Vector<T, N>>
147template<
typename T,
typename I>
149std::pair<Vector<T, DYNAMIC>, Vector<T, DYNAMIC>>
159template<
typename T, Index N>
163 Vector<T, N>
const & p,
164 Vector<T, N>
const &
min,
165 Vector<T, N>
const &
max);
173template<
typename T, Index N>
177 Vector<T, N>
const &
min,
178 Vector<T, N>
const &
max);
185template<
typename T, Index N>
189 Vector<T, N>
const & p,
190 Vector<T, N>
const & p0,
191 Vector<T, N>
const & p1,
192 Vector<T, N>
const & p2,
193 Vector<T, N>
const & p3,
194 T
const tolerance = 0);
202template<
typename T, Index N>
206 Vector<T, N>
const & p,
207 Vector<T, N>
const & p0,
208 Vector<T, N>
const & p1,
209 Vector<T, N>
const & p2,
210 Vector<T, N>
const & p3,
211 Vector<T, N>
const & p4,
212 Vector<T, N>
const & p5,
213 Vector<T, N>
const & p6,
214 Vector<T, N>
const & p7,
215 T
const tolerance = 0);
223template<
typename T, Index N>
224typename std::vector<Vector<T, N>>::size_type
225closest_point(Vector<T, N>
const & p, std::vector<Vector<T, N>>
const & n);
233template<
typename T,
typename Iterator>
236median(Iterator begin, Iterator end);
248template<
typename T, Index N>
253 Vector<T, N>
const & p0,
254 Vector<T, N>
const & p1,
255 Vector<T, N>
const & p2,
256 Vector<T, N>
const & p3);
267template<
typename T, Index N>
272 Vector<T, N>
const & p0,
273 Vector<T, N>
const & p1,
274 Vector<T, N>
const & p2);
290template<
typename T, Index N>
295 Vector<T, N>
const & p0,
296 Vector<T, N>
const & p1,
297 Vector<T, N>
const & p2,
298 Vector<T, N>
const & p3,
299 Vector<T, N>
const & p4,
300 Vector<T, N>
const & p5,
301 Vector<T, N>
const & p6,
302 Vector<T, N>
const & p7);
314template<
typename T, Index N>
319 Vector<T, N>
const & p0,
320 Vector<T, N>
const & p1,
321 Vector<T, N>
const & p2,
322 Vector<T, N>
const & p3);
332template<
typename T, Index M, Index N>
338 std::vector<Vector<T, N>>
const & v);
346template<
typename T, Index N>
347std::vector< std::vector<T>>
371template<
typename T, Index N>
479template<
typename T, Index N>
587template<
typename T, Index N>
694template<
typename T, Index N>
802template<
typename T, Index N>
911template<
typename T, Index N>
939 template<
typename Visitor>
977find_type_1D(
Index const nodes)
987find_type_2D(
Index const nodes)
998find_type_3D(
Index const nodes)
1021 switch (dimension) {
1024 type = find_type_1D(number_nodes);
1028 type = find_type_2D(number_nodes);
1032 type = find_type_3D(number_nodes);
1050template<
typename T, Index N>
1055#if defined(KOKKOS_ENABLE_CUDA)
1059 minimum_ = std::numeric_limits<T>::max();
1060 maximum_ = std::numeric_limits<T>::min();
1068template<
typename T, Index N>
1076 phi = parameters(0);
1079 theta = parameters(1);
1082 normal(sin(phi) * sin(theta), cos(phi), sin(phi) * cos(theta));
1090template<
typename T, Index N>
1097 assert(parameters.get_dimension() == 2);
1100 normal = get_normal(parameters);
1107 determinant =
det(Q);
1109 if (determinant < minimum_) {
1110 minimum_ = determinant;
1111 arg_minimum_ = parameters;
1114 if (determinant > maximum_) {
1115 maximum_ = determinant;
1116 arg_maximum_ = parameters;
1125template<
typename T, Index N>
1130#if defined(KOKKOS_ENABLE_CUDA)
1134 minimum_ = std::numeric_limits<T>::max();
1135 maximum_ = std::numeric_limits<T>::min();
1143template<
typename T, Index N>
1160 normal(2.0 * x, 2.0 * y, r2 - 1.0);
1170template<
typename T, Index N>
1177 assert(parameters.get_dimension() == 2);
1180 normal = get_normal(parameters);
1187 determinant =
det(Q);
1189 if (determinant < minimum_) {
1190 minimum_ = determinant;
1191 arg_minimum_ = parameters;
1194 if (determinant > maximum_) {
1195 maximum_ = determinant;
1196 arg_maximum_ = parameters;
1205template<
typename T, Index N>
1210#if defined(KOKKOS_ENABLE_CUDA)
1214 minimum_ = std::numeric_limits<T>::max();
1215 maximum_ = std::numeric_limits<T>::min();
1223template<
typename T, Index N>
1257template<
typename T, Index N>
1264 assert(parameters.get_dimension() == 3);
1267 normal = get_normal(parameters);
1274 determinant =
det(Q);
1276 if (determinant < minimum_) {
1277 minimum_ = determinant;
1278 arg_minimum_ = parameters;
1281 if (determinant > maximum_) {
1282 maximum_ = determinant;
1283 arg_maximum_ = parameters;
1292template<
typename T, Index N>
1297#if defined(KOKKOS_ENABLE_CUDA)
1301 minimum_ = std::numeric_limits<T>::max();
1302 maximum_ = std::numeric_limits<T>::min();
1310template<
typename T, Index N>
1324 r = std::sqrt(x * x + y * y);
1330 normal(0) = x * sin(r) / r;
1331 normal(1) = y * sin(r) / r;
1343template<
typename T, Index N>
1350 assert(parameters.get_dimension() == 2);
1353 normal = get_normal(parameters);
1360 determinant =
det(Q);
1362 if (determinant < minimum_) {
1363 minimum_ = determinant;
1364 arg_minimum_ = parameters;
1367 if (determinant > maximum_) {
1368 maximum_ = determinant;
1369 arg_maximum_ = parameters;
1378template<
typename T, Index N>
1383#if defined(KOKKOS_ENABLE_CUDA)
1387 minimum_ = std::numeric_limits<T>::max();
1388 maximum_ = std::numeric_limits<T>::min();
1396template<
typename T, Index N>
1421template<
typename T, Index N>
1429 normal = get_normal(parameters);
1436 determinant =
det(Q);
1438 if (determinant < minimum_) {
1439 minimum_ = determinant;
1440 arg_minimum_ = parameters;
1443 if (determinant > maximum_) {
1444 maximum_ = determinant;
1445 arg_maximum_ = parameters;
1454template<
typename T, Index N>
1466 points_per_dimension_ = points_per_dimension;
1474template<
typename T, Index N>
1475template<
typename Visitor>
1485 total_number_points = 1;
1487 for (
Index dimension = 0; dimension < number_parameters; ++dimension) {
1488 total_number_points *= points_per_dimension_(dimension);
1493 for (
Index dimension = 1; dimension < number_parameters; ++dimension) {
1495 steps(dimension - 1) * points_per_dimension_(dimension - 1);
1505 span = upper_ - lower_;
1507 for (
LongIndex point = 1; point <= total_number_points; ++point) {
1511 for (
Index dimension = 0; dimension < number_parameters; ++dimension) {
1523 position_in_grid(dimension) = indices(dimension) * span(dimension) /
1524 (points_per_dimension_(dimension) - 1) + lower_(dimension);
1525 visitor(position_in_grid);
1530 if (point % steps(dimension) == 0) {
1531 ++indices(dimension);
1533 if (indices(dimension) == points_per_dimension_(dimension)) {
1534 indices(dimension) = 0;
1538 visitor(position_in_grid);
1555template<
typename T, Index N>
1560 return norm(p1 - p0);
1566template<
typename T, Index N>
1589template<
typename T, Index N>
1607template<
typename T, Index N>
1631template<
typename T, Index N>
1666 T
const V1 =
dot(v24, v7546 + v5041 + v0743);
1667 T
const V2 =
dot(v25, v7546 + v2616);
1668 T
const V3 =
dot(v20, v5041 + v2131);
1669 T
const V4 =
dot(v27, v0743 + v2363);
1671 T
const volume = (V1 + V2 + V3 + V4) / 12.0;
1682template<
typename T, Index N>
1688 typedef typename std::vector<Vector<T, N>>::size_type sizeT;
1689 sizeT
const n = points.size();
1691 for (sizeT i = 0; i < n; ++i) {
1694 return C /
static_cast<T
>(n);
1702template<
typename T, Index N>
1723template<
typename T, Index N>
1735 T
const h = std::min(
norm(v0),
norm(v1));
1739 T
const s =
dot(v, n);
1741 if (s < -tolerance * h)
return false;
1752template<
typename T,
typename I, Index N>
1754std::pair<Vector<T, N>, Vector<T, N>>
1771 for (; it != end; ++it) {
1776 for (
Index i = 0; i < dimension; ++i) {
1777 T
const s = point(i);
1778 if (s <
min(i))
min(i) = s;
1779 if (s >
max(i))
max(i) = s;
1784 return std::make_pair(
min,
max);
1790template<
typename T,
typename I>
1792std::pair<Vector<T, DYNAMIC>, Vector<T, DYNAMIC>>
1795 return bounding_box<T, I, DYNAMIC>(start, end);
1804template<
typename T, Index N>
1815 assert(
min.get_dimension() == dimension);
1816 assert(
max.get_dimension() == dimension);
1818 for (
Index i = 0; i < dimension; ++i) {
1820 if (s <
min(i))
return false;
1821 if (s >
max(i))
return false;
1832template<
typename T, Index N>
1840 assert(
max.get_dimension() == dimension);
1844 for (
Index i = 0; i < dimension; ++i) {
1845 p(i) = (
max(i) -
min(i)) * T(std::rand())/T(RAND_MAX) +
min(i);
1855template<
typename T, Index N>
1866 if (
in_normal_side(p, p0, p1, p2, tolerance) ==
false)
return false;
1867 if (
in_normal_side(p, p0, p3, p1, tolerance) ==
false)
return false;
1868 if (
in_normal_side(p, p1, p3, p2, tolerance) ==
false)
return false;
1869 if (
in_normal_side(p, p2, p3, p0, tolerance) ==
false)
return false;
1879template<
typename T, Index N>
1894 if (
in_normal_side(p, p0, p1, p2, tolerance) ==
false)
return false;
1895 if (
in_normal_side(p, p0, p4, p5, tolerance) ==
false)
return false;
1896 if (
in_normal_side(p, p1, p5, p6, tolerance) ==
false)
return false;
1897 if (
in_normal_side(p, p2, p6, p7, tolerance) ==
false)
return false;
1898 if (
in_normal_side(p, p3, p7, p4, tolerance) ==
false)
return false;
1899 if (
in_normal_side(p, p4, p7, p6, tolerance) ==
false)
return false;
1910template<
typename T, Index N>
1911typename std::vector<Vector<T, N>>::size_type
1914 assert(n.size() > 0);
1916 typename std::vector<Vector<T, N>>::size_type
1925 for (
typename std::vector<
Vector<T, N>>::size_type i = 1;
1950template<
typename T,
typename Iterator>
1961 size =
static_cast<Index>(std::distance(begin, end));
1967 mid_index = size / 2;
1970 mid_iterator = begin + mid_index;
1971 std::partial_sort(begin, mid_iterator, end);
1973 if (size % 2 == 0) {
1980 previous = mid_iterator - 1;
2004template<
typename T, Index N>
2016 N0 = 0.25 * (1 - xi(0)) * (1 - xi(1));
2019 N1 = 0.25 * (1 + xi(0)) * (1 - xi(1));
2022 N2 = 0.25 * (1 + xi(0)) * (1 + xi(1));
2025 N3 = 0.25 * (1 - xi(0)) * (1 + xi(1));
2028 p = N0 * p0 + N1 * p1 + N2 * p2 + N3 * p3;
2040template<
typename T, Index N>
2049 xi(2) = 1.0 - xi(0) - xi(1);
2052 p = xi(0) * p0 + xi(1) * p1 + xi(2) * p2;
2064template<
typename T, Index N>
2080 N0 = 0.125 * (1 - xi(0)) * (1 - xi(1)) * (1 - xi(2));
2083 N1 = 0.125 * (1 + xi(0)) * (1 - xi(1)) * (1 - xi(2));
2086 N2 = 0.125 * (1 + xi(0)) * (1 + xi(1)) * (1 - xi(2));
2089 N3 = 0.125 * (1 - xi(0)) * (1 + xi(1)) * (1 - xi(2));
2092 N4 = 0.125 * (1 - xi(0)) * (1 - xi(1)) * (1 + xi(2));
2095 N5 = 0.125 * (1 + xi(0)) * (1 - xi(1)) * (1 + xi(2));
2098 N6 = 0.125 * (1 + xi(0)) * (1 + xi(1)) * (1 + xi(2));
2101 N7 = 0.125 * (1 - xi(0)) * (1 + xi(1)) * (1 + xi(2));
2105 N0 * p0 + N1 * p1 + N2 * p2 + N3 * p3 +
2106 N4 * p4 + N5 * p5 + N6 * p6 + N7 * p7;
2118template<
typename T, Index N>
2128 xi(3) = 1.0 - xi(0) - xi(1) - xi(2);
2131 p = xi(0) * p0 + xi(1) * p1 + xi(2) * p2 + xi(3) * p3;
2144template<
typename T, Index M, Index N>
2154 switch (element_type) {
2170 xi, v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7]);
2188template<
typename T, Index N>
2189std::vector< std::vector<T>>
2193 number_points = points.size();
2195 std::vector< std::vector<T>>
2196 distances(number_points);
2198 for (
Index i = 0; i < number_points; ++i) {
2200 distances[i].resize(number_points);
2202 distances[i][i] = 0.0;
2204 for (
Index j = i + 1; j < number_points; ++j) {
2207 distance =
norm(points[i] - points[j]);
2209 distances[i][j] = distance;
2210 distances[j][i] = distance;
2230 number_points = distances.size();
2233 minima(number_points);
2237 minimum = distances[0][1];
2239 for (
Index j = 2; j < number_points; ++j) {
2240 minimum = std::min(minimum, distances[0][j]);
2243 minima[0] = minimum;
2246 for (
Index i = 1; i < number_points; ++i) {
2248 minimum = distances[i][0];
2250 for (
Index j = 1; j < number_points; ++j) {
2252 if (i == j)
continue;
2254 minimum = std::min(minimum, distances[i][j]);
2258 minima[i] = minimum;
#define KOKKOS_INLINE_FUNCTION
#define MT_ERROR_EXIT(...)
KOKKOS_INLINE_FUNCTION void clear()
static constexpr Index value
KOKKOS_INLINE_FUNCTION Vector< typename Promote< S, T >::type, N > cross(Vector< S, N > const &u, Vector< T, N > const &v)
KOKKOS_INLINE_FUNCTION Index get_dimension() const
KOKKOS_INLINE_FUNCTION Vector< typename Promote< S, T >::type, M > dot(Matrix< T, M, N > const &A, Vector< S, N > const &u)
KOKKOS_INLINE_FUNCTION T norm_square(Vector< T, N > const &u)
KOKKOS_INLINE_FUNCTION Tensor< typename Promote< S, T >::type, N > dot2(Tensor3< T, N > const &A, Vector< S > const &u)
KOKKOS_INLINE_FUNCTION Vector< T, N > normal(Vector< T, N > const &p0, Vector< T, N > const &p1, Vector< T, N > const &p2)
KOKKOS_INLINE_FUNCTION Vector< T, N > get_normal_minimum() const
KOKKOS_INLINE_FUNCTION Vector< T, N > get_normal_minimum() const
KOKKOS_INLINE_FUNCTION Vector< T, 3 > get_arg_minimum() const
KOKKOS_INLINE_FUNCTION void operator()(Vector< T, dimension_const< N, 3 >::value > const ¶meters)
KOKKOS_INLINE_FUNCTION Vector< T, N > interpolate_element(ELEMENT::Type element_type, Vector< T, M > &xi, std::vector< Vector< T, N > > const &v)
std::vector< T > minimum_distances(std::vector< std::vector< T > > const &distances)
Tensor4< T, N > const & tangent_
KOKKOS_INLINE_FUNCTION Vector< T, 2 > get_arg_maximum() const
Vector< T, 2 > arg_minimum_
Tensor4< T, N > const & tangent_
KOKKOS_INLINE_FUNCTION bool in_normal_side(Vector< T, N > const &p, Vector< T, N > const &p0, Vector< T, N > const &p1, Vector< T, N > const &p2, T const tolerance=0)
Tensor4< T, N > const & tangent_
KOKKOS_INLINE_FUNCTION Vector< T, N > get_normal(Vector< T, dimension_const< N, 2 >::value > const ¶meters) const
Tensor4< T, N > const & tangent_
KOKKOS_INLINE_FUNCTION bool in_hexahedron(Vector< T, N > const &p, Vector< T, N > const &p0, Vector< T, N > const &p1, Vector< T, N > const &p2, Vector< T, N > const &p3, Vector< T, N > const &p4, Vector< T, N > const &p5, Vector< T, N > const &p6, Vector< T, N > const &p7, T const tolerance=0)
KOKKOS_INLINE_FUNCTION T get_minimum() const
KOKKOS_INLINE_FUNCTION void operator()(Vector< T, dimension_const< N, 2 >::value > const ¶meters)
KOKKOS_INLINE_FUNCTION bool in_box(Vector< T, N > const &p, Vector< T, N > const &min, Vector< T, N > const &max)
KOKKOS_INLINE_FUNCTION CartesianParametrization(Tensor4< T, N > const &A)
KOKKOS_INLINE_FUNCTION Vector< T, N > get_normal(Vector< T, dimension_const< N, 2 >::value > const ¶meters) const
KOKKOS_INLINE_FUNCTION T get_maximum() const
KOKKOS_INLINE_FUNCTION Vector< T, N > get_normal_maximum() const
Vector< Index, N > points_per_dimension_
KOKKOS_INLINE_FUNCTION std::pair< Vector< T, N >, Vector< T, N > > bounding_box(I start, I end)
KOKKOS_INLINE_FUNCTION void operator()(Vector< T, dimension_const< N, 2 >::value > const ¶meters)
KOKKOS_INLINE_FUNCTION Vector< T, N > random_in_box(Vector< T, N > const &min, Vector< T, N > const &max)
Tensor4< T, N > const & tangent_
KOKKOS_INLINE_FUNCTION bool in_tetrahedron(Vector< T, N > const &p, Vector< T, N > const &p0, Vector< T, N > const &p1, Vector< T, N > const &p2, Vector< T, N > const &p3, T const tolerance=0)
std::vector< std::vector< T > > distance_matrix(std::vector< Vector< T, N > > const &points)
KOKKOS_INLINE_FUNCTION T get_maximum() const
Vector< T, 3 > arg_maximum_
KOKKOS_INLINE_FUNCTION SphericalParametrization(Tensor4< T, N > const &A)
Vector< T, 3 > arg_maximum_
KOKKOS_INLINE_FUNCTION TangentParametrization(Tensor4< T, N > const &A)
KOKKOS_INLINE_FUNCTION Vector< T, 3 > get_arg_minimum() const
KOKKOS_INLINE_FUNCTION Vector< T, N > get_normal_minimum() const
KOKKOS_INLINE_FUNCTION Vector< T, N > interpolate_tetrahedron(Vector< T, dimension_const< N, 4 >::value > &xi, Vector< T, N > const &p0, Vector< T, N > const &p1, Vector< T, N > const &p2, Vector< T, N > const &p3)
KOKKOS_INLINE_FUNCTION Vector< T, N > interpolate_quadrilateral(Vector< T, dimension_const< N, 2 >::value > &xi, Vector< T, N > const &p0, Vector< T, N > const &p1, Vector< T, N > const &p2, Vector< T, N > const &p3)
KOKKOS_INLINE_FUNCTION StereographicParametrization(Tensor4< T, N > const &A)
KOKKOS_INLINE_FUNCTION ParametricGrid()
KOKKOS_INLINE_FUNCTION void operator()(Vector< T, dimension_const< N, 2 >::value > const ¶meters)
KOKKOS_INLINE_FUNCTION Vector< T, 3 > get_arg_maximum() const
std::vector< Vector< T, N > >::size_type closest_point(Vector< T, N > const &p, std::vector< Vector< T, N > > const &n)
KOKKOS_INLINE_FUNCTION T area(Vector< T, N > const &p0, Vector< T, N > const &p1, Vector< T, N > const &p2)
KOKKOS_INLINE_FUNCTION Vector< T, N > get_normal_maximum() const
KOKKOS_INLINE_FUNCTION Vector< T, N > get_normal_maximum() const
KOKKOS_INLINE_FUNCTION Vector< T, 3 > get_arg_maximum() const
KOKKOS_INLINE_FUNCTION Vector< T, N > get_normal_maximum() const
KOKKOS_INLINE_FUNCTION ProjectiveParametrization(Tensor4< T, N > const &A)
KOKKOS_INLINE_FUNCTION T get_maximum() const
KOKKOS_INLINE_FUNCTION T get_maximum() const
KOKKOS_INLINE_FUNCTION T length(Vector< T, N > const &p0, Vector< T, N > const &p1)
KOKKOS_INLINE_FUNCTION Vector< T, 2 > get_arg_minimum() const
KOKKOS_INLINE_FUNCTION Vector< T, N > get_normal_minimum() const
Vector< T, 3 > arg_minimum_
KOKKOS_INLINE_FUNCTION Vector< T, 2 > get_arg_minimum() const
KOKKOS_INLINE_FUNCTION T get_minimum() const
Vector< T, 2 > arg_minimum_
KOKKOS_INLINE_FUNCTION Vector< T, N > get_normal_maximum() const
KOKKOS_INLINE_FUNCTION T volume(Vector< T, N > const &p0, Vector< T, N > const &p1, Vector< T, N > const &p2, Vector< T, N > const &p3)
KOKKOS_INLINE_FUNCTION Vector< T, N > get_normal(Vector< T, dimension_const< N, 3 >::value > const ¶meters) const
Vector< T, 2 > arg_maximum_
KOKKOS_INLINE_FUNCTION Vector< T, N > get_normal(Vector< T, dimension_const< N, 3 >::value > const ¶meters) const
KOKKOS_INLINE_FUNCTION Vector< T, 2 > get_arg_maximum() const
KOKKOS_INLINE_FUNCTION Vector< T, 2 > get_arg_minimum() const
KOKKOS_INLINE_FUNCTION Vector< T, N > interpolate_hexahedron(Vector< T, dimension_const< N, 3 >::value > &xi, Vector< T, N > const &p0, Vector< T, N > const &p1, Vector< T, N > const &p2, Vector< T, N > const &p3, Vector< T, N > const &p4, Vector< T, N > const &p5, Vector< T, N > const &p6, Vector< T, N > const &p7)
Vector< T, N > centroid(std::vector< Vector< T, N > > const &points)
Vector< T, 2 > arg_maximum_
KOKKOS_INLINE_FUNCTION ELEMENT::Type find_type(Index const dimension, Index const number_nodes)
KOKKOS_INLINE_FUNCTION Vector< T, 2 > get_arg_maximum() const
KOKKOS_INLINE_FUNCTION T get_minimum() const
Vector< T, 3 > arg_minimum_
KOKKOS_INLINE_FUNCTION T get_minimum() const
Vector< T, 2 > arg_maximum_
KOKKOS_INLINE_FUNCTION void traverse(Visitor &visitor) const
KOKKOS_INLINE_FUNCTION Vector< T, N > interpolate_triangle(Vector< T, dimension_const< N, 3 >::value > &xi, Vector< T, N > const &p0, Vector< T, N > const &p1, Vector< T, N > const &p2)
KOKKOS_INLINE_FUNCTION Vector< T, N > get_normal_minimum() const
KOKKOS_INLINE_FUNCTION T median(Iterator begin, Iterator end)
KOKKOS_INLINE_FUNCTION T get_maximum() const
Vector< T, 2 > arg_minimum_
KOKKOS_INLINE_FUNCTION T get_minimum() const
KOKKOS_INLINE_FUNCTION void operator()(Vector< T, dimension_const< N, 3 >::value > const ¶meters)
KOKKOS_INLINE_FUNCTION Vector< T, N > get_normal(Vector< T, dimension_const< N, 2 >::value > const ¶meters) const
KOKKOS_INLINE_FUNCTION T norm(Tensor< T, N > const &A)
KOKKOS_INLINE_FUNCTION T det(Tensor< T, N > const &A)
KOKKOS_INLINE_FUNCTION Quaternion< T > unit(Quaternion< T > const &q)
uint32_t Index
Indexing type.
KOKKOS_INLINE_FUNCTION T min(T const &a, T const &b)
KOKKOS_INLINE_FUNCTION T max(T const &a, T const &b)
uint64_t LongIndex
High count type.
Set to constant value if not dynamic.