diff --git a/processing/post/addCurl.py b/processing/post/addCurl.py index 5db47ce04..25639dc7c 100755 --- a/processing/post/addCurl.py +++ b/processing/post/addCurl.py @@ -44,7 +44,7 @@ for name in filenames: damask.util.report(scriptName,name) table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name) - grid,size,origin = damask.grid_filters.cell_coord0_2_DNA(table.get(options.pos),True) + grid,size,origin = damask.grid_filters.cell_coord0_2_DNA(table.get(options.pos)) for label in options.labels: field = table.get(label) diff --git a/processing/post/addDisplacement.py b/processing/post/addDisplacement.py index 735e6d875..59630a6c6 100755 --- a/processing/post/addDisplacement.py +++ b/processing/post/addDisplacement.py @@ -50,7 +50,7 @@ for name in filenames: damask.util.report(scriptName,name) table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name) - grid,size,origin = damask.grid_filters.cell_coord0_2_DNA(table.get(options.pos),True) + grid,size,origin = damask.grid_filters.cell_coord0_2_DNA(table.get(options.pos)) F = table.get(options.f).reshape(np.append(grid[::-1],(3,3))) if options.nodal: diff --git a/processing/post/addDivergence.py b/processing/post/addDivergence.py index ea4b134a4..585ebb5a5 100755 --- a/processing/post/addDivergence.py +++ b/processing/post/addDivergence.py @@ -44,7 +44,7 @@ for name in filenames: damask.util.report(scriptName,name) table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name) - grid,size,origin = damask.grid_filters.cell_coord0_2_DNA(table.get(options.pos),True) + grid,size,origin = damask.grid_filters.cell_coord0_2_DNA(table.get(options.pos)) for label in options.labels: field = table.get(label) diff --git a/processing/post/addGradient.py b/processing/post/addGradient.py index 75109a3e0..54b80ed26 100755 --- a/processing/post/addGradient.py +++ b/processing/post/addGradient.py @@ -44,7 +44,7 @@ for name in filenames: damask.util.report(scriptName,name) table = damask.Table.from_ASCII(StringIO(''.join(sys.stdin.read())) if name is None else name) - grid,size,origin = damask.grid_filters.cell_coord0_2_DNA(table.get(options.pos),True) + grid,size,origin = damask.grid_filters.cell_coord0_2_DNA(table.get(options.pos)) for label in options.labels: field = table.get(label) diff --git a/python/damask/grid_filters.py b/python/damask/grid_filters.py index 96ae226dd..b064d9a2d 100644 --- a/python/damask/grid_filters.py +++ b/python/damask/grid_filters.py @@ -89,7 +89,18 @@ def cell_displacement_avg(size,F): F_avg = np.average(F,axis=(0,1,2)) return np.einsum('ml,ijkl->ijkm',F_avg-np.eye(3),cell_coord0(F.shape[:3],size)) -def cell_coord0_2_DNA(coord0,ordered=False): +def cell_coord0_2_DNA(coord0,ordered=True): + """ + Return grid 'DNA', i.e. grid, size, and origin from array of cell positions. + + Parameters + ---------- + coord0 : numpy.ndarray + array of undeformed cell coordinates + ordered : bool, optional + expect coord0 data to be ordered (x fast, z slow). + + """ coords = [np.unique(coord0[:,i]) for i in range(3)] mincorner = np.array(list(map(min,coords))) maxcorner = np.array(list(map(max,coords))) @@ -109,9 +120,9 @@ def cell_coord0_2_DNA(coord0,ordered=False): np.allclose(coords[2],np.linspace(start[2],end[2],grid[2])): raise ValueError('Regular grid spacing violated.') - if ordered: - if not np.allclose(coord0.reshape(tuple(grid[::-1])+(3,)),cell_coord0(grid,size,origin)): - raise ValueError('Input data is not a regular grid.') + if ordered and not np.allclose(coord0.reshape(tuple(grid[::-1])+(3,)),cell_coord0(grid,size,origin)): + raise ValueError('Input data is not a regular grid.') + return (grid,size,origin) @@ -151,6 +162,17 @@ def node_2_cell(node_data): return c[:-1,:-1,:-1] def node_coord0_2_DNA(coord0,ordered=False): + """ + Return grid 'DNA', i.e. grid, size, and origin from array of nodal positions. + + Parameters + ---------- + coord0 : numpy.ndarray + array of undeformed nodal coordinates + ordered : bool, optional + expect coord0 data to be ordered (x fast, z slow). + + """ coords = [np.unique(coord0[:,i]) for i in range(3)] mincorner = np.array(list(map(min,coords))) maxcorner = np.array(list(map(max,coords))) @@ -166,9 +188,9 @@ def node_coord0_2_DNA(coord0,ordered=False): np.allclose(coords[2],np.linspace(mincorner[2],maxcorner[2],grid[2]+1)): raise ValueError('Regular grid spacing violated.') - if ordered: - if not np.allclose(coord0.reshape(tuple((grid+1)[::-1])+(3,)),node_coord0(grid,size,origin)): - raise ValueError('Input data is not a regular grid.') + if ordered and not np.allclose(coord0.reshape(tuple((grid+1)[::-1])+(3,)),node_coord0(grid,size,origin)): + raise ValueError('Input data is not a regular grid.') + return (grid,size,origin)