I don’t understand why the interpolation matrix for node-valued degrees of freedom is the identity matrix for RT elements is the following matrix
M = [[], [], [], []]
for _ in range(3):
M[0].append(np.zeros((0, 2, 0, 1)))
for normal in [[-1, -1], [-1, 0], [0, 1]]:
mat = np.empty((1, 2, len(wts), 1))
mat[0, 0, :, 0] = normal[0] * wts
mat[0, 1, :, 0] = normal[1] * wts
M[1].append(mat)
M[2].append(np.zeros((0, 2, 0, 1)))
The interpolation matrix tells Basix how to evaluation the DOF functionals from the function values at the interpolation points.
For RT, the functionals are integrals of the normal components, so the interpolation matrix contains the size of the normal in each direction multiplied by some quadrature weights for the integral.
For (eg) Lagrange elements, the functionals are evalutation at a point, so the matrix will contain a single 1 in each row (in the column corresponding to that point).
Thank you very much! Can I ask you one more about creating Degree 1 enriched vector Galerkin on a triangle ? This space consists of CG1+c*(x-1/3, y-1/3), which c is a constant. My question is I don’t know how to define the entries of points and interpolation matrices corresponding to costant c