Skip to content

Commit

Permalink
fix: adding abstract vtk method for support
Browse files Browse the repository at this point in the history
implementing method in subclasses
  • Loading branch information
lachlangrose committed Sep 3, 2024
1 parent 7e6da5b commit d15e0ad
Show file tree
Hide file tree
Showing 7 changed files with 45 additions and 7 deletions.
16 changes: 16 additions & 0 deletions LoopStructural/interpolators/supports/_2d_base_unstructured.py
Original file line number Diff line number Diff line change
Expand Up @@ -338,3 +338,19 @@ def get_element_gradient_for_location(
"""
verts, c, tri, inside = self.get_element_for_location(pos, return_verts=False)
return self.evaluate_shape_derivatives(pos, tri)

def vtk(self, node_properties={}, cell_properties={}):
"""
Create a vtk unstructured grid from the mesh
"""
import pyvista as pv

grid = pv.UnstructuredGrid()
grid.points = self.nodes
grid.cell_types = np.ones(self.elements.shape[0]) * pv.vtk.VTK_TRIANGLE
grid.cells = np.c_[np.ones(self.elements.shape[0]) * 3, self.elements]
for key, value in node_properties.items():
grid.point_data[key] = value
for key, value in cell_properties.items():
grid.cell_data[key] = value
return grid
5 changes: 5 additions & 0 deletions LoopStructural/interpolators/supports/_2d_structured_grid.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"""

from ast import Not
import logging

from typing import Tuple
Expand Down Expand Up @@ -460,3 +461,7 @@ def position_to_cell_vertices(self, pos):

def onGeometryChange(self):
pass

def vtk(self, node_properties={}, cell_properties={}):
raise NotImplementedError("VTK output not implemented for structured grid")
pass
4 changes: 2 additions & 2 deletions LoopStructural/interpolators/supports/_3d_base_structured.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ def position_to_cell_index(self, pos: np.ndarray) -> np.ndarray:
cell_indexes[inside, 0] = x[inside] // self.step_vector[None, 0]
cell_indexes[inside, 1] = y[inside] // self.step_vector[None, 1]
cell_indexes[inside, 2] = z[inside] // self.step_vector[None, 2]

return cell_indexes, inside

def position_to_cell_global_index(self, pos):
Expand Down Expand Up @@ -464,7 +464,7 @@ def vtk(self, node_properties={}, cell_properties={}):
elements = elements.flatten()
grid = pv.UnstructuredGrid(elements, celltype, self.nodes)
for key, value in node_properties.items():
grid.point_arrays[key] = value
grid[key] = value
for key, value in cell_properties.items():
grid.cell_arrays[key] = value
return grid
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,6 @@ def evaluate_value(self, evaluation_points, property_array):
)
idc, inside = self.position_to_cell_corners(evaluation_points)
# print(idc[inside,:], self.n_nodes,inside)

if idc.shape[0] != inside.shape[0]:
raise ValueError("index does not match number of nodes")
v = np.zeros(idc.shape)
Expand Down
9 changes: 7 additions & 2 deletions LoopStructural/interpolators/supports/_3d_structured_tetra.py
Original file line number Diff line number Diff line change
Expand Up @@ -730,7 +730,7 @@ def get_neighbours(self) -> np.ndarray:
return neighbours

@property
def vtk(self):
def vtk(self, node_properties={}, cell_properties={}):
try:
import pyvista as pv
except ImportError:
Expand All @@ -743,4 +743,9 @@ def vtk(self):
[np.zeros(self.elements.shape[0], dtype=int)[:, None] + 4, self.elements]
)
elements = elements.flatten()
return pv.UnstructuredGrid(elements, celltype, self.nodes)
grid = pv.UnstructuredGrid(elements, celltype, self.nodes)
for prop in node_properties:
grid[prop] = node_properties[prop]
for prop in cell_properties:
grid.cell_arrays[prop] = cell_properties[prop]
return grid
10 changes: 8 additions & 2 deletions LoopStructural/interpolators/supports/_3d_unstructured_tetra.py
Original file line number Diff line number Diff line change
Expand Up @@ -621,7 +621,7 @@ def get_neighbours(self):
"""
return self.neighbours

def vtk(self):
def vtk(self, node_properties={}, cell_properties={}):
try:
import pyvista as pv
except ImportError:
Expand All @@ -634,4 +634,10 @@ def vtk(self):
[np.zeros(self.elements.shape[0], dtype=int)[:, None] + 4, self.elements]
)
elements = elements.flatten()
return pv.UnstructuredGrid(elements, celltype, self.nodes)
grid = pv.UnstructuredGrid(elements, celltype, self.nodes)
for key, value in node_properties.items():
grid[key] = value
for key, value in cell_properties.items():
grid.cell_arrays[key] = value

return grid
7 changes: 7 additions & 0 deletions LoopStructural/interpolators/supports/_base_support.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,3 +112,10 @@ def element_size(self):
Return the element size
"""
pass

@abstractmethod
def vtk(self, node_properties={}, cell_properties={}):
"""
Return a vtk object
"""
pass

0 comments on commit d15e0ad

Please sign in to comment.