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?
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.
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.
c Checks is RKF23 solout vector y is OK for hypoplasticity
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 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.
Hi Ran, even better, thanks. So we probably did it correct :). Regards David