slimjimmy
Nuclear
- Apr 5, 2011
- 16
Hi Guys,
First time poster here. Im writing a UMAT to implement the fung elastic model into abaqus. The equation is U=c/2(e^^Q -1) and Q is int terms of the material coefficients of the strain components Eij.
Im using the UANISOHYPER Strain in abaqus, and what i need to define is U - the strain energy density function, UA(1)- Derivatives of strain energy potential with respect to the components of the modified Green strain tensor, UA(2)-2nd Derivatives of strain energy potential with respect to the components of the modified Green strain tensor.
Im modelling an incompressible soft tissue so the third derivative and the derivatives with respect to J ( volume ratio) are ignored.
I'm running a very simple job, 1 element, fixed at one end and being pulled at the opposite end. The umat compiles properly but i get an unexpected error 193 running the job. I have attached the UMAT if anyone has any experience writing something similar. Any help guys would be greatly appreciated.
SUBROUTINE UANISOHYPER_STRAIN (EBAR, AJ, UA, DU1, DU2, DU3,
1 TEMP, NOEL, CMNAME, INCMPFLAG, IHYBFLAG, NDI, NSHR, NTENS,
2 NUMSTATEV, STATEV, NUMFIELDV, FIELDV, FIELDVINC,
3 NUMPROPS, PROPS)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION EBAR(NTENS), UA(2), DU1(NTENS+1),
2 DU2((NTENS+1)*(NTENS+2)/2),
3 DU3((NTENS+1)*(NTENS+2)/2),
4 STATEV(NUMSTATEV), FIELDV(NUMFIELDV),
5 FIELDVINC(NUMFIELDV), PROPS(NUMPROPS)
C
DIMENSION D(3,3)
DIMENSION ET(3,3)
C where ET = elasticity tensor and D = term1*ET
CHARACTER*80 FUNG_HYPERELASTIC
C User Code to define
C
C UA(1)=Strain energy density function
C UA(2)=The deviatoric part of the strain energy desnity function
C DU1(NTENS+1)=Derivatives of the strain enery potential wrt to modified green strain
C DU2=Second Derivatives of the strain enery potential wrt to modified green strain
C Parameters
C PROPS(X) = Used to determine constant value and location in Abaqus
C Material Property Interface
zero = 0.d0
half = 0.5d0
one = 1.d0
two = 2.d0
twothirds = 2.d0/3.d0
fourthirds = 4.d0/3.d0
oneninth = 1.d0/9.d0
twoninths = 2.d0/9.d0
fourninths = 4.d0/9.d0
print*, 'in'
C Constants
C=PROPS(1)
A_1=PROPS(2)
A_2=PROPS(3)
A_3=PROPS(4)
A_4=PROPS(5)
A_5=PROPS(6)
A_6=PROPS(7)
C converting Green strain to modified green strain
C xpow= j**2/3= determination of deformation gradient (volume ratio)
xpow=exp(log(aj)*twothirds)
E11 = xpow * ebar(1) + half * ( xpow - one )
E22 = xpow * ebar(2) + half * ( xpow - one )
E33 = xpow * ebar(3) + half * ( xpow - one )
E12 = xpow * ebar(4)
E13 = xpow * ebar(5)
E23 = xpow * ebar(6)
C term 1 is c/2*expQ and term2 is expQ
term1=half*C*(exp((A_1*(E11)**2)+(A_2*(E22)**2)
* +(two*A_3*E11*E22)+(A_4*(E12)**2)
* +(two*A_5*E12*E11)+(two*A_6*E12*E22)))
term2=(exp((A_1*(E11)**2)+(A_2*(E22)**2)
* +(two*A_3*E11*E22)+(A_4*(E12)**2)
* +(two*A_5*E12*E11)+(two*A_6*E12*E22)))
C let z1 - z3 be the derivative of the u substition of the first derivative.
C i.e z1 wrt to E11 z2 wrt E22 etc
z1=two*A_1*E11+two*A_3*E22+two*A_5*E12
z2=two*A_2*E22+two*A_3*E11+two*A_6*E12
z3=two*A_4*E12+two*A_5*E11+two*A_6*E22
C
ET(1,1)=2*A_1+(z1**2)
ET(1,2)=2*A_3+(z1*z2)
ET(2,2)=2*A_2+(z2**2)
ET(1,3)=2*A_5+(z1*z2)
ET(2,3)=2*A_6+(z2*z3)
ET(3,3)=2*A_4+(z3**2)
C Symmetry
ET(2,1)=ET(1,2)
ET(3,1)=ET(1,3)
ET(3,2)=ET(2,3)
C
D1111=term1*ET(1,1)
D1122=term1*ET(1,2)
D2222=term1*ET(2,2)
D1133=term1*ET(1,3)
D2233=term1*ET(2,3)
D3333=term1*ET(3,3)
D2211=D1122
D3311=D1133
D3322=D2233
C
C write(6,*)aj,twothirds,xpow
C
C write(6,*)NOEL,E11
C Strain Energy Density Function
UA(1)=U
U=half*C*(exp((A_1*(E11)**2)+(A_2*(E22)**2)
* +(two*A_3*E11*E22)+(A_4*(E12)**2)
* +(two*A_5*E12*E11)+(two*A_6*E12*E22))-1)
C
C UA(2)=not needed
C
C let z1 - z3 be the derivative of the u substition of the first derivative.
C i.e z1 wrt to E11 z2 wrt E22 etc
z1=two*A_1*E11+two*A_3*E22+two*A_5*E12
z2=two*A_2*E22+two*A_3*E11+two*A_6*E12
z3=two*A_4*E12+two*A_5*E11+two*A_6*E22
C
dUde11=half*C*(exp((A_1*(E11)**2)+(A_2*(E22)**2)
* +(two*A_3*E11*E22)+(A_4*(E12)**2)
* +(two*A_5*E12*E11)+(two*A_6*E12*E22))*(z1))
dUde22=half*C*(exp((A_1*(E11)**2)+(A_2*(E22)**2)
* +(two*A_3*E11*E22)+(A_4*(E12)**2)
* +(two*A_5*E12*E11)+(two*A_6*E12*E22))*(z2))
dUde33=zero
dUde12=half*C*(exp((A_1*(E11)**2)+(A_2*(E22)**2)
* +(two*A_3*E11*E22)+(A_4*(E12)**2)
* +(two*A_5*E12*E11)+(two*A_6*E12*E22))*(z3))
dUde13=zero
dUde23=zero
dUdeJ=zero
C
dUde11=du1(1)
dUde22=du1(2)
dUde33=du1(3)
dUde12=du1(4)
dUde13=du1(5)
dUde23=du1(6)
dUdeJ =du1(7)
C Second derivatives with respect to modified green strain tensors
C du2(X)
d2Ude11de11=dUde11*z1
d2Ude11de22=dUde11*z2
d2Ude22de22=dUde22*z2
d2Ude11de12=dUde11*z3
d2Ude22de12=dUde22*z3
d2Ude12de12=dUde12*z3
C
du2(indx(1,1)) = d2Ude11de11
du2(indx(1,2)) = d2Ude11de22
du2(indx(2,2)) = d2Ude22de22
du2(indx(1,3)) = zero
du2(indx(2,3)) = zero
du2(indx(3,3)) = zero
du2(indx(1,4)) = d2Ude11de12
du2(indx(2,4)) = d2Ude22de12
du2(indx(3,4)) = zero
du2(indx(4,4)) = d2Ude12de12
du2(indx(1,5)) = zero
du2(indx(2,5)) = zero
du2(indx(3,5)) = zero
du2(indx(4,5)) = zero
du2(indx(5,5)) = zero
return
end
* Maps index from Square to Triangular storage
* of symmetric matrix
*
integer function indx(i,j)
*
include 'aba_param.inc'
C write(6,*)'in'
*
ii = min(i,j)
jj = max(i,j)
*
indx = ii + jj*(jj-1)/2
C write(6,*)'out'
*
return
Thanks Guys
First time poster here. Im writing a UMAT to implement the fung elastic model into abaqus. The equation is U=c/2(e^^Q -1) and Q is int terms of the material coefficients of the strain components Eij.
Im using the UANISOHYPER Strain in abaqus, and what i need to define is U - the strain energy density function, UA(1)- Derivatives of strain energy potential with respect to the components of the modified Green strain tensor, UA(2)-2nd Derivatives of strain energy potential with respect to the components of the modified Green strain tensor.
Im modelling an incompressible soft tissue so the third derivative and the derivatives with respect to J ( volume ratio) are ignored.
I'm running a very simple job, 1 element, fixed at one end and being pulled at the opposite end. The umat compiles properly but i get an unexpected error 193 running the job. I have attached the UMAT if anyone has any experience writing something similar. Any help guys would be greatly appreciated.
SUBROUTINE UANISOHYPER_STRAIN (EBAR, AJ, UA, DU1, DU2, DU3,
1 TEMP, NOEL, CMNAME, INCMPFLAG, IHYBFLAG, NDI, NSHR, NTENS,
2 NUMSTATEV, STATEV, NUMFIELDV, FIELDV, FIELDVINC,
3 NUMPROPS, PROPS)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION EBAR(NTENS), UA(2), DU1(NTENS+1),
2 DU2((NTENS+1)*(NTENS+2)/2),
3 DU3((NTENS+1)*(NTENS+2)/2),
4 STATEV(NUMSTATEV), FIELDV(NUMFIELDV),
5 FIELDVINC(NUMFIELDV), PROPS(NUMPROPS)
C
DIMENSION D(3,3)
DIMENSION ET(3,3)
C where ET = elasticity tensor and D = term1*ET
CHARACTER*80 FUNG_HYPERELASTIC
C User Code to define
C
C UA(1)=Strain energy density function
C UA(2)=The deviatoric part of the strain energy desnity function
C DU1(NTENS+1)=Derivatives of the strain enery potential wrt to modified green strain
C DU2=Second Derivatives of the strain enery potential wrt to modified green strain
C Parameters
C PROPS(X) = Used to determine constant value and location in Abaqus
C Material Property Interface
zero = 0.d0
half = 0.5d0
one = 1.d0
two = 2.d0
twothirds = 2.d0/3.d0
fourthirds = 4.d0/3.d0
oneninth = 1.d0/9.d0
twoninths = 2.d0/9.d0
fourninths = 4.d0/9.d0
print*, 'in'
C Constants
C=PROPS(1)
A_1=PROPS(2)
A_2=PROPS(3)
A_3=PROPS(4)
A_4=PROPS(5)
A_5=PROPS(6)
A_6=PROPS(7)
C converting Green strain to modified green strain
C xpow= j**2/3= determination of deformation gradient (volume ratio)
xpow=exp(log(aj)*twothirds)
E11 = xpow * ebar(1) + half * ( xpow - one )
E22 = xpow * ebar(2) + half * ( xpow - one )
E33 = xpow * ebar(3) + half * ( xpow - one )
E12 = xpow * ebar(4)
E13 = xpow * ebar(5)
E23 = xpow * ebar(6)
C term 1 is c/2*expQ and term2 is expQ
term1=half*C*(exp((A_1*(E11)**2)+(A_2*(E22)**2)
* +(two*A_3*E11*E22)+(A_4*(E12)**2)
* +(two*A_5*E12*E11)+(two*A_6*E12*E22)))
term2=(exp((A_1*(E11)**2)+(A_2*(E22)**2)
* +(two*A_3*E11*E22)+(A_4*(E12)**2)
* +(two*A_5*E12*E11)+(two*A_6*E12*E22)))
C let z1 - z3 be the derivative of the u substition of the first derivative.
C i.e z1 wrt to E11 z2 wrt E22 etc
z1=two*A_1*E11+two*A_3*E22+two*A_5*E12
z2=two*A_2*E22+two*A_3*E11+two*A_6*E12
z3=two*A_4*E12+two*A_5*E11+two*A_6*E22
C
ET(1,1)=2*A_1+(z1**2)
ET(1,2)=2*A_3+(z1*z2)
ET(2,2)=2*A_2+(z2**2)
ET(1,3)=2*A_5+(z1*z2)
ET(2,3)=2*A_6+(z2*z3)
ET(3,3)=2*A_4+(z3**2)
C Symmetry
ET(2,1)=ET(1,2)
ET(3,1)=ET(1,3)
ET(3,2)=ET(2,3)
C
D1111=term1*ET(1,1)
D1122=term1*ET(1,2)
D2222=term1*ET(2,2)
D1133=term1*ET(1,3)
D2233=term1*ET(2,3)
D3333=term1*ET(3,3)
D2211=D1122
D3311=D1133
D3322=D2233
C
C write(6,*)aj,twothirds,xpow
C
C write(6,*)NOEL,E11
C Strain Energy Density Function
UA(1)=U
U=half*C*(exp((A_1*(E11)**2)+(A_2*(E22)**2)
* +(two*A_3*E11*E22)+(A_4*(E12)**2)
* +(two*A_5*E12*E11)+(two*A_6*E12*E22))-1)
C
C UA(2)=not needed
C
C let z1 - z3 be the derivative of the u substition of the first derivative.
C i.e z1 wrt to E11 z2 wrt E22 etc
z1=two*A_1*E11+two*A_3*E22+two*A_5*E12
z2=two*A_2*E22+two*A_3*E11+two*A_6*E12
z3=two*A_4*E12+two*A_5*E11+two*A_6*E22
C
dUde11=half*C*(exp((A_1*(E11)**2)+(A_2*(E22)**2)
* +(two*A_3*E11*E22)+(A_4*(E12)**2)
* +(two*A_5*E12*E11)+(two*A_6*E12*E22))*(z1))
dUde22=half*C*(exp((A_1*(E11)**2)+(A_2*(E22)**2)
* +(two*A_3*E11*E22)+(A_4*(E12)**2)
* +(two*A_5*E12*E11)+(two*A_6*E12*E22))*(z2))
dUde33=zero
dUde12=half*C*(exp((A_1*(E11)**2)+(A_2*(E22)**2)
* +(two*A_3*E11*E22)+(A_4*(E12)**2)
* +(two*A_5*E12*E11)+(two*A_6*E12*E22))*(z3))
dUde13=zero
dUde23=zero
dUdeJ=zero
C
dUde11=du1(1)
dUde22=du1(2)
dUde33=du1(3)
dUde12=du1(4)
dUde13=du1(5)
dUde23=du1(6)
dUdeJ =du1(7)
C Second derivatives with respect to modified green strain tensors
C du2(X)
d2Ude11de11=dUde11*z1
d2Ude11de22=dUde11*z2
d2Ude22de22=dUde22*z2
d2Ude11de12=dUde11*z3
d2Ude22de12=dUde22*z3
d2Ude12de12=dUde12*z3
C
du2(indx(1,1)) = d2Ude11de11
du2(indx(1,2)) = d2Ude11de22
du2(indx(2,2)) = d2Ude22de22
du2(indx(1,3)) = zero
du2(indx(2,3)) = zero
du2(indx(3,3)) = zero
du2(indx(1,4)) = d2Ude11de12
du2(indx(2,4)) = d2Ude22de12
du2(indx(3,4)) = zero
du2(indx(4,4)) = d2Ude12de12
du2(indx(1,5)) = zero
du2(indx(2,5)) = zero
du2(indx(3,5)) = zero
du2(indx(4,5)) = zero
du2(indx(5,5)) = zero
return
end
* Maps index from Square to Triangular storage
* of symmetric matrix
*
integer function indx(i,j)
*
include 'aba_param.inc'
C write(6,*)'in'
*
ii = min(i,j)
jj = max(i,j)
*
indx = ii + jj*(jj-1)/2
C write(6,*)'out'
*
return
Thanks Guys