Intrepid2
Intrepid2_CellData.hpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// Intrepid2 Package
4//
5// Copyright 2007 NTESS and the Intrepid2 contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
19#ifndef __INTREPID2_CELLDATA_HPP__
20#define __INTREPID2_CELLDATA_HPP__
21
22#include "Intrepid2_ConfigDefs.hpp"
23
24#include "Shards_CellTopology.hpp"
25
26#include "Intrepid2_Types.hpp"
27#include "Intrepid2_Utils.hpp"
28#include "Intrepid2_Kernels.hpp"
29
30namespace Intrepid2 {
31
32//============================================================================================//
33// //
34// RefSubcellParametrization //
35// //
36//============================================================================================//
37
76template<typename DeviceType>
78public:
79 using ConstViewType = Kokkos::DynRankView<const double,DeviceType>;
80
84
88
89
94 static inline bool
95 isSupported( const unsigned cellTopoKey );
96
97
113 static inline
114 ConstViewType
115 get( const ordinal_type subcellDim,
116 const unsigned parentCellKey );
117
118private:
119
123 static void set();
124
134 template <typename HostViewType>
135 static void
136 set( HostViewType subcellParam,
137 const ordinal_type subcellDim,
138 const shards::CellTopology parentCell );
139
141 using ViewType = Kokkos::DynRankView<double,DeviceType>;
142 static ViewType lineEdgesParam; // edge maps for 2d non-standard cells; shell line and beam
143 static ViewType triEdgesParam, quadEdgesParam; // edge maps for 2d standard cells
144 static ViewType shellTriEdgesParam, shellQuadEdgesParam; // edge maps for 3d non-standard cells; shell tri and quad
145 static ViewType tetEdgesParam, hexEdgesParam, pyrEdgesParam, wedgeEdgesParam; // edge maps for 3d standard cells
146 static ViewType shellTriFacesParam, shellQuadFacesParam; // face maps for 3d non-standard cells
147 static ViewType tetFacesParam, hexFacesParam, pyrFacesParam, wedgeFacesParam; // face maps for 3d standard cells
148
151
152
153};
154
155
156
157//============================================================================================//
158// //
159// RefCellNodes //
160// //
161//============================================================================================//
162
163
171template<typename DeviceType>
173public:
174 using ConstViewType = Kokkos::DynRankView<const double,DeviceType>;
175
178 RefCellNodes() = default;
179
182 ~RefCellNodes() = default;
183
184
198 static inline
199 ConstViewType
200 get(const unsigned cellTopoKey);
201
202private:
205 static void set();
206
208 using ViewType = Kokkos::DynRankView<double,DeviceType>;
209 static ViewType lineNodes, line3Nodes;
210 static ViewType triangleNodes, triangle4Nodes, triangle6Nodes;
211 static ViewType quadrilateralNodes, quadrilateral8Nodes, quadrilateral9Nodes;
212 static ViewType tetrahedronNodes, tetrahedron8Nodes, tetrahedron10Nodes, tetrahedron11Nodes;
213 static ViewType hexahedronNodes, hexahedron20Nodes, hexahedron27Nodes;
214 static ViewType pyramidNodes, pyramid13Nodes, pyramid14Nodes;
215 static ViewType wedgeNodes, wedge15Nodes, wedge18Nodes;
216
217
222 double line[2][3], line_3[3][3];
223 double triangle[3][3], triangle_4[4][3], triangle_6[6][3];
224 double quadrilateral[4][3], quadrilateral_8[8][3], quadrilateral_9[9][3];
225 double tetrahedron[4][3], tetrahedron_8[8][3], tetrahedron_10[10][3], tetrahedron_11[10][3];
226 double hexahedron[8][3], hexahedron_20[20][3], hexahedron_27[27][3];
227 double pyramid[5][3], pyramid_13[13][3], pyramid_14[14][3];
228 double wedge[6][3], wedge_15[15][3], wedge_18[18][3];
229 };
230
233
236
237};
238
239//============================================================================================//
240// //
241// RefCellCenter //
242// //
243//============================================================================================//
244
245
253template<typename DeviceType>
255public:
256 using ConstViewType = Kokkos::DynRankView<const double,DeviceType>;
257
258
261 RefCellCenter() = default;
262
265 ~RefCellCenter() = default;
266
267
280 static inline
281 ConstViewType
282 get(const unsigned cellTopoKey);
283
284private:
287 static void set();
288
290 using ViewType = Kokkos::DynRankView<double,DeviceType>;
291 static ViewType lineCenter;
292 static ViewType triangleCenter;
293 static ViewType quadrilateralCenter;
294 static ViewType tetrahedronCenter;
295 static ViewType hexahedronCenter;
296 static ViewType pyramidCenter;
297 static ViewType wedgeCenter;
298
303 double line[3];
304 double triangle[3];
305 double quadrilateral[3];
306 double tetrahedron[3];
307 double hexahedron[3];
308 double pyramid[3];
309 double wedge[3];
310 };
311
314
317};
318
319//============================================================================================//
320// //
321// PointInclusion //
322// //
323//============================================================================================//
324
325
332template<unsigned CellTopologyKey>
334
338 template<>
339 struct PointInclusion<shards::Line<>::key> {
340 template<typename PointViewType, typename ScalarType>
341 KOKKOS_INLINE_FUNCTION
342 static bool
343 check(const PointViewType &point, const ScalarType threshold);
344 };
345
349 template<>
350 struct PointInclusion<shards::Triangle<>::key> {
351 template<typename PointViewType, typename ScalarType>
352 KOKKOS_INLINE_FUNCTION
353 static bool
354 check(const PointViewType &point, const ScalarType threshold);
355 };
356
360 template<>
361 struct PointInclusion<shards::Quadrilateral<>::key> {
362
363 template<typename PointViewType, typename ScalarType>
364 KOKKOS_INLINE_FUNCTION
365 static bool
366 check(const PointViewType &point, const ScalarType threshold);
367 };
368
372 template<>
373 struct PointInclusion<shards::Tetrahedron<>::key> {
374 template<typename PointViewType, typename ScalarType>
375 KOKKOS_INLINE_FUNCTION
376 static bool
377 check(const PointViewType &point, const ScalarType threshold);
378 };
379
383 template<>
384 struct PointInclusion<shards::Hexahedron<>::key> {
385 template<typename PointViewType, typename ScalarType>
386 KOKKOS_INLINE_FUNCTION
387 static bool
388 check(const PointViewType &point, const ScalarType threshold);
389 };
390
394 template<>
395 struct PointInclusion<shards::Pyramid<>::key> {
396 template<typename PointViewType, typename ScalarType>
397 KOKKOS_INLINE_FUNCTION
398 static bool
399 check(const PointViewType &point, const ScalarType threshold);
400 };
401
405 template<>
406 struct PointInclusion<shards::Wedge<>::key> {
407 template<typename PointViewType, typename ScalarType>
408 KOKKOS_INLINE_FUNCTION
409 static bool
410 check(const PointViewType &point, const ScalarType threshold);
411 };
412
413 const CellTopologyData* getCellTopologyData(const unsigned& cellTopologyKey);
414
415}
416
418
419#endif
420
Definition file for the classes: Intrepid2::RefSubcellParametrization, Intrepid2::RefCellNodes,...
Header file for small functions used in Intrepid2.
Contains definitions of custom data types in Intrepid2.
Header function for Intrepid2::Util class and other utility functions.
This class defines the coordinates of the barycenter of the supported reference cells....
~RefCellCenter()=default
Destructor.
Kokkos::DynRankView< double, DeviceType > ViewType
static views containing the center coordinates allocated on DeviceType::memory_space
static const ReferenceCenterDataStatic refCenterDataStatic_
static struct containing the nodes coordinates on host
static void set()
Set center coordinates of reference cell for supported topologies.
RefCellCenter()=default
Default constructor.
static ConstViewType get(const unsigned cellTopoKey)
Retrieves the Cartesian coordinates of a reference cell barycenter.
static bool isReferenceCellCenterDataSet_
whether the center coordinates have been already set using the method set()
This class defines the coordinates of the nodes of reference cells according for supported cell topol...
~RefCellNodes()=default
Destructor.
static ConstViewType get(const unsigned cellTopoKey)
Retrieves the Cartesian coordinates of reference cell nodes.
static void set()
Set reference nodes coordinates for supported topologies.
static bool isReferenceNodeDataSet_
whether the nodes coordinates have been already set using the method set()
static const ReferenceNodeDataStatic refNodeDataStatic_
static struct containing the nodes coordinates on host
RefCellNodes()=default
Default constructor.
Kokkos::DynRankView< double, DeviceType > ViewType
static views containing the node coordinates allocated on DeviceType::memory_space
This class defines the parametrizations of edges and faces of supported reference cells....
static void set()
Computes and stores static views containing the parametrizations maps of edges and faces of all refer...
static bool isSubcellParametrizationSet_
whether the parametrizations have been already computed using the method set()
~RefSubcellParametrization()=default
Destructor.
Kokkos::DynRankView< double, DeviceType > ViewType
static views containing the parametrization maps, allocated on DeviceType::memory_space
static bool isSupported(const unsigned cellTopoKey)
Checks if a cell topology has a reference parametrization.
RefSubcellParametrization()=default
Default constructor.
static ConstViewType get(const ordinal_type subcellDim, const unsigned parentCellKey)
Returns a Kokkos view with the coefficients of the parametrization maps for the edges or faces of a r...
This class implements a check function that determines whether a given point is inside or outside the...
Reference node containers for each supported topology.