handling of increments follows handling of other 'visible'-items

This commit is contained in:
Martin Diehl 2019-09-15 17:08:03 -07:00
parent f6ac8c995f
commit 4cedcee0b4
3 changed files with 35 additions and 63 deletions

View File

@ -47,22 +47,20 @@ for filename in options.filenames:
coords = np.concatenate((z[:,:,:,None],y[:,:,:,None],x[:,:,:,None]),axis = 3)
for i,inc in enumerate(results.increments):
for i,inc in enumerate(results.iter_visible('increments')):
print('Output step {}/{}'.format(i+1,len(results.increments)))
header = '1 header\n'
data = np.array([inc['inc'] for j in range(np.product(results.grid))]).reshape([np.product(results.grid),1])
data = np.array([int(inc[3:]) for j in range(np.product(results.grid))]).reshape([np.product(results.grid),1])
header+= 'inc'
coords = coords.reshape([np.product(results.grid),3])
data = np.concatenate((data,coords),1)
header+=' 1_pos 2_pos 3_pos'
results.visible['increments'] = [inc]
for label in options.con:
for o in results.iter_visible('con_physics'):
for p in results.iter_visible('con_physics'):
for c in results.iter_visible('constituents'):
x = results.get_dataset_location(label)
if len(x) == 0:
@ -77,7 +75,7 @@ for filename in options.filenames:
header+=' '+label
for label in options.mat:
for o in results.iter_visible('mat_physics'):
for p in results.iter_visible('mat_physics'):
for m in results.iter_visible('materialpoints'):
x = results.get_dataset_location(label)
if len(x) == 0:
@ -96,5 +94,5 @@ for filename in options.filenames:
os.mkdir(dirname)
except FileExistsError:
pass
file_out = '{}_inc{:04d}.txt'.format(filename.split('.')[0],inc['inc'])
file_out = '{}_{}.txt'.format(filename.split('.')[0],inc)
np.savetxt(os.path.join(dirname,file_out),data,header=header,comments='')

View File

@ -57,17 +57,16 @@ for filename in options.filenames:
rGrid.SetZCoordinates(coordArray[2])
for i,inc in enumerate(results.increments):
for i,inc in enumerate(results.iter_visible('increments')):
print('Output step {}/{}'.format(i+1,len(results.increments)))
vtk_data = []
results.visible['increments'] = [inc]
results.set_visible('materialpoints',False)
results.set_visible('constituents', True)
for label in options.con:
for o in results.iter_visible('con_physics'):
if o != 'generic':
for p in results.iter_visible('con_physics'):
if p != 'generic':
for c in results.iter_visible('constituents'):
x = results.get_dataset_location(label)
if len(x) == 0:
@ -90,8 +89,8 @@ for filename in options.filenames:
results.set_visible('constituents', False)
results.set_visible('materialpoints',True)
for label in options.mat:
for o in results.iter_visible('mat_physics'):
if o != 'generic':
for p in results.iter_visible('mat_physics'):
if p != 'generic':
for m in results.iter_visible('materialpoints'):
x = results.get_dataset_location(label)
if len(x) == 0:
@ -120,7 +119,7 @@ for filename in options.filenames:
os.mkdir(dirname)
except FileExistsError:
pass
file_out = '{}_inc{:04d}.{}'.format(filename.split('.')[0],inc['inc'],writer.GetDefaultFileExtension())
file_out = '{}_{}.{}'.format(filename.split('.')[0],inc,writer.GetDefaultFileExtension())
writer.SetCompressorTypeToZLib()
writer.SetDataModeToBinary()

View File

