Skip to content

Commit d15e0ad

Browse files
committed
fix: adding abstract vtk method for support
implementing method in subclasses
1 parent 7e6da5b commit d15e0ad

File tree

7 files changed

+45
-7
lines changed

7 files changed

+45
-7
lines changed

LoopStructural/interpolators/supports/_2d_base_unstructured.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,3 +338,19 @@ def get_element_gradient_for_location(
338338
"""
339339
verts, c, tri, inside = self.get_element_for_location(pos, return_verts=False)
340340
return self.evaluate_shape_derivatives(pos, tri)
341+
342+
def vtk(self, node_properties={}, cell_properties={}):
343+
"""
344+
Create a vtk unstructured grid from the mesh
345+
"""
346+
import pyvista as pv
347+
348+
grid = pv.UnstructuredGrid()
349+
grid.points = self.nodes
350+
grid.cell_types = np.ones(self.elements.shape[0]) * pv.vtk.VTK_TRIANGLE
351+
grid.cells = np.c_[np.ones(self.elements.shape[0]) * 3, self.elements]
352+
for key, value in node_properties.items():
353+
grid.point_data[key] = value
354+
for key, value in cell_properties.items():
355+
grid.cell_data[key] = value
356+
return grid

LoopStructural/interpolators/supports/_2d_structured_grid.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
44
"""
55

6+
from ast import Not
67
import logging
78

89
from typing import Tuple
@@ -460,3 +461,7 @@ def position_to_cell_vertices(self, pos):
460461

461462
def onGeometryChange(self):
462463
pass
464+
465+
def vtk(self, node_properties={}, cell_properties={}):
466+
raise NotImplementedError("VTK output not implemented for structured grid")
467+
pass

LoopStructural/interpolators/supports/_3d_base_structured.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ def position_to_cell_index(self, pos: np.ndarray) -> np.ndarray:
236236
cell_indexes[inside, 0] = x[inside] // self.step_vector[None, 0]
237237
cell_indexes[inside, 1] = y[inside] // self.step_vector[None, 1]
238238
cell_indexes[inside, 2] = z[inside] // self.step_vector[None, 2]
239-
239+
240240
return cell_indexes, inside
241241

242242
def position_to_cell_global_index(self, pos):
@@ -464,7 +464,7 @@ def vtk(self, node_properties={}, cell_properties={}):
464464
elements = elements.flatten()
465465
grid = pv.UnstructuredGrid(elements, celltype, self.nodes)
466466
for key, value in node_properties.items():
467-
grid.point_arrays[key] = value
467+
grid[key] = value
468468
for key, value in cell_properties.items():
469469
grid.cell_arrays[key] = value
470470
return grid

LoopStructural/interpolators/supports/_3d_structured_grid.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,6 @@ def evaluate_value(self, evaluation_points, property_array):
291291
)
292292
idc, inside = self.position_to_cell_corners(evaluation_points)
293293
# print(idc[inside,:], self.n_nodes,inside)
294-
295294
if idc.shape[0] != inside.shape[0]:
296295
raise ValueError("index does not match number of nodes")
297296
v = np.zeros(idc.shape)

LoopStructural/interpolators/supports/_3d_structured_tetra.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -730,7 +730,7 @@ def get_neighbours(self) -> np.ndarray:
730730
return neighbours
731731

732732
@property
733-
def vtk(self):
733+
def vtk(self, node_properties={}, cell_properties={}):
734734
try:
735735
import pyvista as pv
736736
except ImportError:
@@ -743,4 +743,9 @@ def vtk(self):
743743
[np.zeros(self.elements.shape[0], dtype=int)[:, None] + 4, self.elements]
744744
)
745745
elements = elements.flatten()
746-
return pv.UnstructuredGrid(elements, celltype, self.nodes)
746+
grid = pv.UnstructuredGrid(elements, celltype, self.nodes)
747+
for prop in node_properties:
748+
grid[prop] = node_properties[prop]
749+
for prop in cell_properties:
750+
grid.cell_arrays[prop] = cell_properties[prop]
751+
return grid

LoopStructural/interpolators/supports/_3d_unstructured_tetra.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,7 @@ def get_neighbours(self):
621621
"""
622622
return self.neighbours
623623

624-
def vtk(self):
624+
def vtk(self, node_properties={}, cell_properties={}):
625625
try:
626626
import pyvista as pv
627627
except ImportError:
@@ -634,4 +634,10 @@ def vtk(self):
634634
[np.zeros(self.elements.shape[0], dtype=int)[:, None] + 4, self.elements]
635635
)
636636
elements = elements.flatten()
637-
return pv.UnstructuredGrid(elements, celltype, self.nodes)
637+
grid = pv.UnstructuredGrid(elements, celltype, self.nodes)
638+
for key, value in node_properties.items():
639+
grid[key] = value
640+
for key, value in cell_properties.items():
641+
grid.cell_arrays[key] = value
642+
643+
return grid

LoopStructural/interpolators/supports/_base_support.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,10 @@ def element_size(self):
112112
Return the element size
113113
"""
114114
pass
115+
116+
@abstractmethod
117+
def vtk(self, node_properties={}, cell_properties={}):
118+
"""
119+
Return a vtk object
120+
"""
121+
pass

0 commit comments

Comments
 (0)