VTK  9.7.20260923
TetCnBasis.h
Go to the documentation of this file.
1// Arbitrary-order Lagrange interpolants on the reference tetrahedron.
2//
3// This is the three-dimensional case of the construction described in
4// TriCnBasis.h: a product of Silvester polynomials over the four barycentric
5// coordinates, selected by a multi-index (i0, i1, i2, i3) summing to the
6// order n, enumerated with i1 (the r-axis) varying fastest.
7RealT nn = RealT(order[0]);
8
9WORKSPACE(RealT, bary, 4);
10bary[0] = 1. - rr - ss - tt;
11bary[1] = rr;
12bary[2] = ss;
13bary[3] = tt;
14
15WORKSPACE(RealT, pval, 4 * (order[0] + 1));
16for (int kk = 0; kk < 4; ++kk)
17{
18 int base = kk * (order[0] + 1);
19 pval[base] = 1.;
20 for (int mm = 1; mm <= order[0]; ++mm)
21 {
22 RealT rmm = RealT(mm);
23 pval[base + mm] = pval[base + mm - 1] * (nn * bary[kk] - (rmm - 1.)) / rmm;
24 }
25}
26
27int idx = 0;
28for (int i3 = 0; i3 <= order[0]; ++i3)
29{
30 for (int i2 = 0; i2 <= order[0] - i3; ++i2)
31 {
32 for (int i1 = 0; i1 <= order[0] - i2 - i3; ++i1)
33 {
34 int i0 = order[0] - i1 - i2 - i3;
35 basis[idx++] = pval[i0] * pval[(order[0] + 1) + i1] * pval[2 * (order[0] + 1) + i2] *
36 pval[3 * (order[0] + 1) + i3];
37 }
38 }
39}
int idx
Definition HexCnBasis.h:79
WORKSPACE(RealT, bary, 4)
bary[0]
Definition TetCnBasis.h:15
basis[0]
Definition CellC0Basis.h:1
RealT nn
Definition TetCnBasis.h:7