handle min/mid/max eigenvalues/vectors separately
storing as matrix/vector is not favorable for paraview and in many cases, either min or max are of interest only
This commit is contained in:
parent
addc4c36d1
commit
31f72aa912
|
@ -568,9 +568,8 @@ class Result:
|
||||||
'label': 'sigma',
|
'label': 'sigma',
|
||||||
'meta': {
|
'meta': {
|
||||||
'Unit': P['meta']['Unit'],
|
'Unit': P['meta']['Unit'],
|
||||||
'Description': 'Cauchy stress calculated from {} ({}) '.format(P['label'],
|
'Description': 'Cauchy stress calculated from {} ({}) and {} ({})'\
|
||||||
P['meta']['Description'])+\
|
.format(P['label'],P['meta']['Description'],F['label'],F['meta']['Description']),
|
||||||
'and {} ({})'.format(F['label'],F['meta']['Description']),
|
|
||||||
'Creator': inspect.stack()[0][3][1:]
|
'Creator': inspect.stack()[0][3][1:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -638,17 +637,24 @@ class Result:
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _add_eigenvalue(T_sym):
|
def _add_eigenvalue(T_sym,eigenvalue):
|
||||||
|
if eigenvalue == 'max':
|
||||||
|
label,p = 'Maximum',2
|
||||||
|
elif eigenvalue == 'mid':
|
||||||
|
label,p = 'Intermediate',1
|
||||||
|
elif eigenvalue == 'min':
|
||||||
|
label,p = 'Minimum',0
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'data': mechanics.eigenvalues(T_sym['data']),
|
'data': mechanics.eigenvalues(T_sym['data'])[:,p],
|
||||||
'label': 'lambda({})'.format(T_sym['label']),
|
'label': 'lambda_{}({})'.format(eigenvalue,T_sym['label']),
|
||||||
'meta' : {
|
'meta' : {
|
||||||
'Unit': T_sym['meta']['Unit'],
|
'Unit': T_sym['meta']['Unit'],
|
||||||
'Description': 'Eigenvalues of {} ({})'.format(T_sym['label'],T_sym['meta']['Description']),
|
'Description': '{} eigenvalue of {} ({})'.format(label,T_sym['label'],T_sym['meta']['Description']),
|
||||||
'Creator': inspect.stack()[0][3][1:]
|
'Creator': inspect.stack()[0][3][1:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
def add_eigenvalues(self,T_sym):
|
def add_eigenvalue(self,T_sym,eigenvalue='max'):
|
||||||
"""
|
"""
|
||||||
Add eigenvalues of symmetric tensor.
|
Add eigenvalues of symmetric tensor.
|
||||||
|
|
||||||
|
@ -656,33 +662,46 @@ class Result:
|
||||||
----------
|
----------
|
||||||
T_sym : str
|
T_sym : str
|
||||||
Label of symmetric tensor dataset.
|
Label of symmetric tensor dataset.
|
||||||
|
eigenvalue : str, optional
|
||||||
|
Eigenvalue. Select from ‘max’, ‘mid’, ‘min’. Defaults to ‘max’.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
self._add_generic_pointwise(self._add_eigenvalue,{'T_sym':T_sym})
|
self._add_generic_pointwise(self._add_eigenvalue,{'T_sym':T_sym},{'eigenvalue':eigenvalue})
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _add_eigenvector(T_sym):
|
def _add_eigenvector(T_sym,eigenvalue):
|
||||||
|
if eigenvalue == 'max':
|
||||||
|
label,p = 'maximum',2
|
||||||
|
elif eigenvalue == 'mid':
|
||||||
|
label,p = 'intermediate',1
|
||||||
|
elif eigenvalue == 'min':
|
||||||
|
label,p = 'minimum',0
|
||||||
|
print('p',eigenvalue)
|
||||||
return {
|
return {
|
||||||
'data': mechanics.eigenvectors(T_sym['data']),
|
'data': mechanics.eigenvectors(T_sym['data'])[:,p],
|
||||||
'label': 'v({})'.format(T_sym['label']),
|
'label': 'v_{}({})'.format(eigenvalue,T_sym['label']),
|
||||||
'meta' : {
|
'meta' : {
|
||||||
'Unit': '1',
|
'Unit': '1',
|
||||||
'Description': 'Eigenvectors of {} ({})'.format(T_sym['label'],T_sym['meta']['Description']),
|
'Description': 'Eigenvector corresponding to {} eigenvalue of {} ({})'\
|
||||||
|
.format(label,T_sym['label'],T_sym['meta']['Description']),
|
||||||
'Creator': inspect.stack()[0][3][1:]
|
'Creator': inspect.stack()[0][3][1:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
def add_eigenvectors(self,T_sym):
|
def add_eigenvector(self,T_sym,eigenvalue='max'):
|
||||||
"""
|
"""
|
||||||
Add eigenvectors of symmetric tensor.
|
Add eigenvector of symmetric tensor.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
T_sym : str
|
T_sym : str
|
||||||
Label of symmetric tensor dataset.
|
Label of symmetric tensor dataset.
|
||||||
|
eigenvalue : str, optional
|
||||||
|
Eigenvalue to which the eigenvector corresponds. Select from
|
||||||
|
‘max’, ‘mid’, ‘min’. Defaults to ‘max’.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
self._add_generic_pointwise(self._add_eigenvector,{'T_sym':T_sym})
|
self._add_generic_pointwise(self._add_eigenvector,{'T_sym':T_sym},{'eigenvalue':eigenvalue})
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -819,9 +838,8 @@ class Result:
|
||||||
'label': 'S',
|
'label': 'S',
|
||||||
'meta': {
|
'meta': {
|
||||||
'Unit': P['meta']['Unit'],
|
'Unit': P['meta']['Unit'],
|
||||||
'Description': '2. Kirchhoff stress calculated from {} ({}) '.format(P['label'],
|
'Description': '2. Piola-Kirchhoff stress calculated from {} ({}) and {} ({})'\
|
||||||
P['meta']['Description'])+\
|
.format(P['label'],P['meta']['Description'],F['label'],F['meta']['Description']),
|
||||||
'and {} ({})'.format(F['label'],F['meta']['Description']),
|
|
||||||
'Creator': inspect.stack()[0][3][1:]
|
'Creator': inspect.stack()[0][3][1:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,21 +132,23 @@ class TestResult:
|
||||||
in_file = default.read_dataset(loc['s_P'],0)
|
in_file = default.read_dataset(loc['s_P'],0)
|
||||||
assert np.allclose(in_memory,in_file)
|
assert np.allclose(in_memory,in_file)
|
||||||
|
|
||||||
def test_add_eigenvalues(self,default):
|
@pytest.mark.parametrize('eigenvalue,function',[('max',np.amax),('min',np.amin)])
|
||||||
|
def test_add_eigenvalue(self,default,eigenvalue,function):
|
||||||
default.add_Cauchy('P','F')
|
default.add_Cauchy('P','F')
|
||||||
default.add_eigenvalues('sigma')
|
default.add_eigenvalue('sigma',eigenvalue)
|
||||||
loc = {'sigma' :default.get_dataset_location('sigma'),
|
loc = {'sigma' :default.get_dataset_location('sigma'),
|
||||||
'lambda(sigma)':default.get_dataset_location('lambda(sigma)')}
|
'lambda':default.get_dataset_location('lambda_{}(sigma)'.format(eigenvalue))}
|
||||||
in_memory = mechanics.eigenvalues(default.read_dataset(loc['sigma'],0))
|
in_memory = function(mechanics.eigenvalues(default.read_dataset(loc['sigma'],0)),axis=1,keepdims=True)
|
||||||
in_file = default.read_dataset(loc['lambda(sigma)'],0)
|
in_file = default.read_dataset(loc['lambda'],0)
|
||||||
assert np.allclose(in_memory,in_file)
|
assert np.allclose(in_memory,in_file)
|
||||||
|
|
||||||
def test_add_eigenvectors(self,default):
|
@pytest.mark.parametrize('eigenvalue,idx',[('max',2),('mid',1),('min',0)])
|
||||||
|
def test_add_eigenvector(self,default,eigenvalue,idx):
|
||||||
default.add_Cauchy('P','F')
|
default.add_Cauchy('P','F')
|
||||||
default.add_eigenvectors('sigma')
|
default.add_eigenvector('sigma',eigenvalue)
|
||||||
loc = {'sigma' :default.get_dataset_location('sigma'),
|
loc = {'sigma' :default.get_dataset_location('sigma'),
|
||||||
'v(sigma)':default.get_dataset_location('v(sigma)')}
|
'v(sigma)':default.get_dataset_location('v_{}(sigma)'.format(eigenvalue))}
|
||||||
in_memory = mechanics.eigenvectors(default.read_dataset(loc['sigma'],0))
|
in_memory = mechanics.eigenvectors(default.read_dataset(loc['sigma'],0))[:,idx]
|
||||||
in_file = default.read_dataset(loc['v(sigma)'],0)
|
in_file = default.read_dataset(loc['v(sigma)'],0)
|
||||||
assert np.allclose(in_memory,in_file)
|
assert np.allclose(in_memory,in_file)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue