Dear forumers:

Thanks to hypoplasticity sand UMAT provided by Prof. Masin — https://soilmodels.com/download/plaxis-umat-hypoplas-zip/.

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

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

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—————————————————————————–

c Checks is RKF23 solout vector y is OK for hypoplasticity

c—————————————————————————–

implicit none

c

integer error_RKF,ny,nasv,i,nparms,testnan,iopt

c

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

c

p_t =parms(2)

minstress=p_t/4.d0

do i=1,6

sig(i)=y(i)

end do

sig_star(1)=sig(1)-p_t

sig_star(2)=sig(2)-p_t

sig_star(3)=sig(3)-p_t

sig_star(4)=sig(4)

c changed order due to prnsig convention different from abaqus

sig_star(5)=sig(6)

sig_star(6)=sig(5)

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

Ran

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