9.2. User-Defined Field Variables

User-defined field variables (TBFIELD) are supported for the following material data tables:

Material Model TB,Lab Value
Creep CREEP
Mass density DENS
Elasticity ELASTIC
Extended Drucker-Prager EDP
Hyperelasticity HYPER
Nonlinear plasticity PLASTIC
Rate-dependent plasticity RATE
Hill PlasticityHILL
Thermal expansion CTE
Thermal properties THERM

Valid user-defined field variables are UF01 through UF09.

Use your field variables with initial state loading to define a field of material properties. When you define a field variable as node-based field data over the finite element model (INISTATE), the solver reads the initial-state data at the nodes and determines the correct value of the material property necessary for performing the finite element calculations. Initial state loading with user-defined variables defines material models as continuous functions over the models, thereby facilitating advanced modeling such as functionally-graded composite materials.

Nonlinear material models sometimes include both linear and nonlinear parameters in the equation. For example, in the equation Y = a * xb, a is a linear parameter and b is a nonlinear parameter. You might have values of a and b at two states, UF01 = T1 and UF01 = T3. It may not always be meaningful to interpolate values of b to obtain coefficients at an intermediate field variable value UF01 = T2. Maintain constant nonlinear parameter values at all states during the curve-fitting process for these material models.

The following example input shows how to define Young’s Modulus as a function of global Y using the elastic material model and the node-based initial state capability:

Example 9.1: Defining Young’s Modulus as Function of Global Y

TB,ELASTIC,1
TBFIELD,UF01,0.0
TBDATA,1,1e6,0.3
TBFIELD,UF01,1.0
TBDATA,1,1e7,0.3
 
! Define a UF01 field over the finite element model
INISTATE,SET,NODE,1
INISTATE,SET,DTYP,UF01
*GET,NumNodes,node,,num,max
*DO,iI,1,NumNodes
iExis=NSEL(iI)
*IF,iExis,eq,1,then
yval=NY(iI)
INISTATE,DEFINE,iI,,,,yval
*ENDIF
*ENDDO
 

9.2.1. Subroutine for Editing Field Variables

During the solution, you can edit any initialized user-defined field variables via the UserFld subroutine. Following is a description of the API:

! Routine to read current value
!
Call fldgetvar( variable type, curvalue )
Variable type can be any of the user field variables 1-10 and are names such as
FLD_USER_1_TYPE, FLD_USER_2_TYPE, … FLD_USER_9_TYPE
The current value of the field variable is returned in the double precision 
number curvalue
!
!
! Routine to update current value
!
Call fldsetvar( variable type, curvalue )
Variable type can be any of the user field variables 1-10 and are names such as 
FLD_USER_1_TYPE, FLD_USER_2_TYPE, … FLD_USER_9_TYPE
The current value of the field variable is set to the double precision 
number curvalue provided/newly calculated by the user

For more information, see Subroutine userfld (Update User-Defined Field Variables) in the Programmer's Reference

You can use any appropriate API subroutine in the Programmer's Reference to query and update the user-defined field variables.