microstructure -> materialpoint

at least for new functionality
This commit is contained in:
Martin Diehl 2020-08-23 09:17:08 +02:00
parent 5fb2d30ee4
commit 975db01f31
2 changed files with 36 additions and 23 deletions

View File

@ -49,8 +49,8 @@ class Geom:
f'grid a b c: {util.srepr(self.get_grid ()," x ")}', f'grid a b c: {util.srepr(self.get_grid ()," x ")}',
f'size x y z: {util.srepr(self.get_size ()," x ")}', f'size x y z: {util.srepr(self.get_size ()," x ")}',
f'origin x y z: {util.srepr(self.get_origin()," ")}', f'origin x y z: {util.srepr(self.get_origin()," ")}',
f'# microstructures: {self.N_microstructure}', f'# materialpoints: {self.N_microstructure}',
f'max microstructure: {np.nanmax(self.microstructure)}', f'max materialpoint: {np.nanmax(self.microstructure)}',
]) ])
@ -364,10 +364,12 @@ class Geom:
celldata = g.GetCellData() celldata = g.GetCellData()
for a in range(celldata.GetNumberOfArrays()): for a in range(celldata.GetNumberOfArrays()):
if celldata.GetArrayName(a) == 'microstructure': if celldata.GetArrayName(a) == 'materialpoint':
microstructure = vtk_to_np(celldata.GetArray(a)) 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}')
return Geom(microstructure.reshape(grid,order='F'),size,bbox[0])
@staticmethod @staticmethod
@ -522,7 +524,7 @@ class Geom:
""" """
v = VTK.from_rectilinearGrid(self.grid,self.size,self.origin) v = VTK.from_rectilinearGrid(self.grid,self.size,self.origin)
v.add(self.microstructure.flatten(order='F'),'microstructure') v.add(self.microstructure.flatten(order='F'),'materialpoint')
if fname: if fname:
v.write(fname) v.write(fname)
@ -747,7 +749,7 @@ class Geom:
np.nanmax(self.microstructure)+1 if fill is None else fill, np.nanmax(self.microstructure)+1 if fill is None else fill,
dtype) dtype)
LL = np.clip( offset, 0,np.minimum(self.grid, grid+offset)) # noqa LL = np.clip( offset, 0,np.minimum(self.grid, grid+offset))
UR = np.clip( offset+grid, 0,np.minimum(self.grid, grid+offset)) UR = np.clip( offset+grid, 0,np.minimum(self.grid, grid+offset))
ll = np.clip(-offset, 0,np.minimum( grid,self.grid-offset)) ll = np.clip(-offset, 0,np.minimum( grid,self.grid-offset))
ur = np.clip(-offset+self.grid,0,np.minimum( grid,self.grid-offset)) ur = np.clip(-offset+self.grid,0,np.minimum( grid,self.grid-offset))

View File

@ -4,6 +4,7 @@ import time
import pytest import pytest
import numpy as np import numpy as np
from damask import VTK
from damask import Geom from damask import Geom
from damask import Rotation from damask import Rotation
from damask import util from damask import util
@ -50,37 +51,47 @@ class TestGeom:
def test_write_read_str(self,default,tmpdir): def test_write_read_str(self,default,tmpdir):
default.to_file(str(tmpdir.join('default.geom'))) default.to_file(str(tmpdir/'default.geom'))
new = Geom.from_file(str(tmpdir.join('default.geom'))) new = Geom.from_file(str(tmpdir/'default.geom'))
assert geom_equal(new,default) assert geom_equal(new,default)
def test_write_read_file(self,default,tmpdir): def test_write_read_file(self,default,tmpdir):
with open(tmpdir.join('default.geom'),'w') as f: with open(tmpdir/'default.geom','w') as f:
default.to_file(f) default.to_file(f)
with open(tmpdir.join('default.geom')) as f: with open(tmpdir/'default.geom') as f:
new = Geom.from_file(f) new = Geom.from_file(f)
assert geom_equal(new,default) assert geom_equal(new,default)
def test_write_show(self,default,tmpdir): def test_write_show(self,default,tmpdir):
with open(tmpdir.join('str.geom'),'w') as f: with open(tmpdir/'str.geom','w') as f:
f.write(default.show()) f.write(default.show())
with open(tmpdir.join('str.geom')) as f: with open(tmpdir/'str.geom') as f:
new = Geom.from_file(f) new = Geom.from_file(f)
assert geom_equal(new,default) assert geom_equal(new,default)
def test_read_write_vtk(self,default,tmpdir): def test_read_write_vtk(self,default,tmpdir):
default.to_vtk(str(tmpdir.join('default'))) default.to_vtk(tmpdir/'default')
for _ in range(3): for _ in range(10):
if os.path.exists(tmpdir.join('default.vtr')): break time.sleep(.2)
time.sleep(1) if os.path.exists(tmpdir/'default.vtr'): break
new = Geom.from_vtk(str(tmpdir.join('default.vtr')))
new = Geom.from_vtk(tmpdir/'default.vtr')
assert geom_equal(new,default) assert geom_equal(new,default)
def test_invalid_vtk(self,tmpdir):
v = VTK.from_rectilinearGrid(np.random.randint(5,10,3)*2,np.random.random(3) + 1.0)
v.write(tmpdir/'no_materialpoint.vtr')
for _ in range(10):
time.sleep(.2)
if os.path.exists(tmpdir/'no_materialpoint.vtr'): break
with pytest.raises(ValueError):
Geom.from_vtk(tmpdir/'no_materialpoint.vtr')
@pytest.mark.parametrize('pack',[True,False]) @pytest.mark.parametrize('pack',[True,False])
def test_pack(self,default,tmpdir,pack): def test_pack(self,default,tmpdir,pack):
default.to_file(tmpdir.join('default.geom'),pack=pack) default.to_file(tmpdir/'default.geom',pack=pack)
new = Geom.from_file(tmpdir.join('default.geom')) new = Geom.from_file(tmpdir/'default.geom')
assert geom_equal(new,default) assert geom_equal(new,default)
def test_invalid_combination(self,default): def test_invalid_combination(self,default):