Questions about how to define crystal orientations
Closed this issue · 4 comments
Hello.
I am interested in crystal plasticity, and using the PRISMS.
But I'm wondering how crystal orientations be treated in the code. I want to ask you as following issues.
First, in the program, it seems to calculate rotation matrix from Rodrigues vector (odfpoint in rotationOperations.cc). However, the program does't use any trigonometric functions. Is it enough by using only the vector components and the dot product?
Second, is the rotation operation conducted against the normal cartesian coordinate, i.e. [1 0 0], [0 1 0], [0 0 1] coordinate? Is a material placed in that space?
Third, the code also uses quaternion, which is obtained by Rodrigues vector given in advance. The conversion will be in rod2quat, written in updateAfterincrement.cc and conducted by using cosine function. According to my research , the conversion requires not only cosine function, but also sine function. Why does the difference occur?
Some issues may be by my misunderstandings or poor abilities, however, I would appreciate it if you answer them.
Hi,
Thank you for your interest in PRISMS-CPFE. You pose valid questions. I answer them briefly as follows :
-
Note that the magnitude of the Rodrigues vector provides you with tan(t/2) where t is the rotation angle. Additionally the trigonometric functions sin(t) and cos(t) can be expressed completely and uniquely in terms of tan(t/2) which means that all the necessary trigonometric functions can be expressed in terms of the magnitude of the Rodrigues vector so that the construction of the rotation matrix involves only vector operations. For a derivation of this expression refer to the book - Orientations and Rotations: Computations in Crystallographic Textures, Pages 21-22.
-
The rotation matrix used in the crystal plasticity formulation transforms the matrix corresponding to the Schmid tensor from the crystal reference frame(S) to the matrix in the sample reference frame(S'). Because the Schmid tensor is a dyadic product of the unit slip direction vector and unit slip plane normal vector, the transformed matrix S' can be expressed in terms of S as
S' = R S R^T ; R^T denotes the transpose of the rotation matrix R
-
Note that the quaternion formula involves sin(t/2) and cos(t/2). Once cos(t/2) is computed, sin(t/2) = cos(t/2) x tan(t/2) and tan(t/2) is the magnitude of the Rodrigues vector. So knowing just cos(t/2) suffices.
Thank you.
I haven't noticed that each components of the Rodrigues vector contains the rotational information.
I confirmed that the process in the program matches the analytical solution.
I have one more question regarding the No.2.
In the case of making a crystal which contains arbitrary orientation in arbitrary coordinate axis (e.g., [1 2 3] single crystal in [2 1 1], [0 1 -1], [-1 1 1] axis), is it OK that I give the material the Rodrigues vector converted from corresponding Euler angle (e.g., the angle that rotates [1 0 0], [0 1 0], [0 0 1] axis to [2 1 1], [0 1 -1], [-1 1 1] axis, and the angle that does [2 1 1] direction to [1 2 3] from the rotated axis)?
If you know the Euler angles that transform vectors in crystal coordinate system([1 0 0],[0 1 0],[0 0 1]) to some arbitrary mutually orthogonal axes system(the sample frame), then the first step would be to construct the rotation matrix that transforms the crystal frame to the sample frame using the Euler angles. Once this is done the Rodrigues vector should be constructed from the rotation matrix. When you do that please verify the following :
-
The rotation matrix is constructed so that it operates on vectors expressed in the crystal frame, and obtains the new components of the same vector expressed in the sample frame.
-
The Rodrigues vector follows the convention for input to PRISMS-CPFE, which you can do that as follows. We have the function odfpoint in rotationOperations.cc which converts the Rodrigues vector to rotation matrix. So once you use your formula to convert the rotation matrix to Rodrigues vector, apply the operations in odfpoint to make sure you retrieve the same rotation matrix that you inputted. If you retrieve the same rotation matrix then you are good to go. If not, then the rotation matrix that you should input in your formulae must be the transpose of what you originally generated. That will ensure consistency of formulae with those required to generate orientations input for PRISMS-CPFE.
Thank you very much!
I'll try it.