Intrepid2
Intrepid2_Orientation.hpp
Go to the documentation of this file.
1// @HEADER
2// ************************************************************************
3//
4// Intrepid2 Package
5// Copyright (2007) Sandia Corporation
6//
7// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8// license for use of this work by or on behalf of the U.S. Government.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact Kyungjoo Kim (kyukim@sandia.gov), or
38// Mauro Perego (mperego@sandia.gov)
39//
40// ************************************************************************
41// @HEADER
42
48#ifndef __INTREPID2_ORIENTATION_HPP__
49#define __INTREPID2_ORIENTATION_HPP__
50
51#include "Intrepid2_ConfigDefs.hpp"
52#include "Intrepid2_Types.hpp"
53#include "Intrepid2_Utils.hpp"
54
55#include "Shards_CellTopology.hpp"
56
57namespace Intrepid2 {
58
66 private:
67 template<typename cellVertViewType>
68 static void getCellVertexMap(typename cellVertViewType::non_const_value_type *subCellVerts,
69 ordinal_type &numVerts,
70 const shards::CellTopology cellTopo,
71 const cellVertViewType cellVerts,
72 const ordinal_type subCellDim,
73 const ordinal_type subCellOrd);
74
75 // orientation is always computed on the right-handed coordinates
76 template<typename subCellVertType>
77 static ordinal_type getOrientation(const subCellVertType subCellVerts[],
78 const ordinal_type numVerts);
79
80
81 public:
82
93 template<typename cellVertViewType>
94 static Orientation getOrientation(const shards::CellTopology cellTopo,
95 const cellVertViewType cellVerts,
96 bool isSide = false);
97
105 static ordinal_type getEdgeOrdinalOfFace(const ordinal_type subsubcellOrd,
106 const ordinal_type subcellOrd,
107 const shards::CellTopology cellTopo);
108
109
110 /*
111 Function Removed. Use instead Impl::OrientationTools::getRefSubcellTangents
112 template<typename refTanViewType>
113 static void getReferenceEdgeTangent(const refTanViewType &tanE,
114 const ordinal_type subcellOrd,
115 const shards::CellTopology cellTopo,
116 const ordinal_type ort,
117 const bool is_normalize = true);
118 */
119
120 /*
121 Function Removed. Use instead Impl::OrientationTools::getRefSubcellTangents
122 template<typename refTanViewType>
123 static void getReferenceFaceTangents(const refTanViewType &tanU,
124 const refTanViewType &tanV,
125 const ordinal_type subcellOrd,
126 const shards::CellTopology cellTopo,
127 const ordinal_type ort,
128 const bool is_normalize = true);
129 */
130
131 /*
132 Function Removed. Use instead Impl::OrientationTools::getRefSideTangentsAndNormal
133 template<typename refNormalViewType>
134 static void getReferenceFaceNormal(const refNormalViewType &normalV,
135 const ordinal_type subcellOrd,
136 const shards::CellTopology cellTopo,
137 const ordinal_type ort,
138 const bool is_normalize = true);
139 */
140
141
142 private:
143 ordinal_type _edgeOrt, _faceOrt;
144
145 public:
148 KOKKOS_INLINE_FUNCTION
149 Orientation();
150
153 KOKKOS_DEFAULTED_FUNCTION
154 Orientation(const Orientation &b) = default;
155
158 KOKKOS_INLINE_FUNCTION
159 bool isAlignedToReference() const;
160
165 KOKKOS_INLINE_FUNCTION
166 void setEdgeOrientation(const ordinal_type numEdge, const ordinal_type edgeOrt[]);
167
172 KOKKOS_INLINE_FUNCTION
173 void getEdgeOrientation(ordinal_type *edgeOrt, const ordinal_type numEdge) const;
174
179 KOKKOS_INLINE_FUNCTION
180 void setFaceOrientation(const ordinal_type numFace, const ordinal_type faceOrt[]);
181
186 KOKKOS_INLINE_FUNCTION
187 void getFaceOrientation(ordinal_type *faceOrt, const ordinal_type numFace) const;
188
191 inline std::string to_string() const;
192 };
193}
194
195inline std::ostream& operator<<(std::ostream& os, const ::Intrepid2::Orientation& orientation)
196{
197 os << orientation.to_string();
198 return os;
199}
200
201// include templated function definitions
203
204#endif
Definition file for the Intrepid2::Orientation class.
Contains definitions of custom data types in Intrepid2.
Header function for Intrepid2::Util class and other utility functions.
Orientation encoding and decoding.
KOKKOS_INLINE_FUNCTION void getFaceOrientation(ordinal_type *faceOrt, const ordinal_type numFace) const
KOKKOS_INLINE_FUNCTION void setFaceOrientation(const ordinal_type numFace, const ordinal_type faceOrt[])
KOKKOS_INLINE_FUNCTION void getEdgeOrientation(ordinal_type *edgeOrt, const ordinal_type numEdge) const
KOKKOS_INLINE_FUNCTION Orientation()
static ordinal_type getEdgeOrdinalOfFace(const ordinal_type subsubcellOrd, const ordinal_type subcellOrd, const shards::CellTopology cellTopo)
KOKKOS_INLINE_FUNCTION void setEdgeOrientation(const ordinal_type numEdge, const ordinal_type edgeOrt[])
KOKKOS_INLINE_FUNCTION bool isAlignedToReference() const
KOKKOS_DEFAULTED_FUNCTION Orientation(const Orientation &b)=default