VTK  9.7.20260921
HexGnGradient.h
Go to the documentation of this file.
1WORKSPACE(RealT, rterm, order + 1);
2WORKSPACE(RealT, sterm, order + 1);
3WORKSPACE(RealT, tterm, order + 1);
4WORKSPACE(RealT, drterm, order + 1);
5WORKSPACE(RealT, dsterm, order + 1);
6WORKSPACE(RealT, dtterm, order + 1);
7
8// Since the order is the same along each axis, we can use one loop to compute terms.
9for (int ii = 0; ii <= order; ++ii)
10{
11 rterm[ii] = 1.;
12 sterm[ii] = 1.;
13 tterm[ii] = 1.;
14 drterm[ii] = 0.;
15 dsterm[ii] = 0.;
16 dtterm[ii] = 0.;
17 for (int jj = 0; jj <= order; ++jj)
18 {
19 if (ii == jj)
20 {
21 continue;
22 }
23 rterm[ii] *= (rr - gaussPoint(order, jj)) / (gaussPoint(order, ii) - gaussPoint(order, jj));
24 sterm[ii] *= (ss - gaussPoint(order, jj)) / (gaussPoint(order, ii) - gaussPoint(order, jj));
25 tterm[ii] *= (tt - gaussPoint(order, jj)) / (gaussPoint(order, ii) - gaussPoint(order, jj));
26 double drt = 1.;
27 double dst = 1.;
28 double dtt = 1.;
29 for (int kk = 0; kk <= order; ++kk)
30 {
31 if (kk == ii)
32 {
33 continue;
34 }
35 // clang-format off
36 drt *= (kk == jj ? 1. : (rr - gaussPoint(order, jj))) / (gaussPoint(order, kk) - gaussPoint(order, jj));
37 dst *= (kk == jj ? 1. : (ss - gaussPoint(order, jj))) / (gaussPoint(order, kk) - gaussPoint(order, jj));
38 dtt *= (kk == jj ? 1. : (tt - gaussPoint(order, jj))) / (gaussPoint(order, kk) - gaussPoint(order, jj));
39 // clang-format on
40 }
41 drterm[ii] += drt;
42 dsterm[ii] += dst;
43 dtterm[ii] += dtt;
44 }
45}
46
47int term = 0;
48// Now apply terms to compute basis functions
49for (int kk = 0; kk <= order; ++kk)
50{
51 for (int jj = 0; jj <= order; ++jj)
52 {
53 for (int ii = 0; ii <= order; ++ii)
54 {
55 basisGradient[term++] = drterm[ii] * sterm[jj] * tterm[kk];
56 basisGradient[term++] = rterm[ii] * dsterm[jj] * tterm[kk];
57 basisGradient[term++] = rterm[ii] * sterm[jj] * dtterm[kk];
58 }
59 }
60}
basisGradient[0]
int term
Definition HexGnBasis.h:23
WORKSPACE(RealT, rterm, order+1)