Slicing Tensors using subset of Free Indices or multiple free indices

Consider the following:

from ufl import as_tensor, indices, Identity

# geometric dimension
d = 3
# indices
i, j, k, l = indices(4)
# d x d indentity matrix
delta = Identity(d)

# 4th order tensor (shape 3x3x3x3)
C = as_tensor(delta[i, k]*delta[j, l] + delta[j, k]*delta[i, l], (i, j, k, l))


D = as_tensor([[[C[i, 0, k, l] for l in range(1, 3)]
              for k in range(d)] for i in range(d)])
print(D.ufl_shape)
1 Like