CPFEM-VUMAT icon indicating copy to clipboard operation
CPFEM-VUMAT copied to clipboard

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.

Open Budong-zhangliang opened this issue 11 months ago • 2 comments

  1. There is no explicit mathematical update or transformation applied to psi_t within 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_t is initialized using values from the angle array, 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_t is read from the stateOld array:
      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_t is stored back into the stateNew array:
      do i = 1,3
        n = n + 1
        stateNew(km,n) = psi_t(i)
      end do
      
  2. The dir_cos matrix, as calculated in the subroutine, is not used after its computation. Instead, the dir_cos_0 matrix 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)
  1. 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)

Budong-zhangliang avatar Dec 27 '24 16:12 Budong-zhangliang

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.

yzhang951 avatar Dec 28 '24 05:12 yzhang951

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, OM for the updated orientation matrix.

CALL EULANG(QTEX, TH, PH, OM)

Ref. "Bunge, H. J. (2013). Texture analysis in materials science: mathematical methods. Elsevier.".

Budong-zhangliang avatar Dec 28 '24 08:12 Budong-zhangliang