WARPXM v1.10.0
Loading...
Searching...
No Matches
wmunstructuredgeometryfunctions.h
Go to the documentation of this file.
1#ifndef WMUNSTRUCTUREDGEOMETRYFUNCTIONS_H_
2#define WMUNSTRUCTUREDGEOMETRYFUNCTIONS_H_
3
4// STL Includes
5#include <cmath>
6#include <array>
7
8#include "warpxm/warpxm_config.h"
9
10template<typename T> T sign(T a);
11
12// Unstructured Grids Only -----------------------------
13
14void resetVector(real v[3]);
15
16void vectoralCrossProduct(const real vec1[3], const real vec2[3], real product[3]);
17
18real vectoralDotProduct(const real vec1[3], const real vec2[3]);
19
21
22void vectoralMultiplyByScalar(real vec[3], const real scalar);
23
25
26void vectoralTangentNormalized(const real normal[3], real tangent[3]);
27
28void vectoralTangent(const real vec[3], real tangent[3]);
29
30void vectoralBinormal(const real normal[3], const real tangent[3], real binormal[3]);
31
32void vectoralMatrixMultiply_left(const real M[3][3], const real v[3], real Mv[3]);
33
35 const real n[3],
36 const real angle,
37 real r[3]);
38
39// The following functions are the general form for creating element geometry information
40// from the transform coordinates defined in WmUnstructuredGeometry
41
42real generateElementGeometry_Line(const real tC[2*3], real areas[2], real* norms);
43
44real generateElementGeometry_01_Line(const real tC[2*3], real areas[2], real* norms);
45
46real generateElementGeometry_Triangle(const real tC[3*3], real areas[3], real* norms);
47
49
50real generateElementGeometry_Tetrahedron(const real tC[4*3], real areas[4], real* norms);
51
52real generateElementGeometry_Hexahedron(const real tC[8*3], real* areas, real* norms);
53
54real generateElementGeometry_Point(const real tC[1*3], real areas[1], real* norms);
55
56// This is where we generate and define the transform coordinates
57
58void generateTransformCoordinates_Line(const real nodePositions[], real tC[]);
59
60void generateTransformCoordinates_01_Line(const real nodePositions[], real tC[]);
61
62void generateTransformCoordinates_Triangle(const real nodePositions[], real tC[]);
63
64void generateTransformCoordinates_Quadrilateral(const real nodePositions[], real tC[]);
65
66void generateTransformCoordinates_Tetrahedron(const real nodePositions[], real tC[]);
67
68void generateTransformCoordinates_Hexahedron(const real nodePositions[], real tC[]);
69
70void generateTransformCoordinates_Point(const real nodePositions[], real tC[]);
71
72// These functions transform normalized coordinates to actual coordinates
73
75 const real normalizedPosition[3],
76 real position[3]);
77
79 const real normalizedPosition[3],
80 real position[3]);
81
83 const real normalizedPosition[3],
84 real position[3]);
85
87 const real normalizedPosition[3],
88 real position[3]);
89
91 const real normalizedPosition[3],
92 real position[3]);
93
95 const real normalizedPosition[3],
96 real position[3]);
97
99 const real normalizedPosition[3],
100 real position[3]);
101
102// These functions transform coordinates to normalized coordinates
103
105 const real position[3],
106 real normalizedPosition[3]);
107
109 const real position[3],
110 real normalizedPosition[3]);
111
113 const real position[3],
114 real normalizedPosition[3]);
115
117 const real position[3],
118 real normalizedPosition[3]);
119
121 const real position[3],
122 real normalizedPosition[3]);
123
125 const real position[3],
126 real normalizedPosition[3]);
127
129 const real position[3],
130 real normalizedPosition[3]);
131
132// These functions transform normalized coordinates to element central coordinates (actual
133// coordinates - element centroid)
134
136 const real normalizedPosition[3],
137 real position[3]);
138
140 const real normalizedPosition[3],
141 real position[3]);
142
144 const real normalizedPosition[3],
145 real position[3]);
146
148 const real normalizedPosition[3],
149 real position[3]);
150
152 const real normalizedPosition[3],
153 real position[3]);
154
156 const real normalizedPosition[3],
157 real position[3]);
158
160 const real normalizedPosition[3],
161 real position[3]);
162
163// These functions generate the element centroid from the transform coordinates (very
164// simple for most primitives)
165
166void generateCentroid_Line(const real tC[], real centroid[3]);
167
168void generateCentroid_01_Line(const real tC[], real centroid[3]);
169
170void generateCentroid_Triangle(const real tC[], real centroid[3]);
171
172void generateCentroid_Quadrilateral(const real tC[], real centroid[3]);
173
174void generateCentroid_Tetrahedron(const real tC[], real centroid[3]);
175
176void generateCentroid_Hexahedron(const real tC[], real centroid[3]);
177
178void generateCentroid_Point(const real tC[], real centroid[3]);
179
180// These are volume Jacobians designed to work with WmUnstructuredQuadrature
181
182real generateVolumeJacobian_Line(const real tC[], const real normalizedPosition[3]);
183
184real generateVolumeJacobian_01_Line(const real tC[], const real normalizedPosition[3]);
185
187 const real normalizedPosition[3]);
188
190 const real normalizedPosition[3]);
191
193 const real normalizedPosition[3]);
194
196 const real normalizedPosition[3]);
197
198real generateVolumeJacobian_Point(const real tC[], const real normalizedPosition[3]);
199
201 const real normalizedPosition[3],
202 real jacobian[][3]);
203
205 const real normalizedPosition[3],
206 real jacobian[][3]);
207
209 const real normalizedPosition[3],
210 real jacobian[][3]);
211
213 const real normalizedPosition[3],
214 real jacobian[][3]);
215
217 const real normalizedPosition[3],
218 real jacobian[][3]);
219
221 const real normalizedPosition[3],
222 real jacobian[][3]);
223
225 const real normalizedPosition[3],
226 real jacobian[][3]);
227
228void invertTwoXTwoMatrix(const real a[2][2], real in[2][2]);
229void invertTwoXTwoMatrix(const std::array<std::array<real, 2>, 2>& a,
230 std::array<std::array<real, 2>, 2>& in);
231
232void invertThreeXThreeMatrix(const real a[3][3], real in[3][3]);
233void invertThreeXThreeMatrix(const std::array<std::array<real, 3>, 3>& a,
234 std::array<std::array<real, 3>, 3>& in);
235
237 const int fIndex,
238 real f_tC[][3]);
239
241 const int fIndex,
242 real f_tC[][3]);
243
245 const int fIndex,
246 real f_tC[][3]);
247
249 const int fIndex,
250 real f_tC[][3]);
251
253 const int fIndex,
254 real f_tC[][3]);
255
256#endif // WMUNSTRUCTUREDGEOMETRYFUNCTIONS_H_
#define real
Definition: wmoclunstructuredreconstruction.h:11
void generatePositionInElement_Quadrilateral(const real *tC, const real normalizedPosition[3], real position[3])
void generateCentroid_Hexahedron(const real tC[], real centroid[3])
void vectoralCrossProduct(const real vec1[3], const real vec2[3], real product[3])
void generateCentroid_Quadrilateral(const real tC[], real centroid[3])
real generateVolumeJacobian_01_Line(const real tC[], const real normalizedPosition[3])
void generateTransformCoordinates_Hexahedron(const real nodePositions[], real tC[])
void generateCentralPositionInElement_Quadrilateral(const real tC[][3], const real normalizedPosition[3], real position[3])
void generateNormalizedPositionInElement_Hexahedron(const real *tC, const real position[3], real normalizedPosition[3])
void generateTransformCoordinates_01_Line(const real nodePositions[], real tC[])
void vectoralTangent(const real vec[3], real tangent[3])
real vectoralNormalize(real vec[3])
void generateNormalizedPositionInElement_Triangle(const real *tC, const real position[3], real normalizedPosition[3])
void convertFaceTransformCoordinates_Triangle_To_Line(const real v_tC[][3], const int fIndex, real f_tC[][3])
real generateVolumeJacobian_Line(const real tC[], const real normalizedPosition[3])
void generateCentralPositionInElement_Line(const real tC[][3], const real normalizedPosition[3], real position[3])
void generateNormalizedPositionInElement_Quadrilateral(const real *tC, const real position[3], real normalizedPosition[3])
void resetVector(real v[3])
real generateVolumeJacobian_Triangle(const real tC[], const real normalizedPosition[3])
void generateJacobianMatrix_Line(const real tC[][3], const real normalizedPosition[3], real jacobian[][3])
real generateElementGeometry_01_Line(const real tC[2 *3], real areas[2], real *norms)
void generateJacobianMatrix_Tetrahedron(const real tC[][3], const real normalizedPosition[3], real jacobian[][3])
real generateElementGeometry_Quadrilateral(const real tC[4 *3], real *areas, real *norms)
void generatePositionInElement_Point(const real *tC, const real normalizedPosition[3], real position[3])
T sign(T a)
void invertThreeXThreeMatrix(const real a[3][3], real in[3][3])
void generateJacobianMatrix_Quadrilateral(const real tC[][3], const real normalizedPosition[3], real jacobian[][3])
real generateVolumeJacobian_Point(const real tC[], const real normalizedPosition[3])
real vectoralDotProduct(const real vec1[3], const real vec2[3])
void generateCentralPositionInElement_Point(const real tC[][3], const real normalizedPosition[3], real position[3])
void generatePositionInElement_01_Line(const real *tC, const real normalizedPosition[3], real position[3])
real generateVolumeJacobian_Tetrahedron(const real tC[], const real normalizedPosition[3])
void generatePositionInElement_Line(const real *tC, const real normalizedPosition[3], real position[3])
void generateTransformCoordinates_Triangle(const real nodePositions[], real tC[])
void generateCentralPositionInElement_Hexahedron(const real tC[][3], const real normalizedPosition[3], real position[3])
void generateCentralPositionInElement_Tetrahedron(const real tC[][3], const real normalizedPosition[3], real position[3])
void generateCentroid_Triangle(const real tC[], real centroid[3])
void generatePositionInElement_Hexahedron(const real *tC, const real normalizedPosition[3], real position[3])
void generateNormalizedPositionInElement_Line(const real *tC, const real position[3], real normalizedPosition[3])
void generateJacobianMatrix_Point(const real tC[][3], const real normalizedPosition[3], real jacobian[][3])
void invertTwoXTwoMatrix(const real a[2][2], real in[2][2])
void generateJacobianMatrix_01_Line(const real tC[][3], const real normalizedPosition[3], real jacobian[][3])
void vectoralMultiplyByScalar(real vec[3], const real scalar)
real generateElementGeometry_Hexahedron(const real tC[8 *3], real *areas, real *norms)
void generateNormalizedPositionInElement_Tetrahedron(const real *tC, const real position[3], real normalizedPosition[3])
void generateCentralPositionInElement_Triangle(const real tC[][3], const real normalizedPosition[3], real position[3])
real generateElementGeometry_Point(const real tC[1 *3], real areas[1], real *norms)
void vectoralBinormal(const real normal[3], const real tangent[3], real binormal[3])
void generateCentroid_01_Line(const real tC[], real centroid[3])
void generateJacobianMatrix_Triangle(const real tC[][3], const real normalizedPosition[3], real jacobian[][3])
void generateNormalizedPositionInElement_01_Line(const real *tC, const real position[3], real normalizedPosition[3])
void generateTransformCoordinates_Quadrilateral(const real nodePositions[], real tC[])
real generateVolumeJacobian_Hexahedron(const real tC[], const real normalizedPosition[3])
void generateCentroid_Line(const real tC[], real centroid[3])
real generateElementGeometry_Triangle(const real tC[3 *3], real areas[3], real *norms)
real generateElementGeometry_Line(const real tC[2 *3], real areas[2], real *norms)
void convertFaceTransformCoordinates_Hexahedron_To_Quadrilateral(const real v_tC[][3], const int fIndex, real f_tC[][3])
void vectoralTangentNormalized(const real normal[3], real tangent[3])
void generateCentralPositionInElement_01_Line(const real tC[][3], const real normalizedPosition[3], real position[3])
void generateTransformCoordinates_Tetrahedron(const real nodePositions[], real tC[])
void vectoralMatrixMultiply_left(const real M[3][3], const real v[3], real Mv[3])
void generatePositionInElement_Tetrahedron(const real *tC, const real normalizedPosition[3], real position[3])
real vectoralMagnitude(const real vec[3])
void convertFaceTransformCoordinates_Line_To_Point(const real v_tC[][3], const int fIndex, real f_tC[][3])
void generateTransformCoordinates_Line(const real nodePositions[], real tC[])
void generateCentroid_Tetrahedron(const real tC[], real centroid[3])
real generateElementGeometry_Tetrahedron(const real tC[4 *3], real areas[4], real *norms)
void generateCentroid_Point(const real tC[], real centroid[3])
void vectoralRotateAroundNormalizedVector(const real v[3], const real n[3], const real angle, real r[3])
void generateNormalizedPositionInElement_Point(const real *tC, const real position[3], real normalizedPosition[3])
void generateJacobianMatrix_Hexahedron(const real tC[][3], const real normalizedPosition[3], real jacobian[][3])
void generateTransformCoordinates_Point(const real nodePositions[], real tC[])
void convertFaceTransformCoordinates_Tetrahedron_To_Triangle(const real v_tC[][3], const int fIndex, real f_tC[][3])
void generatePositionInElement_Triangle(const real *tC, const real normalizedPosition[3], real position[3])
real generateVolumeJacobian_Quadrilateral(const real tC[], const real normalizedPosition[3])
void convertFaceTransformCoordinates_Quadrilateral_To_Line(const real v_tC[][3], const int fIndex, real f_tC[][3])