User login

Navigation

You are here

The issue of the computation of the deformation gradient in Abaqus

Hi everybody,

I am trying to model an anisotropic hyperelastic material in plane stress under uniaxial tension

where W=Wiso +Wani= C10*(I1-3)+C4*(I4-1)2 .

 When the load is parallel or perpendicular to the fiber direction, the deformation gradient returned by Abaqus matches the theoretical expression obtained after derivation of W. 

However, when the fiber direction is neither parallel nor perpendicular to the load, the deformation gradient returned by Abaqus differs

from the theoretically expected result.  I have spent some time reading up on how Abaqus computes the deformation gradient and it turns out not to be computed directly from the displacement. Indeed i noticed that when i look at the displacement field (Abaqus), the deformation gradient (Abaqus) does not even match. As expected, the deformed configuration looks like shear so we should have (F21=0 and F12 not equal to 0) and yet we have that both F12 and F21 are not equal to 0....What we see is not what we get in the outputs...

Unfortunaltely  i need accurate values of the deformation gradient (Abaqus) as i am imposing the principal strain parallel to the load via the traction at the boundary.  

For those who have worked on this issue (the deformation gradient in Abaqus), i would appreciate some articles, papers, remarks or comments about it. My topic might be redundant with previous topics as it brings up an issue that has been probably discussed many times in the past but still in the latest version of Abaqus the problem does not seem to be solved yet.

Moreover if someone knows how to retrieve the true deformation gradient in Abaqus, please just let me know how you processed.

Thanks,

 

Malik Ait-Bachir
PHS student
Ecole Centrale de Nantes

I cannot figure out the problem what you mean. As I know, however, the deformation gradient passed into subroutine UMAT is not  the deformation gradient defined in the continuum mechanics (F= dx / dX). As can be seen in the UMAT section in the manual, the returned deformation gradient is the modified deformation gradient based on the B-bar method to circumvent the locking problems. F_bar = F (J_bar / J)^(1/n) where J is the Jacobian at the integration point and J_bar is the volume-averaged Jacobian. Thus, I think that there are some difference of the value of the deformation gradient passed into the UMAT depending on the element type.

Matt Lewis's picture

 I have been struggling with my own hyperelastic model (UMAT) in ABAQUS, not using UHYPER because I have some terms that are Ogden-like.  The fact that we are getting F_bar instead of F might well be an answer to some of the convergence issues I have been seeing.  Now I need to hunt down the definition of J_bar.  Does anyone have a quick definition for the calculation of J_bar so that I can simply scale F_bar?

Matt Lewis
Los Alamos, New Mexico

J_bar = 1/V_e \int_{V_e} J dV_e

Actually that's not about convergence. My issue is quite different.

First of all let me tell you how i compute the deformation gradient. I wrote a UVARM subroutine in which i call the deformation gradient. Throughout the rest of this comment this is the deformation gradient i am refering to. You can see below what i a talking about:


        CALL GETVRM('DG',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP,
     1 MATLAYO,LACCFLA)

c    UVAR takes on the value of DG(i,j)
        UVAR(1) = ARRAY(1)
        UVAR(2) = ARRAY(2)
        UVAR(3) = ARRAY(3)
        UVAR(4) = ARRAY(4)
        UVAR(5) = ARRAY(5)
        UVAR(6) = ARRAY(6)
        UVAR(7) = ARRAY(7)
        UVAR(8) = ARRAY(8)
        UVAR(9) = ARRAY(9)

        DG(1,1) = UVAR(1)
        DG(2,2) = UVAR(2)
        DG(3,3) = UVAR(3)
        DG(1,2) = UVAR(4)
        DG(1,3) = UVAR(5)
        DG(2,3) = UVAR(6)
        DG(2,1) = UVAR(7)
        DG(3,1) = UVAR(8)
        DG(3,2) = UVAR(9)
.

.
......

What i am saying is that the deformation gradient computed by Abaqus returns unexpected values. I know that there is only one definition for the deformation gradient: F=dx/dX. However  it does not seem to be computed this way in Abaqus.

 Indeed, what they call the "deformation gradient" seems to be computed as the square root of the Right Cauchy-Green deformation tensor: U=sqrt(C). So what we measure is U instead of F??? Because when ou look at the displacement field on one hand and the deformation gradient on the other hand, they don't match (at least in the case of an anisotropic hyperelastic material under uniaxial tension).  

How to accurately compute the true deformation  gradient in Abaqus?

I am pretty sure that one of you already encoutered this problem before!

