Programmable filter - Create a tensor of velocity gradients

21 Views Asked by At

I would like to create a tensor containing the velocity gradients for the 3 components of velocity for each cell of my mesh.

After several tries I obtain this solution but it still does not work:

import numpy as np
from paraview import numpy_support as ns

# Reading quantities
input0 = inputs[0]
U = input0.PointData["U_mean"]
V = input0.PointData["V_mean"]
W = input0.PointData["W_mean"]

gradu = gradient(U)
gradv = gradient(V)
gradw = gradient(W)

numPoints = input0.GetNumberOfPoints()

# Create a list to store flattened gradient tensors for each point
delta_tensors_flat = []

for i in range(numPoints):
    # Create the gradient tensor for the current point
    delta_tensor = np.array([[gradu[i, 0], gradu[i, 1], gradu[i, 2]],
                             [gradv[i, 0], gradv[i, 1], gradv[i, 2]],
                             [gradw[i, 0], gradw[i, 1], gradw[i, 2]]])
    # Flatten the gradient tensor and add it to the list
    delta_tensors_flat.append(delta_tensor.flatten())

# Convert the list to a numpy array
delta_tensors_flat_array = np.array(delta_tensors_flat)

# Print the shape of the array
print(delta_tensors_flat_array.shape)

# Add delta_tensors_flat_array to the point data
output.PointData.append(ns.numpy_to_vtk(delta_tensors_flat_array), "delta_tensor")

I get the error: Could not find a suitable VTK type for object.

The idea is to export the 9 component of the tensor as a .vtm file to latter remesh according to the velocity gradients (I need to have them as a tensor in the .vtm file and not component by component).

Thank you for your help!

0

There are 0 best solutions below