more logical encapsulation
- getting data out of VTK is a functionality of the VTK class. Need to discuss whether the VTK class should also provide grid and size (works only for rectilinear grid, so hiding VTK type is not possible anymore), but the current situation requires the Geom class to rely on 'internals' of the VTK class - header is specific to *.geom format, not to Geom objects.
This commit is contained in:
parent
507a165733
commit
0d3ef29554
|
@ -7,7 +7,6 @@ from functools import partial
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from scipy import ndimage,spatial
|
from scipy import ndimage,spatial
|
||||||
from vtk.util.numpy_support import vtk_to_numpy as vtk_to_np
|
|
||||||
|
|
||||||
from . import environment
|
from . import environment
|
||||||
from . import Rotation
|
from . import Rotation
|
||||||
|
@ -271,16 +270,6 @@ class Geom:
|
||||||
return self.comments[:]
|
return self.comments[:]
|
||||||
|
|
||||||
|
|
||||||
def get_header(self):
|
|
||||||
"""Return the full header (grid, size, origin, homogenization, comments)."""
|
|
||||||
header = [f'{len(self.comments)+4} header'] + self.comments
|
|
||||||
header.append('grid a {} b {} c {}'.format(*self.get_grid()))
|
|
||||||
header.append('size x {} y {} z {}'.format(*self.get_size()))
|
|
||||||
header.append('origin x {} y {} z {}'.format(*self.get_origin()))
|
|
||||||
header.append(f'homogenization {self.get_homogenization()}')
|
|
||||||
return header
|
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_file(fname):
|
def from_file(fname):
|
||||||
"""
|
"""
|
||||||
|
@ -356,19 +345,12 @@ class Geom:
|
||||||
Valid extension is .vtr, it will be appended if not given.
|
Valid extension is .vtr, it will be appended if not given.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
g = VTK.from_file(fname if str(fname).endswith('.vtr') else str(fname)+'.vtr').geom
|
v = VTK.from_file(fname if str(fname).endswith('.vtr') else str(fname)+'.vtr')
|
||||||
grid = np.array(g.GetDimensions())-1
|
grid = np.array(v.geom.GetDimensions())-1
|
||||||
bbox = np.array(g.GetBounds()).reshape(3,2).T
|
bbox = np.array(v.geom.GetBounds()).reshape(3,2).T
|
||||||
size = bbox[1] - bbox[0]
|
size = bbox[1] - bbox[0]
|
||||||
|
|
||||||
celldata = g.GetCellData()
|
return Geom(v.get('materialpoint').reshape(grid,order='F'),size,bbox[0])
|
||||||
for a in range(celldata.GetNumberOfArrays()):
|
|
||||||
if celldata.GetArrayName(a) == 'materialpoint':
|
|
||||||
materialpoint = vtk_to_np(celldata.GetArray(a))
|
|
||||||
return Geom(materialpoint.reshape(grid,order='F'),size,bbox[0])
|
|
||||||
|
|
||||||
raise ValueError(f'"materialpoint" array not found in {fname}')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -417,7 +399,7 @@ class Geom:
|
||||||
else:
|
else:
|
||||||
microstructure = microstructure.reshape(grid)
|
microstructure = microstructure.reshape(grid)
|
||||||
|
|
||||||
creator = util.edit_info('damask.Result.'+inspect.stack()[0][3])
|
creator = util.edit_info('damask.Geom.'+inspect.stack()[0][3])
|
||||||
return Geom(microstructure+1,size,homogenization=1,comments=creator)
|
return Geom(microstructure+1,size,homogenization=1,comments=creator)
|
||||||
|
|
||||||
|
|
||||||
|
@ -442,7 +424,7 @@ class Geom:
|
||||||
KDTree = spatial.cKDTree(seeds,boxsize=size) if periodic else spatial.cKDTree(seeds)
|
KDTree = spatial.cKDTree(seeds,boxsize=size) if periodic else spatial.cKDTree(seeds)
|
||||||
devNull,microstructure = KDTree.query(coords)
|
devNull,microstructure = KDTree.query(coords)
|
||||||
|
|
||||||
creator = util.edit_info('damask.Result.'+inspect.stack()[0][3])
|
creator = util.edit_info('damask.Geom.'+inspect.stack()[0][3])
|
||||||
return Geom(microstructure.reshape(grid)+1,size,homogenization=1,comments=creator)
|
return Geom(microstructure.reshape(grid)+1,size,homogenization=1,comments=creator)
|
||||||
|
|
||||||
|
|
||||||
|
@ -458,8 +440,13 @@ class Geom:
|
||||||
Compress geometry with 'x of y' and 'a to b'.
|
Compress geometry with 'x of y' and 'a to b'.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
header = self.get_header()
|
header = [f'{len(self.comments)+4} header'] + self.comments
|
||||||
grid = self.get_grid()
|
header.append('grid a {} b {} c {}'.format(*self.get_grid()))
|
||||||
|
header.append('size x {} y {} z {}'.format(*self.get_size()))
|
||||||
|
header.append('origin x {} y {} z {}'.format(*self.get_origin()))
|
||||||
|
header.append(f'homogenization {self.get_homogenization()}')
|
||||||
|
|
||||||
|
grid = self.get_grid()
|
||||||
|
|
||||||
if pack is None:
|
if pack is None:
|
||||||
plain = grid.prod()/self.N_microstructure < 250
|
plain = grid.prod()/self.N_microstructure < 250
|
||||||
|
@ -490,7 +477,7 @@ class Geom:
|
||||||
reps += 1
|
reps += 1
|
||||||
else:
|
else:
|
||||||
if compressType is None:
|
if compressType is None:
|
||||||
f.write('\n'.join(self.get_header())+'\n')
|
f.write('\n'.join(header)+'\n')
|
||||||
elif compressType == '.':
|
elif compressType == '.':
|
||||||
f.write(f'{former}\n')
|
f.write(f'{former}\n')
|
||||||
elif compressType == 'to':
|
elif compressType == 'to':
|
||||||
|
@ -589,7 +576,7 @@ class Geom:
|
||||||
fill_ = np.full_like(self.microstructure,np.nanmax(self.microstructure)+1 if fill is None else fill)
|
fill_ = np.full_like(self.microstructure,np.nanmax(self.microstructure)+1 if fill is None else fill)
|
||||||
ms = np.ma.MaskedArray(fill_,np.logical_not(mask) if inverse else mask)
|
ms = np.ma.MaskedArray(fill_,np.logical_not(mask) if inverse else mask)
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Result.'+inspect.stack()[0][3]))
|
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
||||||
return self.update(ms)
|
return self.update(ms)
|
||||||
|
|
||||||
|
|
||||||
|
@ -620,7 +607,7 @@ class Geom:
|
||||||
if 'x' in directions:
|
if 'x' in directions:
|
||||||
ms = np.concatenate([ms,ms[limits[0]:limits[1]:-1,:,:]],0)
|
ms = np.concatenate([ms,ms[limits[0]:limits[1]:-1,:,:]],0)
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Result.'+inspect.stack()[0][3]))
|
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
||||||
return self.update(ms,rescale=True)
|
return self.update(ms,rescale=True)
|
||||||
|
|
||||||
|
|
||||||
|
@ -636,7 +623,7 @@ class Geom:
|
||||||
Assume geometry to be periodic. Defaults to True.
|
Assume geometry to be periodic. Defaults to True.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
self.add_comments(util.edit_info('damask.Result.'+inspect.stack()[0][3]))
|
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
||||||
return self.update(
|
return self.update(
|
||||||
ndimage.interpolation.zoom(
|
ndimage.interpolation.zoom(
|
||||||
self.microstructure,
|
self.microstructure,
|
||||||
|
@ -671,7 +658,7 @@ class Geom:
|
||||||
else:
|
else:
|
||||||
return me
|
return me
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Result.'+inspect.stack()[0][3]))
|
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
||||||
return self.update(ndimage.filters.generic_filter(
|
return self.update(ndimage.filters.generic_filter(
|
||||||
self.microstructure,
|
self.microstructure,
|
||||||
mostFrequent,
|
mostFrequent,
|
||||||
|
@ -688,7 +675,7 @@ class Geom:
|
||||||
for i, oldID in enumerate(np.unique(self.microstructure)):
|
for i, oldID in enumerate(np.unique(self.microstructure)):
|
||||||
renumbered = np.where(self.microstructure == oldID, i+1, renumbered)
|
renumbered = np.where(self.microstructure == oldID, i+1, renumbered)
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Result.'+inspect.stack()[0][3]))
|
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
||||||
return self.update(renumbered)
|
return self.update(renumbered)
|
||||||
|
|
||||||
|
|
||||||
|
@ -723,7 +710,7 @@ class Geom:
|
||||||
|
|
||||||
origin = self.origin-(np.asarray(microstructure_in.shape)-self.grid)*.5 * self.size/self.grid
|
origin = self.origin-(np.asarray(microstructure_in.shape)-self.grid)*.5 * self.size/self.grid
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Result.'+inspect.stack()[0][3]))
|
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
||||||
return self.update(microstructure_in,origin=origin,rescale=True)
|
return self.update(microstructure_in,origin=origin,rescale=True)
|
||||||
|
|
||||||
|
|
||||||
|
@ -756,7 +743,7 @@ class Geom:
|
||||||
|
|
||||||
canvas[ll[0]:ur[0],ll[1]:ur[1],ll[2]:ur[2]] = self.microstructure[LL[0]:UR[0],LL[1]:UR[1],LL[2]:UR[2]]
|
canvas[ll[0]:ur[0],ll[1]:ur[1],ll[2]:ur[2]] = self.microstructure[LL[0]:UR[0],LL[1]:UR[1],LL[2]:UR[2]]
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Result.'+inspect.stack()[0][3]))
|
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
||||||
return self.update(canvas,origin=self.origin+offset*self.size/self.grid,rescale=True)
|
return self.update(canvas,origin=self.origin+offset*self.size/self.grid,rescale=True)
|
||||||
|
|
||||||
|
|
||||||
|
@ -776,7 +763,7 @@ class Geom:
|
||||||
for from_ms,to_ms in zip(from_microstructure,to_microstructure):
|
for from_ms,to_ms in zip(from_microstructure,to_microstructure):
|
||||||
substituted[self.microstructure==from_ms] = to_ms
|
substituted[self.microstructure==from_ms] = to_ms
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Result.'+inspect.stack()[0][3]))
|
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
||||||
return self.update(substituted)
|
return self.update(substituted)
|
||||||
|
|
||||||
|
|
||||||
|
@ -822,5 +809,5 @@ class Geom:
|
||||||
extra_keywords={'trigger':trigger})
|
extra_keywords={'trigger':trigger})
|
||||||
microstructure = np.ma.MaskedArray(self.microstructure + offset_, np.logical_not(mask))
|
microstructure = np.ma.MaskedArray(self.microstructure + offset_, np.logical_not(mask))
|
||||||
|
|
||||||
self.add_comments(util.edit_info('damask.Result.'+inspect.stack()[0][3]))
|
self.add_comments(util.edit_info('damask.Geom.'+inspect.stack()[0][3]))
|
||||||
return self.update(microstructure)
|
return self.update(microstructure)
|
||||||
|
|
Loading…
Reference in New Issue