There is something wrong about the update of crystal orientation. The Euler angles 'psi_t', 'dir_cos' or 'xs, xm' are not updated within the loop.
-
There is no explicit mathematical update or transformation applied to
psi_twithin the loop. The Euler angles are initialized once and then simply passed through the state variables from one time step to the next.(1) Initialization:
- For the first time step,
psi_tis initialized using values from theanglearray, which are presumably read from an external file:psi_t(1) = angle(nElement(km),1)*PI/180.0 psi_t(2) = angle(nElement(km),2)*PI/180.0 psi_t(3) = angle(nElement(km),3)*PI/180.0
(2) Reading from State Variables:
- For subsequent time steps,
psi_tis read from thestateOldarray:do i = 1,3 n = n + 1 psi_t(i) = stateOld(km,n) end do
(3) Storing Back to State Variables:
- At the end of each loop iteration,
psi_tis stored back into thestateNewarray:do i = 1,3 n = n + 1 stateNew(km,n) = psi_t(i) end do
- For the first time step,
-
The
dir_cosmatrix, as calculated in the subroutine, is not used after its computation. Instead, thedir_cos_0matrix is used for transforming slip systems and rotating the elastic tensor.
The dir_cos matrix is calculated using the calc_Dir_Cos subroutine and then transformed using the rel_spin matrix:
call calc_Dir_Cos(psi_t, dir_cos_0)
call aa_dot_bb(3, dir_cos_0, rel_spin, dir_cos)
- The xs and xm arrays are calculated but not used in any subsequent operations or calculations within the provided subroutine.
The xs and xm arrays are calculated using the calc_Rot_Slip and calc_Rot_Norm subroutines:
call calc_Rot_Slip(xs0, xs, F_el_0, num_slip_sys)
call calc_Rot_Norm(xm0, xm, F_el_inv_0, num_slip_sys)
In the original paper, the plastic velocity gradient is defined using time-independent slip direction and norm. This approach stems from the fact that the main constitutive equations are defined in the intermediate configuration, where only plastic deformation is considered. This deformation does not alter the slip direction or its norm. For further details, please refer to Equations (7) and (11) in the paper:
“Crystallographic texture evolution in bulk deformation processing of FCC metals,” Journal of the Mechanics and Physics of Solids, 40, 537–569 (1992).
Regarding the subroutine for rotating xm and xs, it is primarily used for studying texture evolution, but it is intended for postprocessing purposes only.
You are right. The plastic deformation does not change the slip direction or its norm. The main body of this subroutine is also no problem. However, the Euler angles are related to the elastic deformation, and they evolve with the rigid rotation. Maybe you did not care about the texture evolution. Hence, there is a suggestion.
The updated Euler angles are only for output for post-processing. It can be calculated from the updated orientation matrix Q(t). There is no need to read in Euler angles psi_t from the stateOld array in the subsequent time steps.
- Get the updated rotation matrix
RSTAR. R*U=F*.
CALL POLAR(FSTAR, RSTAR, USTAR)
- Get the updated orientation matrix
QTEX. Q(t)=R*Q.
CALL MATMUL(RSTAR, Q, QTEX)
- Calculate the Euler angles
TH, PH, OMfor the updated orientation matrix.
CALL EULANG(QTEX, TH, PH, OM)
Ref. "Bunge, H. J. (2013). Texture analysis in materials science: mathematical methods. Elsevier.".