iter functions for groups
restore original selection after iterating (i.e. temp setting of active) polishing: correct names and more details for HDF5 meta data
This commit is contained in:
parent
69462f8190
commit
898f53295d
|
@ -87,18 +87,39 @@ class DADF5():
|
||||||
self.active[t] = list(existing.remove(choice))
|
self.active[t] = list(existing.remove(choice))
|
||||||
|
|
||||||
|
|
||||||
def constitutive_output_set(self,output):
|
def __on_air_iter(self,t):
|
||||||
|
a = self.active[t]
|
||||||
|
last_a = a.copy()
|
||||||
|
for i in a:
|
||||||
|
if last_a != self.active[t]:
|
||||||
|
self.__on_air_set(a,t,a)
|
||||||
|
raise Exception
|
||||||
|
self.__on_air_set(i,t,a)
|
||||||
|
last_a = self.active[t]
|
||||||
|
yield i
|
||||||
|
self.__on_air_set(a,t,a)
|
||||||
|
|
||||||
|
|
||||||
|
def constituent_output_iter(self):
|
||||||
|
return self.__on_air_iter('c_output_types')
|
||||||
|
|
||||||
|
|
||||||
|
def constituent_output_set(self,output):
|
||||||
self.__on_air_set(output,'c_output_types',self.c_output_types)
|
self.__on_air_set(output,'c_output_types',self.c_output_types)
|
||||||
|
|
||||||
|
|
||||||
def constitutive_output_add(self,output):
|
def constituent_output_add(self,output):
|
||||||
self.__on_air_add(output,'c_output_types',self.c_output_types)
|
self.__on_air_add(output,'c_output_types',self.c_output_types)
|
||||||
|
|
||||||
|
|
||||||
def constitutive_output_del(self,output):
|
def constituent_output_del(self,output):
|
||||||
self.__on_air_del(output,'c_output_types')
|
self.__on_air_del(output,'c_output_types')
|
||||||
|
|
||||||
|
|
||||||
|
def materialpoint_output_iter(self):
|
||||||
|
return self.__on_air_iter('m_output_types')
|
||||||
|
|
||||||
|
|
||||||
def materialpoint_output_set(self,output):
|
def materialpoint_output_set(self,output):
|
||||||
self.__on_air_set(output,'m_output_types',self.m_output_types)
|
self.__on_air_set(output,'m_output_types',self.m_output_types)
|
||||||
|
|
||||||
|
@ -111,18 +132,26 @@ class DADF5():
|
||||||
self.__on_air_del(output,'m_output_types')
|
self.__on_air_del(output,'m_output_types')
|
||||||
|
|
||||||
|
|
||||||
def constitutive_set(self,output):
|
def constituent_iter(self):
|
||||||
|
return self.__on_air_iter('constituents')
|
||||||
|
|
||||||
|
|
||||||
|
def constituent_set(self,output):
|
||||||
self.__on_air_set(output,'constituents',self.constituents)
|
self.__on_air_set(output,'constituents',self.constituents)
|
||||||
|
|
||||||
|
|
||||||
def constitutive_add(self,output):
|
def constituent_add(self,output):
|
||||||
self.__on_air_add(output,'constituents',self.constituents)
|
self.__on_air_add(output,'constituents',self.constituents)
|
||||||
|
|
||||||
|
|
||||||
def constitutive_del(self,output):
|
def constituent_del(self,output):
|
||||||
self.__on_air_del(output,'constituents')
|
self.__on_air_del(output,'constituents')
|
||||||
|
|
||||||
|
|
||||||
|
def materialpoint_iter(self):
|
||||||
|
return self.__on_air_iter('materialpoints')
|
||||||
|
|
||||||
|
|
||||||
def materialpoint_set(self,output):
|
def materialpoint_set(self,output):
|
||||||
self.__on_air_set(output,'materialpoints',self.materialpoints)
|
self.__on_air_set(output,'materialpoints',self.materialpoints)
|
||||||
|
|
||||||
|
@ -134,13 +163,6 @@ class DADF5():
|
||||||
def materialpoint_del(self,output):
|
def materialpoint_del(self,output):
|
||||||
self.__on_air_del(output,'materialpoints')
|
self.__on_air_del(output,'materialpoints')
|
||||||
|
|
||||||
def c_it(self):
|
|
||||||
a = self.active['constituents']#.copy()
|
|
||||||
for i in a:
|
|
||||||
self.constitutive_set(i)
|
|
||||||
yield i
|
|
||||||
self.constitutive_set(a)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ToDo: store increments, select icrements (trivial), position, and time
|
# ToDo: store increments, select icrements (trivial), position, and time
|
||||||
|
@ -310,7 +332,7 @@ class DADF5():
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'data' : np.sqrt(np.einsum('ijk->i',dev**2)*factor),
|
'data' : np.sqrt(np.einsum('ijk->i',dev**2)*factor),
|
||||||
'label' : 'dev({})'.format(x['label']),
|
'label' : 'Mises({})'.format(x['label']),
|
||||||
'meta' : {
|
'meta' : {
|
||||||
'Unit' : x['meta']['Unit'],
|
'Unit' : x['meta']['Unit'],
|
||||||
'Description' : 'Mises equivalent stress of {} ({})'.format(x['label'],x['meta']['Description']),
|
'Description' : 'Mises equivalent stress of {} ({})'.format(x['label'],x['meta']['Description']),
|
||||||
|
@ -329,26 +351,32 @@ class DADF5():
|
||||||
|
|
||||||
See numpy.linalg.norm manual for details.
|
See numpy.linalg.norm manual for details.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def norm(x,ord):
|
def norm(x,ord):
|
||||||
|
|
||||||
|
o = ord
|
||||||
if len(x['data'].shape) == 1:
|
if len(x['data'].shape) == 1:
|
||||||
axis = 0
|
axis = 0
|
||||||
t = 'scalar'
|
t = 'scalar'
|
||||||
|
if o is None: o = 2
|
||||||
elif len(x['data'].shape) == 2:
|
elif len(x['data'].shape) == 2:
|
||||||
axis = 1
|
axis = 1
|
||||||
t = 'vector'
|
t = 'vector'
|
||||||
|
if o is None: o = 2
|
||||||
elif len(x['data'].shape) == 3:
|
elif len(x['data'].shape) == 3:
|
||||||
axis = (1,2)
|
axis = (1,2)
|
||||||
t = 'tensor'
|
t = 'tensor'
|
||||||
|
if o is None: o = 'fro'
|
||||||
else:
|
else:
|
||||||
raise ValueError
|
raise ValueError
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'data' : np.linalg.norm(x['data'],ord=ord,axis=axis,keepdims=True),
|
'data' : np.linalg.norm(x['data'],ord=o,axis=axis,keepdims=True),
|
||||||
'label' : 'norm({})'.format(x['label']),
|
'label' : '|{}|_{}'.format(x['label'],ord),
|
||||||
'meta' : {
|
'meta' : {
|
||||||
'Unit' : x['meta']['Unit'],
|
'Unit' : x['meta']['Unit'],
|
||||||
'Description' : 'Norm of {} {} ({})'.format(t,x['label'],x['meta']['Description']), # ToDo: add details about norm used
|
'Description' : '{}-Norm of {} {} ({})'.format(ord,t,x['label'],x['meta']['Description']),
|
||||||
'Creator' : 'dadf5.py:add_norm vXXXXX'
|
'Creator' : 'dadf5.py:add_norm vXXXXX'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -425,6 +453,16 @@ class DADF5():
|
||||||
def add_strain_tensor(self,t,ord,defgrad='F'): #ToDo: Use t and ord
|
def add_strain_tensor(self,t,ord,defgrad='F'): #ToDo: Use t and ord
|
||||||
"""Adds the a strain tensor."""
|
"""Adds the a strain tensor."""
|
||||||
def strain_tensor(defgrad,t,ord):
|
def strain_tensor(defgrad,t,ord):
|
||||||
|
# def operator(stretch,strain,eigenvalues):
|
||||||
|
#"""Albrecht Bertram: Elasticity and Plasticity of Large Deformations An Introduction (3rd Edition, 2012), p. 102"""
|
||||||
|
#return {
|
||||||
|
# 'V#ln': np.log(eigenvalues) ,
|
||||||
|
# 'U#ln': np.log(eigenvalues) ,
|
||||||
|
# 'V#Biot': ( np.ones(3,'d') - 1.0/eigenvalues ) ,
|
||||||
|
# 'U#Biot': ( eigenvalues - np.ones(3,'d') ) ,
|
||||||
|
# 'V#Green': ( np.ones(3,'d') - 1.0/eigenvalues/eigenvalues) *0.5,
|
||||||
|
# 'U#Green': ( eigenvalues*eigenvalues - np.ones(3,'d')) *0.5,
|
||||||
|
# }[stretch+'#'+strain]
|
||||||
(U,S,Vh) = np.linalg.svd(defgrad['data']) # singular value decomposition
|
(U,S,Vh) = np.linalg.svd(defgrad['data']) # singular value decomposition
|
||||||
R_inv = np.einsum('ikj',np.matmul(U,Vh)) # inverse rotation of polar decomposition
|
R_inv = np.einsum('ikj',np.matmul(U,Vh)) # inverse rotation of polar decomposition
|
||||||
U = np.matmul(R_inv,defgrad['data']) # F = RU
|
U = np.matmul(R_inv,defgrad['data']) # F = RU
|
||||||
|
@ -459,8 +497,11 @@ class DADF5():
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
func : function
|
func : function
|
||||||
|
Function that calculates a new dataset from one or more datasets per HDF5 group.
|
||||||
datasets_requested : list of dictionaries
|
datasets_requested : list of dictionaries
|
||||||
extra_args : dictitionary
|
Details of the datasets to be used: label (in HDF5 file) and arg (argument to which the data is parsed in func).
|
||||||
|
extra_args : dictionary, optional
|
||||||
|
Any extra arguments parsed to func.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def job(args):
|
def job(args):
|
||||||
|
|
Loading…
Reference in New Issue