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 
30 namespace Intrepid2 {
31 
32 //============================================================================================//
33 // //
34 // RefSubcellParametrization //
35 // //
36 //============================================================================================//
37 
76 template<typename DeviceType>
78 public:
79  using ConstViewType = Kokkos::DynRankView<const double,DeviceType>;
80 
83  RefSubcellParametrization() = default;
84 
87  ~RefSubcellParametrization() = default;
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 
118 private:
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 
171 template<typename DeviceType>
173 public:
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 
202 private:
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 
253 template<typename DeviceType>
255 public:
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 
284 private:
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 
332 template<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 
417 #include "Intrepid2_CellDataDef.hpp"
418 
419 #endif
420 
This class defines the coordinates of the barycenter of the supported reference cells. The barycenter coordinates are stored in static views. The class is templated on the Kokkos::Device Type which is used to determine layout and memory space of the views.
RefSubcellParametrization()=default
Default constructor.
static bool isReferenceNodeDataSet_
whether the nodes coordinates have been already set using the method set()
Kokkos::DynRankView< double, DeviceType > ViewType
static views containing the center coordinates allocated on DeviceType::memory_space ...
static const ReferenceNodeDataStatic refNodeDataStatic_
static struct containing the nodes coordinates on host
This class implements a check function that determines whether a given point is inside or outside the...
Kokkos::DynRankView< double, DeviceType > ViewType
static views containing the parametrization maps, allocated on DeviceType::memory_space ...
~RefSubcellParametrization()=default
Destructor.
Definition file for the classes: Intrepid2::RefSubcellParametrization, Intrepid2::RefCellNodes, Intrepid2::RefCellCenter.
Header function for Intrepid2::Util class and other utility functions.
~RefCellNodes()=default
Destructor.
RefCellNodes()=default
Default constructor.
This class defines the coordinates of the nodes of reference cells according for supported cell topol...
static bool isReferenceCellCenterDataSet_
whether the center coordinates have been already set using the method set()
static void set()
Set reference nodes coordinates for supported topologies.
static bool isSupported(const unsigned cellTopoKey)
Checks if a cell topology has a reference parametrization.
static void set()
Computes and stores static views containing the parametrizations maps of edges and faces of all refer...
Contains definitions of custom data types in Intrepid2.
static bool isSubcellParametrizationSet_
whether the parametrizations have been already computed using the method set()
RefCellCenter()=default
Default constructor.
Kokkos::DynRankView< double, DeviceType > ViewType
static views containing the node coordinates allocated on DeviceType::memory_space ...
Reference node containers for each supported topology.
This class defines the parametrizations of edges and faces of supported reference cells...
Header file for small functions used in Intrepid2.
static void set()
Set center coordinates of reference cell for supported topologies.
static const ReferenceCenterDataStatic refCenterDataStatic_
static struct containing the nodes coordinates on host
~RefCellCenter()=default
Destructor.