Updating field variables
Two different methods are provided for updating field variables.
Individual variable updates
By default, only one field variable is updated at a time for given nodes or a given node set in user subroutine VUFIELD. The user subroutine is called whenever a current value of a field variable is needed for the nodes that are listed in the field variable definition. This method is ideal for cases in which the field variables are independent of each other.
Simultaneous variable updates
User subroutine VUFIELD can also be used to update multiple field variables simultaneously for given nodes or a given node set. This method is well-suited for cases in which there are dependencies between some of the field variables. In this case you must specify the number of field variables to be updated simultaneously, and the user subroutine will be called each time the field variable values are needed.
User subroutine interface
SUBROUTINE VUFIELD(FIELD, NBLOCK, NFIELD, KFIELD, NCOMP,
1 KSTEP, JFLAGS, JNODEID, TIME,
2 COORDS, U, V, A)
C
INCLUDE 'VABA_PARAM.INC'
C indices for the time array TIME
PARAMETER( i_ufld_Current = 1,
* i_ufld_Increment = 2,
* i_ufld_Period = 3,
* i_ufld_Total = 4 )
C indices for the coordinate array COORDS
PARAMETER( i_ufld_CoordX = 1,
* i_ufld_CoordY = 2,
* i_ufld_CoordZ = 3 )
C indices for the displacement array U
PARAMETER( i_ufld_SpaDisplX = 1,
* i_ufld_SpaDisplY = 2,
* i_ufld_SpaDisplZ = 3,
* i_ufld_RotDisplX = 4,
* i_ufld_RotDisplY = 5,
* i_ufld_RotDisplZ = 6,
* i_ufld_AcoPress = 7,
* i_ufld_Temp = 8 )
C indices for the velocity array V
PARAMETER( i_ufld_SpaVelX = 1,
* i_ufld_SpaVelY = 2,
* i_ufld_SpaVelZ = 3,
* i_ufld_RotVelX = 4,
* i_ufld_RotVelY = 5,
* i_ufld_RotVelZ = 6,
* i_ufld_DAcoPress = 7,
* i_ufld_DTemp = 8 )
C indices for the acceleration array A
PARAMETER( i_ufld_SpaAccelX = 1,
* i_ufld_SpaAccelY = 2,
* i_ufld_SpaAccelZ = 3,
* i_ufld_RotAccelX = 4,
* i_ufld_RotAccelY = 5,
* i_ufld_RotAccelZ = 6,
* i_ufld_DDAcoPress = 7,
* i_ufld_DDTemp = 8 )
C indices for JFLAGS
PARAMETER( i_ufld_kInc = 1,
* i_ufld_kPass = 2 )
C
DIMENSION FIELD(NBLOCK,NCOMP,NFIELD)
DIMENSION JFLAGS(2), JNODEID(NBLOCK), TIME(4),
* COORDS(3,NBLOCK)
DIMENSION U(8,NBLOCK), V(8,NBLOCK), A(8,NBLOCK)
C
user coding to define FIELD
RETURN
END
Variables to be defined
- FIELD(NBLOCK,NCOMP,NFIELD)
Array of field variable values at a collective number of nodes NBLOCK (see NBLOCK below). When updating one field variable at a time, only the value of the specified field variable KFIELD must be returned. In this case NFIELD is passed into user subroutine VUFIELD with a value of 1, and FIELD is thus dimensioned as FIELD(NBLOCK,NCOMP,1). When updating all field variables simultaneously, the values of the specified number of field variables must be returned. In this case FIELD is dimensioned as FIELD(NBLOCK,NCOMP,NFIELD), where NFIELD is the number of field variables specified and KFIELD, which is set to −1, has no meaning.
If fields are applied to nodes that are not part of pipe, beam, or shell elements, only one value of each field variable is required (NCOMP=1), and the user subroutine is invoked in a single pass. For nodes that are part of pipe, beam, or shell elements, VUFIELD is invoked in two passes per increment for these elements, and the number of values to be returned depends on the mode of temperature and field variable input selected for the beam or shell section. The following cases are possible:
Field variables are given as values at the points on the shell or beam section. For a beam section the number of values required is determined by the particular section type specified, as described in Beam cross-section library. For a shell section temperatures and field variables are given as values at n equally spaced points through each layer of a shell section. In the first pass NCOMP is passed in with the value of 1 to define the field variable values at the first point. The second pass is used to define field variables at the remaining points.
Field variables for the shell or beam section are given as values at the origin of the cross-section together with gradients along the cross-section. The number of gradient values required is 2 for three-dimensional beams, 1 for two-dimensional beams, and 1 for shells. In the first pass NCOMP is passed in with the value of 1 to define the field variable values at the origin of the cross-section. The gradients are defined in the second pass.
Because field variables can also be defined directly, it is important to understand the hierarchy used in situations with conflicting information (see Predefined Fields).
When the array FIELD is passed into user subroutine VUFIELD, it will contain either the field variable values from the previous increment or those values obtained from the results file if this method was used. You can then modify these values within this subroutine.
Variables passed in for information
- NBLOCK
User-specified number of nodes to be processed as a block in this call to VUFIELD. The value is equal to the total number of nodes given in a node set when blocking is disabled. When blocking is enabled, NBLOCK is equal to a predefined number set in Abaqus/Explicit. You can also modify NBLOCK by specifying a blocking size in the Abaqus/Explicit analysis.
- NFIELD
User-specified number of field variables to be updated. The default value is 1.
- KFIELD
User-specified field variable number. This variable is meaningful only when updating individual field variables at a time; otherwise, the value is set to −1.
- NCOMP
Maximum number of section values to be defined for any node in the model in the current pass. The first pass to user subroutine VUFIELD has NCOMP passed in with the value of 1.
- KSTEP
Current step number.
- JFLAGS(i_ufld_kInc)
Increment number for step KSTEP.
- JFLAGS(i_ufld_kPass)
This flag is equal to 1 for the first pass to user subroutine VUFIELD and is equal to 2 for the second pass.
- JNODEUID(NBLOCK)
Array for user-defined node numbers. This array is dimensioned based on the size of NBLOCK, and the contained node numbers are identical to those defined in the input file. You can perform additional interdependent field variable operations by using nodal indices stored in this array.
- TIME(4)
Array for information of analysis time. You can retrieve any time information from this array by using the parameters given above. TIME(i_ufld_Current) stores the current analysis time, TIME(i_ufld_Increment) gives the time increment at this instance, TIME(i_ufld_Period) is the time period of the current step, and TIME(i_ufld_Total) is the total analysis time up to this point. You can use this time information to perform possible time-dependent field variable operations.
- COORDS(3,NBLOCK)
Coordinates for nodes in the array JNODEUID. This array stores current coordinates of nodes in which the order of coordinates stored corresponds to the order of nodes listed in the array JNODEUID. The coordinates can be retrieved by using the parameters given above. You can make use of COORDS to define possible position-dependent field variable operations.
- U(8,NBLOCK), V(8,NBLOCK), and A(8,NBLOCK)
Arrays containing solution variables of displacements, rotations, temperatures, and pressures and their corresponding temporal derivatives. The order in which these solutions are stored follows the order defined in the array JNODEUID. For a specific node its solution variables can be retrieved by using the parameter indices given above. Depending on the degrees of freedom, some solution variables are not valid for a given node. The displacement values correspond to the current increment. However, the acceleration is from a configuration that is one increment behind, and the velocity is such that it is consistent with the displacement increment and the time increment between the two successive configurations.
|