better use centralized functionality

This commit is contained in:
Martin Diehl 2020-03-11 06:50:13 +01:00
parent a024ec378a
commit b3e8a4405e
1 changed files with 10 additions and 39 deletions

View File

@ -9,6 +9,7 @@ from vtk.util import numpy_support
import h5py import h5py
import numpy as np import numpy as np
from . import VTK
from . import util from . import util
from . import version from . import version
from . import table from . import table
@ -245,15 +246,15 @@ class Result:
def place(self,datasets,component=0,tagged=False,split=True): def place(self,datasets,component=0,tagged=False,split=True):
""" """
Distribute datasets onto geometry and return Table or (split) dictionary of Tables. Distribute datasets onto geometry and return Table or (split) dictionary of Tables.
Must not mix nodal end cell data. Must not mix nodal end cell data.
Only data within Only data within
- inc?????/constituent/*_*/* - inc?????/constituent/*_*/*
- inc?????/materialpoint/*_*/* - inc?????/materialpoint/*_*/*
- inc?????/geometry/* - inc?????/geometry/*
are considered. are considered.
Parameters Parameters
---------- ----------
datasets : iterable or str datasets : iterable or str
@ -1040,44 +1041,14 @@ class Result:
if mode.lower()=='cell': if mode.lower()=='cell':
if self.structured: if self.structured:
coordArray = [vtk.vtkDoubleArray(),vtk.vtkDoubleArray(),vtk.vtkDoubleArray()] v = VTK.from_rectilinearGrid(self.grid,self.size,self.origin)
for dim in [0,1,2]: vtk_geom = v.geom
for c in np.linspace(0,self.size[dim],1+self.grid[dim]):
coordArray[dim].InsertNextValue(c)
vtk_geom = vtk.vtkRectilinearGrid()
vtk_geom.SetDimensions(*(self.grid+1))
vtk_geom.SetXCoordinates(coordArray[0])
vtk_geom.SetYCoordinates(coordArray[1])
vtk_geom.SetZCoordinates(coordArray[2])
else: else:
nodes = vtk.vtkPoints()
with h5py.File(self.fname,'r') as f: with h5py.File(self.fname,'r') as f:
nodes.SetData(numpy_support.numpy_to_vtk(f['/geometry/x_n'][()],deep=True)) v = VTK.from_unstructuredGrid(f['/geometry/x_n'][()],
f['/geometry/T_c'],
vtk_geom = vtk.vtkUnstructuredGrid() f['/geometry/T_c'].attrs['VTK_TYPE'].decode())
vtk_geom.SetPoints(nodes) vtk_geom = v.geom
vtk_geom.Allocate(f['/geometry/T_c'].shape[0])
if self.version_major == 0 and self.version_minor <= 5:
vtk_type = vtk.VTK_HEXAHEDRON
n_nodes = 8
else:
if f['/geometry/T_c'].attrs['VTK_TYPE'] == b'TRIANGLE':
vtk_type = vtk.VTK_TRIANGLE
n_nodes = 3
elif f['/geometry/T_c'].attrs['VTK_TYPE'] == b'QUAD':
vtk_type = vtk.VTK_QUAD
n_nodes = 4
elif f['/geometry/T_c'].attrs['VTK_TYPE'] == b'TETRA': # not tested
vtk_type = vtk.VTK_TETRA
n_nodes = 4
elif f['/geometry/T_c'].attrs['VTK_TYPE'] == b'HEXAHEDRON':
vtk_type = vtk.VTK_HEXAHEDRON
n_nodes = 8
for i in f['/geometry/T_c']:
vtk_geom.InsertNextCell(vtk_type,n_nodes,i-1)
elif mode.lower()=='point': elif mode.lower()=='point':
Points = vtk.vtkPoints() Points = vtk.vtkPoints()