Thanks for your comments,

 

Malik

I agreed the additional comment of Mayeur. Check your element type. Furthermore, I wonder about the deformation gradient you want. You said that you are simulating a uniaxial tension test. Then, the  deformation gradient (at this time F = dx / dX) has a form: F = diag(1, 1, a) where a>1 if 3 is a loading direction. This gives the uniaxial Lagrangian strain: E = (1/2) (F^T F - G) ->  E3 = (a^2 - 1) /2 in the 3-direction. Thus, there are no off-diagonal components in the deformation gradient for uniaxial tension condition.I wonder why you expected non-zero off-diagonal term(F12)? 

 

Jason Mayeur's picture

Malik,

I believe your question may have been answered above by dubuking.  I'm not sure what version of Abaqus you're using, but this is from the v6.6 Documentation that I found online.

_______________________________________________________

4.2.1 ABAQUS/Standard output variable identifiers

DG

All
components of the total deformation gradient. Available only for
hyperelasticity, hyperfoam, and material models defined in user
subroutine UMAT.
For fully integrated first-order quadrilaterals and hexahedra, the
selectively reduced integration technique is used. A modified
deformation gradient is output for these elements.
.dat: yes    .fil: yes    .odb Field: no    .odb History: no   

_______________________________________________________

I assume that you're using a 4-noded plane stress element, i.e. a "fully integrated first-order quadrilateral".  Therefore, as pointed out above, what you get in your getvarm query is not F=dx/dX.  It is F_bar as defined in the earlier post.  Refer to the Abaqus Theory Manual > Elements > Continuum Elements > Solid Isoparametric Quadrilaterals and Hexahedra for further information on what Abaqus is passing you.

Jason

excuse,can you tell me how to handle the promble when i create an iteraction between two solid parts, and it cause the problem of hard to convergence.

the warning is:

***WARNING: A SLAVE SURFACE DEFINITION HAS BEEN DEFINED ON A FACE OF ELEMENT 1  THAT CONTAINS NO MIDFACE NODE.  THIS MAY LEAD TO CONVERGENCE DIFFICULTIES.   THE ELEMENT TYPE WILL BE CONVERTED AND A MIDFACE NODE GENERATED ATICALLY.  THE ELEMENT NUMBER WILL BE UNCHANGED.  SEE THE OUTPUT FROM THE PREPROCESSOR TO CONFIRM THE NEW ELEMENT AND NODE DEFINITIONS.  THIS MESSAGE WILL NOT BE REPEATED IF SUBSEQUENT ELEMENTS OF THIS SURFACE ARE CONVERTED

thanks

 I am very new to abaqus.........

I am using a subroutine (for the Complementary enery
density function Ω=A_1 I_1^2+A_2 I_2 ) as follows :--

SUBROUTINE UHYPER
(BI1,BI2,AJ,U,UI1,UI2,UI3,TEMP,NOEL,

1
CMNAME,INCMPFLAG,NUMSTATEV,STATEV,NUMFIELDV,FIELDV ,

2
FIELDVINC,NUMPROPS,PROPS)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80
CMNAME
DIMENSION U(2),UI1(3),UI2(6),UI3(6),STATEV(*),FIELDV(*),
2
FIELDVINC(*),PROPS(*) C

C10 = PROPS(1)

C01 = PROPS(2)

D1 =
PROPS(3) C

STATEV(1) = BI1

STATEV(2) = BI2 C

U =
C10*(STATEV(1)-3.)+C01*(STATEV(2)-3.)+((AJ-1.)**2)/D1

UI1(1) =
C10

UI1(2) = C01

UI1(3) = 2./D1*(AJ-1.)

UI2(1) =
0.

UI2(2) = 0.

UI2(3) = 2./D1

UI2(4) = 0.

UI2(5)
= 0.

UI2(6) = 0.

UI3(1) = 0.

UI3(2) = 0.

UI3(3)
= 0.

UI3(4) = 0.

UI3(5) = 0.

UI3(6) = 0.

RETURN

END

while running the job it is showing that the job is aborted
because of compilation error........ I am using ifort-compiler..........
Can
anyone please provide me a uhyper subroutine (of any complementary energy
function ) so that i can test whether am i making mistake in the subroutine
itself or not..........
Can you please say me how to pass the variables (e.g.
-- bi1,bi2,temp,noel,cname) while writing the subroutines ???????

Subscribe to Comments for "The issue of the computation of the deformation gradient in Abaqus"

Recent comments

More comments

Syndicate

Subscribe to Syndicate