OGS
ShapeQuad8-impl.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4namespace NumLib
5{
6template <class T_X, class T_N>
7void ShapeQuad8::computeShapeFunction(const T_X& r, T_N& N)
8{
9 N[0] = 0.25 * (1.0 + r[0]) * (1.0 + r[1]) * (-1.0 + r[0] + r[1]);
10 N[1] = -0.25 * (1.0 - r[0]) * (1.0 + r[1]) * (1.0 + r[0] - r[1]);
11 N[2] = -0.25 * (1.0 - r[0]) * (1.0 - r[1]) * (1.0 + r[0] + r[1]);
12 N[3] = 0.25 * (1.0 + r[0]) * (1.0 - r[1]) * (-1.0 + r[0] - r[1]);
13 //
14 N[4] = 0.5 * (1.0 - r[0] * r[0]) * (1.0 + r[1]);
15 N[5] = 0.5 * (1.0 - r[1] * r[1]) * (1.0 - r[0]);
16 N[6] = 0.5 * (1.0 - r[0] * r[0]) * (1.0 - r[1]);
17 N[7] = 0.5 * (1.0 - r[1] * r[1]) * (1.0 + r[0]);
18}
19
20template <class T_X, class T_N>
21void ShapeQuad8::computeGradShapeFunction(const T_X& rs, T_N& dN)
22{
23 const double r = rs[0];
24 const double s = rs[1];
25
26 // dN/dr
27 dN[0] = (1 + s) * (2 * r + s) * 0.25;
28 dN[1] = (1 + s) * (2 * r - s) * 0.25;
29 dN[2] = (1 - s) * (2 * r + s) * 0.25;
30 dN[3] = (1 - s) * (2 * r - s) * 0.25;
31
32 dN[4] = -r * (1 + s);
33 dN[5] = -(1 - s * s) * 0.5;
34 dN[6] = -r * (1 - s);
35 dN[7] = (1 - s * s) * 0.5;
36
37 // dN/ds
38 dN[8] = (1 + r) * (r + 2 * s) * 0.25;
39 dN[9] = -(1 - r) * (r - 2 * s) * 0.25;
40 dN[10] = (1 - r) * (r + 2 * s) * 0.25;
41 dN[11] = -(1 + r) * (r - 2 * s) * 0.25;
42
43 dN[12] = (1 - r * r) * 0.5;
44 dN[13] = -(1 - r) * s;
45 dN[14] = -(1 - r * r) * 0.5;
46 dN[15] = -(1 + r) * s;
47}
48
49} // namespace NumLib
static void computeShapeFunction(const T_X &r, T_N &N)
static void computeGradShapeFunction(const T_X &rs, T_N &dN)