Dear forumers:
Thanks to hypoplasticity sand UMAT provided by Prof. Masin —
But during studying above sand UMAT, I found that the stress order may be incorrect. Because stress vector in UMAT is xx, yy, zz, xy, xz, yz. However in subroutine “Eig_3_h” and “Eig_3a_h”, the stress vetor is XX, YY, ZZ, XY, YZ, ZX. That denotes the last two shear stress may be misordered. The detailed code is shown as following:

Subroutine Eig_3a_h(iOpt,St,S1,S2,S3,P,Q) ! xN1,xN2,xN3,
Implicit Double Precision (A-H,O-Z)
Dimension St(6),A(3,3) ! V(3,3),xN1(3),xN2(3),xN3(3)
! Get Eigenvalues ( no Eigenvectors) for 3*3 matrix
! Wim Bomhof 15/11/’01
! Applied on principal stresses, directions
! Stress vector XX, YY, ZZ, XY, YZ, ZX
! the order may be incorrect
A(1,1) = St(1) ! xx
A(1,2) = St(4) ! xy = yx
A(1,3) = St(6) ! zx = xz

A(2,1) = St(4) ! xy = yx
A(2,2) = St(2) ! yy
A(2,3) = St(5) ! zy = yz

A(3,1) = St(6) ! zx = xz
A(3,2) = St(5) ! zy = yz
A(3,3) = St(3) ! zz

It is not clear for me whether the stress order is incorrect. Could anyone please give me some instruction?

Best regards

Ran Tu

  1. David Mašín
    David Mašín 1 year ago

    Hi Ran, thanks for your comment.

    Actually, you are right, but you are pointing to routine which calculates tensor eigenvalues, where the order of shear components is actually irrelevant. Even if it was, these routines are not used in the model code itself, they are only used in principal stress calculation in routine PrnSig_h which is used in a single routine check_RKF_h, which is there to ensure code stability by eliminating possible exceptions (tensile principal stress), rather than in the model integration.

    The constitutive model routines are actually coded directly in the Abaqus 6-component vector format, so there is no risk in having a bug in the component order.

    Regards David

    • Ran Tu Author
      Ran Tu 1 year ago

      Hi Prof. Masin:

      Too many thanks for your time. Your code is really helpful!

      During the second studying of the sand UMAT, I found I had lost some important information. Actually in subroutine “check_RKF_h”, the last two shear stress had been exchanged in effective stress vector “sig_star”. And then “sig_star” is used in subroutine “PrnSig_h“ -> “Eig_3_h”. Thar means the stress order in “Eig_3_h” is correct. Relevant code about order of “sig_star” is list as following.

      subroutine check_RKF_h(error_RKF,y,ny,nasv,parms,nparms)
      c Checks is RKF23 solout vector y is OK for hypoplasticity
      implicit none
      integer error_RKF,ny,nasv,i,nparms,testnan,iopt
      double precision y(ny),parms(nparms)
      double precision sig(6),pmean,sig_star(6)
      double precision xN1(3),xN2(3),xN3(3),S(3),P,Q,tmin
      double precision p_t,minstress
      p_t =parms(2)
      do i=1,6
      end do

      c changed order due to prnsig convention different from abaqus

      As can be seen in above code, sig_star(5)=sig(6), sig_star(6)=sig(5). So the last two shear stress has been exchanged. I made a mistake, and the sand UMAT seems to have no bug.

      Best regards

      • David Mašín
        David Mašín 1 year ago

        Hi Ran, even better, thanks. So we probably did it correct :). Regards David

Leave a reply

©2022 SoilModels

Log in with your credentials

Forgot your details?