@ -38,11 +38,7 @@ class DADF5():
self.size = f['geometry'].attrs['size']
r=re.compile('inc[0-9]+')
self.time_information = [{'inc': int(u[3:]),
'time': round(f[u].attrs['time/s'],12),
} for u in f.keys() if r.match(u)]
self.increments = self.time_information.copy() # unify later
self.increments = [u for u in f.keys() if r.match(u)]
self.Nmaterialpoints, self.Nconstituents = np.shape(f['mapping/cellResults/constituent'])
self.materialpoints = [m.decode() for m in np.unique(f['mapping/cellResults/materialpoint']['Name'])]
@ -51,20 +47,20 @@ class DADF5():
self.con_physics = []
for c in self.constituents:
self.con_physics += f['inc{:05}/constituent/{}'.format(self.increments[0]['inc'],c)].keys()
self.con_physics += f['inc00000/constituent/{}'.format(c)].keys()
self.con_physics = list(set(self.con_physics)) # make unique
self.mat_physics = []
for m in self.materialpoints:
self.mat_physics += f['inc{:05}/materialpoint/{}'.format(self.increments[0]['inc'],m)].keys()
self.mat_physics += f['inc00000/materialpoint/{}'.format(m)].keys()
self.mat_physics = list(set(self.mat_physics)) # make unique
self.visible= {'increments': self.increments, # ToDo:simplify, activity only positions that translate into (no complex types)
'constituents': self.constituents,
'materialpoints': self.materialpoints,
'constituent': range(self.Nconstituents), # ToDo: stupid naming
'con_physics': self.con_physics,
'mat_physics': self.mat_physics}
'con_physics': self.con_physics,
'mat_physics': self.mat_physics}
self.filename = filename
@ -100,24 +96,6 @@ class DADF5():
last_datasets = self.visible[what]
yield dataset
self.__manage_visible(datasets,what,'set')
# ToDo: store increments, select icrements (trivial), position, and time
def increment_set_by_time(self,start,end):
for t in self.time_information:
if start<= t['time']< end:
print(t)
def increment_set_by_position(self,start,end):
for t in self.time_information[start:end]:
print(t)
def increment_set(self,start,end):
for t in self.time_information:
if start<= t['inc']< end:
print(t)
def set_visible(self,what,datasets):
@ -163,19 +141,18 @@ class DADF5():
groups = []
with h5py.File(self.filename,'r') as f:
for i in self.visible['increments']:
group_inc = 'inc{:05}'.format(i['inc']) #ToDo: Merge path only once at the end '/'.join(listE)
for i in self.iter_visible('increments'): #ToDo: Merge path only once at the end '/'.join(listE)
for c in self.iter_visible('constituents'):
for t in self.iter_visible('con_physics'):
group = '/'.join([group_inc,'constituent',c,t])
for p in self.iter_visible('con_physics'):
group = '/'.join([i,'constituent',c,p])
if sets is True:
groups.append(group)
else:
match = [e for e_ in [glob.fnmatch.filter(f[group].keys(),s) for s in sets] for e in e_]
if len(set(match)) == len(sets) : groups.append(group)
for m in self.iter_visible('materialpoints'):
for t in self.iter_visible('mat_physics'):
group = '/'.join([group_inc,'materialpoint',m,t])
for p in self.iter_visible('mat_physics'):
group = '/'.join([i,'materialpoint',m,p])
if sets is True:
groups.append(group)
else:
@ -187,23 +164,23 @@ class DADF5():
def list_data(self): # print_datasets and have [] and ['*'], loop over all increment, soll auf anderen basieren (get groups with sternchen)
"""Shows information on all active datasets in the file."""
with h5py.File(self.filename,'r') as f:
group_inc = 'inc{:05}'.format(self.visible['increments'][0]['inc']) #ToDo: Merge path only once at the end '/'.join(listE)
i = 'inc{:05}'.format(0) #ToDo: Merge path only once at the end '/'.join(listE)
for c in self.iter_visible('constituents'):
print('\n'+c)
group_constituent = group_inc+'/constituent/'+c
for t in self.iter_visible('con_physics'):
group_constituent = i+'/constituent/'+c
for p in self.iter_visible('con_physics'):
print(' {}'.format(t))
group_output_types = group_constituent+'/'+t
group_output_types = group_constituent+'/'+p
try:
for x in f[group_output_types].keys():
print(' {} ({})'.format(x,f[group_output_types+'/'+x].attrs['Description'].decode()))
except KeyError:
pass
for m in self.iter_visible('materialpoints'):
group_materialpoint = group_inc+'/materialpoint/'+m
for t in self.iter_visible('mat_physics'):
group_materialpoint = i+'/materialpoint/'+m
for p in self.iter_visible('mat_physics'):
print(' {}'.format(t))
group_output_types = group_materialpoint+'/'+t
group_output_types = group_materialpoint+'/'+p
try:
for x in f[group_output_types].keys():
print(' {} ({})'.format(x,f[group_output_types+'/'+x].attrs['Description'].decode()))
@ -215,24 +192,22 @@ class DADF5():
"""Returns the location of all active datasets with given label.""" #ToDo: Merge path only once at the end '/'.join(listE)
path = []
with h5py.File(self.filename,'r') as f:
for i in self.visible['increments']:
group_inc = 'inc{:05}'.format(i['inc'])
for i in self.iter_visible('increments'):
for c in self.iter_visible('constituents'):
for t in self.iter_visible('con_physics'):
try:
p = '/'.join([group_inc,'constituent',c,t,label])
f[p]
path.append(p)
k = '/'.join([i,'constituent',c,t,label])
f[k]
path.append(k)
except KeyError as e:
print('unable to locate constituents dataset: '+ str(e))
for m in self.iter_visible('materialpoints'):
for t in self.iter_visible('mat_physics'):
try:
p = '/'.join([group_inc,'materialpoint',m,t,label])
f[p]
path.append(p)
k = '/'.join([i,'materialpoint',m,t,label])
f[k]
path.append(k)
except KeyError as e:
print('unable to locate materialpoints dataset: '+ str(e))