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