Question about USDFLD(ABAQUS)
Question about USDFLD(ABAQUS)
(OP)
I wrote a USDFLD subroutine to change young's modulus based on the value of strain. I had the line field(1) = strain in order to relate field(1) to stain output. Part of the subroutine is at the end.
My first question:
What if I have more than one solution dependent properties? I would have to relate more field variable to solutions. How do I know which one is field(1), field(2)....field(n)?
for example, I want to make both specific heat and thermal expansion coefficient solution dependent. I would have to enter field variables for both of them in CAE. But in subroutine how do I know which one is field(1) and which one is field(2)? or does it work this way?
My 2nd Question:
If the young's modulus depending on the temperature history, what should I do. For example. when time is 1 the temperature is 30, and when time is 2, the temperature is 50. So now maturity is 30x1+50*1 = 80. What should I do, in order to make young's modulus depending on maturity?
c USER CODE START
c do it only for specific material
if (cmname .eq. 'MAT1') then
c get elastic strain (value EE) and save it into 'array'
call getvrm('EE',array,jarray,flgray,jrcd,jmac,jmatyp,
& matlayo,laccfla)
c EE11 output = array(1)
strain = abs(array(1))
c assign strain value to field variable
c Young modul (E) depend on field variable (FV1)
field(1) = strain
end if
c USER CODE END
My first question:
What if I have more than one solution dependent properties? I would have to relate more field variable to solutions. How do I know which one is field(1), field(2)....field(n)?
for example, I want to make both specific heat and thermal expansion coefficient solution dependent. I would have to enter field variables for both of them in CAE. But in subroutine how do I know which one is field(1) and which one is field(2)? or does it work this way?
My 2nd Question:
If the young's modulus depending on the temperature history, what should I do. For example. when time is 1 the temperature is 30, and when time is 2, the temperature is 50. So now maturity is 30x1+50*1 = 80. What should I do, in order to make young's modulus depending on maturity?
c USER CODE START
c do it only for specific material
if (cmname .eq. 'MAT1') then
c get elastic strain (value EE) and save it into 'array'
call getvrm('EE',array,jarray,flgray,jrcd,jmac,jmatyp,
& matlayo,laccfla)
c EE11 output = array(1)
strain = abs(array(1))
c assign strain value to field variable
c Young modul (E) depend on field variable (FV1)
field(1) = strain
end if
c USER CODE END





RE: Question about USDFLD(ABAQUS)
Please take a look for following material definition:
CODE
*DENSITY, DEPENDENCIES=3
** density, temp, FV1, FV2, FV3
7.50e-06, , 0.0, ,
7.85e-06, , 1.0, ,
7.95e-06, , 2.0, ,
*ELASTIC, DEPENDENCIES=3
** E, v, temp, FV1, FV2, FV3
190.0, 0.3, , , 0.0,
200.0, 0.3, , , 1.0,
210.0, 0.3, , , 2.0,
*SPECIFIC HEAT, DEPENDENCIES=3
** heat, temp, FV1, FV2, FV3
0.1, , , , 0.0
0.2, , , , 1.0
0.3, , , , 2.0
In the definition we are using three field variables (FV1, FV2, FV3).
FV1 controls density, FV2 controls Young module and FV3 controls specific heat.
In USDFLD subroutine the field variables will be passed always in the same order, it means:
field(1) = FV1, field(2) = FV2, field(3) = FV3
You have to use state-dependent variable to save current temperature and then read the value in next increment (time point). In USDFLD is STATEV array which can be use to do it.
Regards,
Bartosz
RE: Question about USDFLD(ABAQUS)