orientation.equivalent takes several rotations at the same time + small test"

"

""
This commit is contained in:
f.basile 2020-06-04 16:39:24 +02:00
parent 512e54a7ee
commit 0c41e33434
2 changed files with 49 additions and 2 deletions

View File

@ -39,8 +39,8 @@ class Orientation:
else:
self.rotation = Rotation.from_quaternion(rotation) # assume quaternion
if self.rotation.quaternion.shape != (4,):
raise NotImplementedError('Support for multiple rotations missing')
# if self.rotation.quaternion.shape != (4,):
# raise NotImplementedError('Support for multiple rotations missing')
def disorientation(self,
other,
@ -80,6 +80,20 @@ class Orientation:
def inFZ(self):
return self.lattice.symmetry.inFZ(self.rotation.as_Rodrigues(vector=True))
def equivalent(self):
"""
List of orientations which are symmetrically equivalent.
Supported for multiple rotation with same lattice
Returns list [i] being i=range(24)
Returns list [i, num_rot] for multiple rotations
"""
if not self.rotation.shape:
return [self.__class__(q*self.rotation,self.lattice) \
for q in self.lattice.symmetry.symmetryOperations()]
else:
return np.reshape([self.__class__(q*Rotation.from_quaternion(self.rotation.as_quaternion()[l]),self.lattice) \
for q in self.lattice.symmetry.symmetryOperations() for l in range(self.rotation.shape[0])], (24,self.rotation.shape[0]))
def equivalentOrientations(self,members=[]):
"""List of orientations which are symmetrically equivalent."""

33
python/damask/oritest.py Normal file
View File

@ -0,0 +1,33 @@
import damask
import numpy as np
rot0= damask.Rotation.from_random()
rot1= damask.Rotation.from_random()
rot2= damask.Rotation.from_random()
ori0=damask.Orientation(rot0,'fcc')
ori1=damask.Orientation(rot1,'fcc')
ori2=damask.Orientation(rot2,'fcc')
quat=np.array([rot0.as_quaternion(),rot1.as_quaternion(),rot2.as_quaternion()])
rot=damask.Rotation.from_quaternion(quat)
ori=damask.Orientation(rot,'fcc')
ori.equivalent()
# doesn't work this way, don't know why
#ori.equivalent()[:,0][0] == ori0.equivalentOrientations()[0]
for s in range(24):
print(ori.equivalent()[s,0].rotation.as_Eulers() == ori0.equivalentOrientations()[s].rotation.as_Eulers())
print(ori.equivalent()[s,1].rotation.as_Eulers() == ori1.equivalentOrientations()[s].rotation.as_Eulers())
print(ori.equivalent()[s,2].rotation.as_Eulers() == ori2.equivalentOrientations()[s].rotation.as_Eulers())