Merge branch 'PythonImprovements' into pytest
This commit is contained in:
commit
969fa9bbc7
|
@ -65,7 +65,7 @@ for filename in options.filenames:
|
|||
x = results.get_dataset_location(label)
|
||||
if len(x) == 0:
|
||||
continue
|
||||
array = results.read_dataset(x,0)
|
||||
array = results.read_dataset(x,0,plain=True)
|
||||
d = int(np.product(np.shape(array)[1:]))
|
||||
data = np.concatenate((data,np.reshape(array,[np.product(results.grid),d])),1)
|
||||
|
||||
|
@ -80,7 +80,7 @@ for filename in options.filenames:
|
|||
x = results.get_dataset_location(label)
|
||||
if len(x) == 0:
|
||||
continue
|
||||
array = results.read_dataset(x,0)
|
||||
array = results.read_dataset(x,0,plain=True)
|
||||
d = int(np.product(np.shape(array)[1:]))
|
||||
data = np.concatenate((data,np.reshape(array,[np.product(results.grid),d])),1)
|
||||
|
||||
|
|
|
@ -132,7 +132,4 @@ for name in filenames:
|
|||
damask.util.croak(geom.update(np.where(mask,geom.microstructure,fill)))
|
||||
geom.add_comments(scriptID + ' ' + ' '.join(sys.argv[1:]))
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(name)
|
||||
geom.to_file(sys.stdout if name is None else name,pack=False)
|
||||
|
|
|
@ -61,7 +61,7 @@ for name in filenames:
|
|||
canvas = np.full(new,options.fill if options.fill is not None
|
||||
else np.nanmax(geom.microstructure)+1,geom.microstructure.dtype)
|
||||
|
||||
l = np.clip( offset, 0,np.minimum(old +offset,new))
|
||||
l = np.clip( offset, 0,np.minimum(old +offset,new)) # noqa
|
||||
r = np.clip( offset+old,0,np.minimum(old*2+offset,new))
|
||||
L = np.clip(-offset, 0,np.minimum(new -offset,old))
|
||||
R = np.clip(-offset+new,0,np.minimum(new*2-offset,old))
|
||||
|
@ -71,7 +71,4 @@ for name in filenames:
|
|||
damask.util.croak(geom.update(canvas,origin=origin+offset*size/old,rescale=True))
|
||||
geom.add_comments(scriptID + ' ' + ' '.join(sys.argv[1:]))
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(name)
|
||||
geom.to_file(sys.stdout if name is None else name,pack=False)
|
||||
|
|
|
@ -5,9 +5,6 @@ import sys
|
|||
from io import StringIO
|
||||
from optparse import OptionParser
|
||||
|
||||
from scipy import ndimage
|
||||
import numpy as np
|
||||
|
||||
import damask
|
||||
|
||||
|
||||
|
@ -40,12 +37,6 @@ for name in filenames:
|
|||
damask.util.report(scriptName,name)
|
||||
|
||||
geom = damask.Geom.from_file(StringIO(''.join(sys.stdin.read())) if name is None else name)
|
||||
|
||||
damask.util.croak(geom.clean(options.stencil))
|
||||
|
||||
geom.add_comments(scriptID + ' ' + ' '.join(sys.argv[1:]))
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(name)
|
||||
geom.to_file(sys.stdout if name is None else name,pack=False)
|
||||
|
|
|
@ -86,7 +86,7 @@ for name in filenames:
|
|||
* inFile[os.path.join(group_geom,'SPACING')][...]
|
||||
grid = inFile[os.path.join(group_geom,'DIMENSIONS')][...]
|
||||
origin = inFile[os.path.join(group_geom,'ORIGIN')][...]
|
||||
except:
|
||||
except KeyError:
|
||||
errors.append('Geometry data ({}) not found'.format(group_geom))
|
||||
|
||||
|
||||
|
@ -98,13 +98,13 @@ for name in filenames:
|
|||
try:
|
||||
quats = np.reshape(inFile[dataset][...],(np.product(grid),4))
|
||||
rot = [damask.Rotation.fromQuaternion(q,True,P=+1) for q in quats]
|
||||
except:
|
||||
except KeyError:
|
||||
errors.append('Pointwise orientation (quaternion) data ({}) not readable'.format(dataset))
|
||||
|
||||
dataset = os.path.join(group_pointwise,options.phase)
|
||||
try:
|
||||
phase = np.reshape(inFile[dataset][...],(np.product(grid)))
|
||||
except:
|
||||
except KeyError:
|
||||
errors.append('Pointwise phase data ({}) not readable'.format(dataset))
|
||||
|
||||
microstructure = np.arange(1,np.product(grid)+1,dtype=int).reshape(grid,order='F')
|
||||
|
@ -116,7 +116,7 @@ for name in filenames:
|
|||
dataset = os.path.join(group_pointwise,options.microstructure)
|
||||
try:
|
||||
microstructure = np.transpose(inFile[dataset][...].reshape(grid[::-1]),(2,1,0)) # convert from C ordering
|
||||
except:
|
||||
except KeyError:
|
||||
errors.append('Link between pointwise and grain average data ({}) not readable'.format(dataset))
|
||||
|
||||
group_average = os.path.join(rootDir,options.basegroup,options.average)
|
||||
|
@ -124,13 +124,13 @@ for name in filenames:
|
|||
dataset = os.path.join(group_average,options.quaternion)
|
||||
try:
|
||||
rot = [damask.Rotation.fromQuaternion(q,True,P=+1) for q in inFile[dataset][...][1:]] # skip first entry (unindexed)
|
||||
except:
|
||||
except KeyError:
|
||||
errors.append('Average orientation data ({}) not readable'.format(dataset))
|
||||
|
||||
dataset = os.path.join(group_average,options.phase)
|
||||
try:
|
||||
phase = [i[0] for i in inFile[dataset][...]][1:] # skip first entry (unindexed)
|
||||
except:
|
||||
except KeyError:
|
||||
errors.append('Average phase data ({}) not readable'.format(dataset))
|
||||
|
||||
if errors != []:
|
||||
|
@ -155,4 +155,4 @@ for name in filenames:
|
|||
homogenization=options.homogenization,comments=header)
|
||||
damask.util.croak(geom)
|
||||
|
||||
geom.to_file(os.path.splitext(name)[0]+'.geom')
|
||||
geom.to_file(os.path.splitext(name)[0]+'.geom',pack=False)
|
||||
|
|
|
@ -89,7 +89,4 @@ geom=damask.Geom(microstructure,options.size,
|
|||
comments=[scriptID + ' ' + ' '.join(sys.argv[1:])])
|
||||
damask.util.croak(geom)
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(name)
|
||||
geom.to_file(sys.stdout if name is None else name,pack=False)
|
||||
|
|
|
@ -145,7 +145,4 @@ geom = damask.Geom(microstructure.reshape(grid),
|
|||
homogenization=options.homogenization,comments=header)
|
||||
damask.util.croak(geom)
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(name)
|
||||
geom.to_file(sys.stdout if name is None else name,pack=False)
|
||||
|
|
|
@ -63,7 +63,4 @@ geom = damask.Geom(microstructure=np.full(options.grid,options.fill,dtype=dtype)
|
|||
comments=scriptID + ' ' + ' '.join(sys.argv[1:]))
|
||||
damask.util.croak(geom)
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(name)
|
||||
geom.to_file(sys.stdout if name is None else name,pack=False)
|
||||
|
|
|
@ -152,7 +152,4 @@ for name in filenames:
|
|||
homogenization=options.homogenization,comments=header)
|
||||
damask.util.croak(geom)
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(os.path.splitext(name)[0]+'.geom')
|
||||
geom.to_file(sys.stdout if name is None else os.path.splitext(name)[0]+'.geom',pack=False)
|
||||
|
|
|
@ -302,7 +302,4 @@ for name in filenames:
|
|||
homogenization=options.homogenization,comments=header)
|
||||
damask.util.croak(geom)
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(os.path.splitext(name)[0]+'.geom')
|
||||
geom.to_file(sys.stdout if name is None else os.path.splitext(name)[0]+'.geom',pack=False)
|
||||
|
|
|
@ -172,7 +172,4 @@ for name in filenames:
|
|||
damask.util.croak(geom.update(microstructure[0:grid_original[0],0:grid_original[1],0:grid_original[2]]))
|
||||
geom.add_comments(scriptID + ' ' + ' '.join(sys.argv[1:]))
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(name)
|
||||
geom.to_file(sys.stdout if name is None else name,pack=False)
|
||||
|
|
|
@ -5,8 +5,6 @@ import sys
|
|||
from io import StringIO
|
||||
from optparse import OptionParser
|
||||
|
||||
import numpy as np
|
||||
|
||||
import damask
|
||||
|
||||
|
||||
|
@ -44,11 +42,6 @@ for name in filenames:
|
|||
damask.util.report(scriptName,name)
|
||||
|
||||
geom = damask.Geom.from_file(StringIO(''.join(sys.stdin.read())) if name is None else name)
|
||||
|
||||
damask.util.croak(geom.mirror(options.directions,options.reflect))
|
||||
geom.add_comments(scriptID + ' ' + ' '.join(sys.argv[1:]))
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(name)
|
||||
geom.to_file(sys.stdout if name is None else name,pack=False)
|
||||
|
|
|
@ -34,41 +34,4 @@ for name in filenames:
|
|||
damask.util.croak(geom)
|
||||
geom.add_comments(scriptID + ' ' + ' '.join(sys.argv[1:]))
|
||||
|
||||
compressType = None
|
||||
former = start = -1
|
||||
reps = 0
|
||||
|
||||
if name is None:
|
||||
f = sys.stdout
|
||||
else:
|
||||
f= open(name,'w')
|
||||
|
||||
for current in geom.microstructure.flatten('F'):
|
||||
if abs(current - former) == 1 and (start - current) == reps*(former - current):
|
||||
compressType = 'to'
|
||||
reps += 1
|
||||
elif current == former and start == former:
|
||||
compressType = 'of'
|
||||
reps += 1
|
||||
else:
|
||||
if compressType is None:
|
||||
f.write('\n'.join(geom.get_header())+'\n')
|
||||
elif compressType == '.':
|
||||
f.write('{}\n'.format(former))
|
||||
elif compressType == 'to':
|
||||
f.write('{} to {}\n'.format(start,former))
|
||||
elif compressType == 'of':
|
||||
f.write('{} of {}\n'.format(reps,former))
|
||||
|
||||
compressType = '.'
|
||||
start = current
|
||||
reps = 1
|
||||
|
||||
former = current
|
||||
|
||||
if compressType == '.':
|
||||
f.write('{}\n'.format(former))
|
||||
elif compressType == 'to':
|
||||
f.write('{} to {}\n'.format(start,former))
|
||||
elif compressType == 'of':
|
||||
f.write('{} of {}\n'.format(reps,former))
|
||||
geom.to_file(sys.stdout if name is None else name,pack=True)
|
||||
|
|
|
@ -5,8 +5,6 @@ import sys
|
|||
from io import StringIO
|
||||
from optparse import OptionParser
|
||||
|
||||
import numpy as np
|
||||
|
||||
import damask
|
||||
|
||||
|
||||
|
@ -32,15 +30,6 @@ for name in filenames:
|
|||
damask.util.report(scriptName,name)
|
||||
|
||||
geom = damask.Geom.from_file(StringIO(''.join(sys.stdin.read())) if name is None else name)
|
||||
|
||||
renumbered = np.empty(geom.get_grid(),dtype=geom.microstructure.dtype)
|
||||
for i, oldID in enumerate(np.unique(geom.microstructure)):
|
||||
renumbered = np.where(geom.microstructure == oldID, i+1, renumbered)
|
||||
|
||||
damask.util.croak(geom.update(renumbered))
|
||||
damask.util.croak(geom.renumber)
|
||||
geom.add_comments(scriptID + ' ' + ' '.join(sys.argv[1:]))
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(name)
|
||||
geom.to_file(sys.stdout if name is None else name,pack=False)
|
||||
|
|
|
@ -2,11 +2,10 @@
|
|||
|
||||
import os
|
||||
import sys
|
||||
import numpy as np
|
||||
|
||||
from io import StringIO
|
||||
from optparse import OptionParser
|
||||
from scipy import ndimage
|
||||
|
||||
import numpy as np
|
||||
|
||||
import damask
|
||||
|
||||
|
@ -55,20 +54,7 @@ for name in filenames:
|
|||
np.array([o*float(n.lower().replace('x','')) if n.lower().endswith('x') \
|
||||
else float(n) for o,n in zip(size,options.size)],dtype=float)
|
||||
|
||||
damask.util.croak(geom.update(microstructure =
|
||||
ndimage.interpolation.zoom(
|
||||
geom.microstructure,
|
||||
new_grid/grid,
|
||||
output=geom.microstructure.dtype,
|
||||
order=0,
|
||||
mode='nearest',
|
||||
prefilter=False,
|
||||
) if np.any(new_grid != grid) \
|
||||
else None,
|
||||
size = new_size))
|
||||
geom.scale(new_grid)
|
||||
damask.util.croak(geom.update(microstructure = None,size = new_size))
|
||||
geom.add_comments(scriptID + ' ' + ' '.join(sys.argv[1:]))
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(name)
|
||||
geom.to_file(sys.stdout if name is None else name,pack=False)
|
||||
|
|
|
@ -95,7 +95,4 @@ for name in filenames:
|
|||
damask.util.croak(geom.update(microstructure,origin=origin-(np.asarray(microstructure.shape)-grid)/2*size/grid,rescale=True))
|
||||
geom.add_comments(scriptID + ' ' + ' '.join(sys.argv[1:]))
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(name)
|
||||
geom.to_file(sys.stdout if name is None else name,pack=False)
|
||||
|
|
|
@ -58,7 +58,4 @@ for name in filenames:
|
|||
damask.util.croak(geom.update(substituted,origin=geom.get_origin()+options.origin))
|
||||
geom.add_comments(scriptID + ' ' + ' '.join(sys.argv[1:]))
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(name)
|
||||
geom.to_file(sys.stdout if name is None else name,pack=False)
|
||||
|
|
|
@ -34,7 +34,4 @@ for name in filenames:
|
|||
damask.util.croak(geom)
|
||||
geom.add_comments(scriptID + ' ' + ' '.join(sys.argv[1:]))
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(name)
|
||||
geom.to_file(sys.stdout if name is None else name,pack=False)
|
||||
|
|
|
@ -82,7 +82,4 @@ for name in filenames:
|
|||
geom.microstructure + offset,geom.microstructure)))
|
||||
geom.add_comments(scriptID + ' ' + ' '.join(sys.argv[1:]))
|
||||
|
||||
if name is None:
|
||||
sys.stdout.write(str(geom.show()))
|
||||
else:
|
||||
geom.to_file(name)
|
||||
geom.to_file(sys.stdout if name is None else name,pack=False)
|
||||
|
|
|
@ -369,7 +369,7 @@ class DADF5():
|
|||
return f[self.get_dataset_location('orientation')[0]].attrs['Lattice'].astype('str') # np.bytes_ to string
|
||||
|
||||
|
||||
def read_dataset(self,path,c):
|
||||
def read_dataset(self,path,c=0,plain=False):
|
||||
"""
|
||||
Dataset for all points/cells.
|
||||
|
||||
|
@ -402,6 +402,9 @@ class DADF5():
|
|||
a=a.reshape([a.shape[0],1])
|
||||
dataset[p,:] = a[u,:]
|
||||
|
||||
if plain and dataset.dtype.names is not None:
|
||||
return dataset.view(('float64',len(dataset.dtype.names)))
|
||||
else:
|
||||
return dataset
|
||||
|
||||
|
||||
|
|
|
@ -299,7 +299,7 @@ class Geom():
|
|||
return cls(microstructure.reshape(grid),size,origin,homogenization,comments)
|
||||
|
||||
|
||||
def to_file(self,fname):
|
||||
def to_file(self,fname,pack=None):
|
||||
"""
|
||||
Writes a geom file.
|
||||
|
||||
|
@ -307,15 +307,63 @@ class Geom():
|
|||
----------
|
||||
fname : str or file handle
|
||||
geometry file to write.
|
||||
pack : bool, optional
|
||||
compress geometry with 'x of y' and 'a to b'.
|
||||
|
||||
"""
|
||||
header = self.get_header()
|
||||
grid = self.get_grid()
|
||||
format_string = '%{}i'.format(1+int(np.floor(np.log10(np.nanmax(self.microstructure))))) if self.microstructure.dtype == int \
|
||||
else '%g'
|
||||
|
||||
if pack is None:
|
||||
plain = grid.prod()/np.unique(self.microstructure).size < 250
|
||||
else:
|
||||
plain = not pack
|
||||
|
||||
if plain:
|
||||
format_string = '%g' if self.microstructure in np.sctypes['float'] else \
|
||||
'%{}i'.format(1+int(np.floor(np.log10(np.nanmax(self.microstructure)))))
|
||||
np.savetxt(fname,
|
||||
self.microstructure.reshape([grid[0],np.prod(grid[1:])],order='F').T,
|
||||
header='\n'.join(header), fmt=format_string, comments='')
|
||||
else:
|
||||
if isinstance(fname,str):
|
||||
f = open(fname,'w')
|
||||
else:
|
||||
f = fname
|
||||
|
||||
compressType = None
|
||||
former = start = -1
|
||||
reps = 0
|
||||
for current in self.microstructure.flatten('F'):
|
||||
if abs(current - former) == 1 and (start - current) == reps*(former - current):
|
||||
compressType = 'to'
|
||||
reps += 1
|
||||
elif current == former and start == former:
|
||||
compressType = 'of'
|
||||
reps += 1
|
||||
else:
|
||||
if compressType is None:
|
||||
f.write('\n'.join(self.get_header())+'\n')
|
||||
elif compressType == '.':
|
||||
f.write('{}\n'.format(former))
|
||||
elif compressType == 'to':
|
||||
f.write('{} to {}\n'.format(start,former))
|
||||
elif compressType == 'of':
|
||||
f.write('{} of {}\n'.format(reps,former))
|
||||
|
||||
compressType = '.'
|
||||
start = current
|
||||
reps = 1
|
||||
|
||||
former = current
|
||||
|
||||
if compressType == '.':
|
||||
f.write('{}\n'.format(former))
|
||||
elif compressType == 'to':
|
||||
f.write('{} to {}\n'.format(start,former))
|
||||
elif compressType == 'of':
|
||||
f.write('{} of {}\n'.format(reps,former))
|
||||
|
||||
|
||||
def to_vtk(self,fname=None):
|
||||
"""
|
||||
|
@ -390,12 +438,14 @@ class Geom():
|
|||
def mirror(self,directions,reflect=False):
|
||||
"""
|
||||
Mirror microstructure along given directions.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
directions : iterable containing str
|
||||
direction(s) along which the microstructure is mirrored. Valid entries are 'x', 'y', 'z'.
|
||||
reflect : bool, optional
|
||||
reflect (include) outermost layers.
|
||||
|
||||
"""
|
||||
valid = {'x','y','z'}
|
||||
if not all(isinstance(d, str) for d in directions):
|
||||
|
@ -417,19 +467,57 @@ class Geom():
|
|||
#self.add_comments('tbd')
|
||||
|
||||
|
||||
def scale(self,grid):
|
||||
"""
|
||||
Scale microstructure to new grid.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
grid : iterable of int
|
||||
new grid dimension
|
||||
|
||||
"""
|
||||
return self.update(
|
||||
ndimage.interpolation.zoom(
|
||||
self.microstructure,
|
||||
grid/self.get_grid(),
|
||||
output=self.microstructure.dtype,
|
||||
order=0,
|
||||
mode='nearest',
|
||||
prefilter=False
|
||||
)
|
||||
)
|
||||
#self.add_comments('tbd')
|
||||
|
||||
|
||||
def clean(self,stencil=3):
|
||||
"""
|
||||
Smooth microstructure by selecting most frequent index within given stencil at each location.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
stencil : int, optional
|
||||
size of smoothing stencil.
|
||||
|
||||
"""
|
||||
def mostFrequent(arr):
|
||||
unique, inverse = np.unique(arr, return_inverse=True)
|
||||
return unique[np.argmax(np.bincount(inverse))]
|
||||
|
||||
return self.update(ndimage.filters.generic_filter(self.microstructure,
|
||||
return self.update(ndimage.filters.generic_filter(
|
||||
self.microstructure,
|
||||
mostFrequent,
|
||||
size=(stencil,)*3).astype(self.microstructure.dtype))
|
||||
size=(stencil,)*3
|
||||
).astype(self.microstructure.dtype)
|
||||
)
|
||||
#self.add_comments('tbd')
|
||||
|
||||
|
||||
def renumber(self):
|
||||
"""Renumber sorted microstructure indices to 1,...,N."""
|
||||
renumbered = np.empty(self.get_grid(),dtype=self.microstructure.dtype)
|
||||
for i, oldID in enumerate(np.unique(self.microstructure)):
|
||||
renumbered = np.where(self.microstructure == oldID, i+1, renumbered)
|
||||
|
||||
return self.update(renumbered)
|
||||
#self.add_comments('tbd')
|
||||
|
|
Loading…
Reference in New Issue