<!-- source-page: 621 -->

# 2.1.9 OBTAINING NODE POINT INFORMATION

Product: Abaqus/Standard

# References

• “UMESHMOTION,” Section 1.1.46   
• “Erosion of material (sand production) in an oil wellbore,” Section 1.1.22 of the Abaqus Example Problems Guide

# Overview

Utility routine GETVRN can be called from user subroutine UMESHMOTION to access node point information.

# Interface

```txt
DIMENSION ARRAY(15), JGVBLOCK(*)
...
CALL GETVRN(NODE, 'VAR', ARRAY, JRCD, JGVBLOCK, LTRN) 
```

# Variables to be provided to the utility routine

# NODE

Node number.

# VAR

Output variable key from the table in “Abaqus/Standard output variable identifiers,” Section 4.2.1 of the Abaqus Analysis User’s Guide. The applicable keys are listed in the output table as being available for results file output at nodes; e.g., U for displacement.

# JGVBLOCK

Variable that must be passed into the GETVRN utility routine. The variable is available in user subroutine UMESHMOTION for this purpose.

# LTRN

Variable indicating the coordinate system the nodal quantity is to be returned in. A value of 0 specifies that the results are to be returned in the global coordinate system, regardless of any transformation applied at the node. A value of 1 specifies that the results are to be returned in the local transformed system.

<!-- source-page: 622 -->

# Variables returned from the utility routine

# ARRAY

Real array containing individual components of the output variable.

# JRCD

Return code (0 – no error, 1 – output request error or all components of output request are zero).

# Available output variable keys

Only nodal output variable keys that are valid for results file output in the current step are available for use with GETVRN. In general, if a key corresponds to a collective output variable, rather than an individual component, it can be used with GETVRN. For example, U for displacement can be used, whereas any individual component of displacement, say U1, cannot be used. The collective output variable keys are distinguished from their individual components by the fact that they have a bullet ( ) in the .fil column in the tables in “Abaqus/Standard output variable identifiers,” Section 4.2.1 of the Abaqus Analysis User’s Guide.

You will be returned ARRAY, which corresponds to the real-valued components associated with the request VAR. If any array component is not applicable for a given request, its value will be returned as the initialized value: 0.0. The error flag JRCD=1 is returned from GETVRN any time a request key is not recognized, the request is not valid (such as requesting pore pressure for a node not associated with a pore pressure or acoustic element, or requesting a variable not available for the current procedure), or all of the output components requested are zero; otherwise, JRCD=0.

# Ordering of returned components

The components for a vector request are returned in positions 1, 2, 3, etc.

# Analysis time for which values are returned

GETVRN returns values at the end of the current increment.

<!-- source-page: 623 -->

# 2.1.10 OBTAINING NODE TO ELEMENT CONNECTIVITY

Product: Abaqus/Standard

# References

• “UMESHMOTION,” Section 1.1.46   
• “Obtaining material point information averaged at a node,” Section 2.1.8   
• “Erosion of material (sand production) in an oil wellbore,” Section 1.1.22 of the Abaqus Example Problems Guide

# Overview

Utility routine GETNODETOELEMCONN can be called from user subroutine UMESHMOTION to retrieve a list of elements connected to a specified node.

# Interface

```txt
PARAMETER ( MAXNELEMS = 100 )
DIMENSION JELEMLIST(MAXNELEMS), JELEMTYPE(MAXNELEMS), JGVBLOCK(*)
...
NELEMS = MAXNELEMS
CALL GETNODETOELEMCORN(NODE, NELEMS, JELEMLIST, JELEMTYPE, JRCD, JGVBLOCK) 
```

# Variables to be provided to the utility routine

# NODE

User node number.

# NELEMS

You must set NELEMS to the maximum allowable length of the JELEMLIST and JELEMTYPE arrays. This value corresponds to the maximum expected number of elements attached to an adaptive mesh constraint node in your model. GETNODETOELEMCONN will assume that your JELEMLIST and JELEMTYPE arrays are NELEMS long. In the event that the actual element connectivity exceeds NELEMS, no result will be returned and the return code JRCD will indicate an error. An NELEMS value of 100 is typically more than adequate for common meshes. NELEMS is modified by GETNODETOELEMCONN and should not be a Fortran parameter-statement constant.

# JGVBLOCK

Variable that must be passed into the GETNODETOELEMCONN utility routine. This variable is available in user subroutine UMESHMOTION for this purpose.

<!-- source-page: 624 -->

# Variables returned from the utility routine

# JELEMLIST

Array of element numbers for elements connected to NODE. The list will contain elements only in adaptive mesh domains active in the step as well as any contact elements associated with the domain. The number of entries in this array corresponds to the returned value of NELEMS.

# JELEMTYPE

Array of element type designators describing the element types corresponding to each element entry in JELEMLIST. The number of entries in this array corresponds to the returned value of NELEMS.

JELEMTYPE entries:

1 indicates a solid element.

2 indicates a contact element.

# NELEMS

Actual length of the JELEMLIST and JELEMTYPE arrays.

# JRCD

Return code (0 indicates no error, 1 indicates an output request error). An output request error indicates either that the requested variable is not available or that your NELEMS parameter setting is smaller than the element connectivity list at this node.

<!-- source-page: 625 -->

# 2.1.11 OBTAINING STRESS INVARIANTS, PRINCIPAL STRESS/STRAIN VALUES AND DIRECTIONS, AND ROTATING TENSORS IN AN Abaqus/Standard ANALYSIS

Product: Abaqus/Standard

# References

• “UMAT,” Section 1.1.44   
• “Calculation of principal stresses and strains and their directions: FPRIN,” Section 15.1.3 of the Abaqus Example Problems Guide

# Overview

Utility routines are available for calculating stress invariants, principal stress/strain values, and principal stress/strain directions from the relevant tensors, as well as for transforming tensors to a new basis.

These utility routines are available for Abaqus/Standard user subroutines that store stress and strain components according to the convention presented in “Conventions,” Section 1.2.2 of the Abaqus Analysis User’s Guide. They are most commonly called from user subroutine UMAT.

SINV (calculate stress invariants)

# Interface

CALL SINV(STRESS,SINV1,SINV2,NDI,NSHR)

# Variables to be provided to the utility routine

# STRESS

A stress tensor.

# NDI

Number of direct components.

# NSHR

Number of shear components.

# Variables returned from the utility routine

# SINV1

First invariant.

$$
\operatorname{SINV1} = \frac {1}{3} \operatorname{trace} \sigma ,
$$

<!-- source-page: 626 -->

where is the stress tensor.

# SINV2

Second invariant.

$$
\mathrm{SINV2} = \sqrt {\frac {3}{2} \mathbf {S} : \mathbf {S}},
$$

where is the deviatoric stress tensor, defined as

$$
\mathbf {S} = \sigma - \frac {1}{3} \operatorname{trace} \sigma \mathbf {I}.
$$

# SPRINC (calculate principal values)

# Interface

CALL SPRINC(S,PS,LSTR,NDI,NSHR)

# Variables to be provided to the utility routine

S

Stress or strain tensor.

LSTR

An identifier. LSTR=1 indicates that S contains stresses; LSTR=2 indicates that S contains strains.

NDI

Number of direct components.

NSHR

Number of shear components.

# Variables returned from the utility routine

PS(I), I=1,2,3

The three principal values.

# SPRIND (calculate principal values and directions)

# Interface

CALL SPRIND(S,PS,AN,LSTR,NDI,NSHR)

<!-- source-page: 627 -->

Variables to be provided to the utility routine   
```txt
S
A stress or a strain tensor.
LSTR
An identifier. LSTR=1 indicates that S contains stresses; LSTR=2 indicates that S contains strains. 
```

```txt
NDI Number of direct components. 
```

```txt
NSHR Number of shear components. 
```

Variables returned from the utility routine   
```txt
PS(I), I=1,2,3
The three principal values.
AN(K1,I), I=1,2,3
The direction cosines of the principal directions corresponding to PS(K1). 
```  
ROTSIG (rotate a tensor)

Interface   
```csv
CALL ROTSIG(S,R,SPRIME,LSTR,NDI,NSHR)
```

Variables to be provided to the utility routine   
```txt
S
A stress or strain tensor.
NDI
Number of direct components. 
```

```txt
NSHR
Number of shear components. 
```

```txt
R Rotation matrix. 
```

```txt
LSTR
An identifier. LSTR = 1 indicates S contains stresses; LSTR = 2 indicates S contains strains. 
```

<!-- source-page: 628 -->

# Variable returned from the utility routine

# SPRIME

The rotated stress or strain tensor.

# Typical usage

In user subroutine UMAT it is often necessary to rotate tensors during a finite-strain analysis. The matrix DROT that is passed into UMAT represents the incremental rotation of the material basis system in which the stress and strain are stored. For an elastic-plastic material that hardens isotropically, the elastic and plastic strain tensors must be rotated to account for the evolution of the material directions. In this case S is the elastic or plastic strain tensor and R is the incremental rotation DROT.

<!-- source-page: 629 -->

# 2.1.12 OBTAINING PRINCIPAL STRESS/STRAIN VALUES AND DIRECTIONS IN AN Abaqus/Explicit ANALYSIS

Product: Abaqus/Explicit

# Reference

• “VUMAT,” Section 1.2.22

# Overview

Utility routines are available for calculating principal stress/strain values and principal stress/strain directions from the relevant tensors.

These utility routines are available for Abaqus/Explicit user subroutines that store stress and strain components according to the convention presented in “Conventions,” Section 1.2.2 of the Abaqus Analysis User’s Guide. They are most commonly called from user subroutine VUMAT.

VSPRINC (calculate principal values)

# Interface

call vsprinc( nblock, s, eigVal, ndir, nshr )

Variables to be provided to the utility routine

s(nblock,ndir+nshr)

Stress or strain symmetric tensor.

nblock

Number of material points to be processed in this call to VSPRINC.

ndir

Number of direct components in the symmetric tensor.

nshr

Number of shear components in the symmetric tensor.

Variable returned from the utility routine

eigVal(nblock,I), I=1,2,3

The three principal values.

<!-- source-page: 630 -->

# Interface

call vsprind( nblock, s, eigVal, eigVec, ndir, nshr )

# Variables to be provided to the utility routine

s(nblock,ndir+nshr)

Stress or strain symmetric tensor.

nblock

Number of material points to be processed in this call to VSPRIND.

ndir

Number of direct components in the symmetric tensor.

nshr

Number of shear components in the symmetric tensor.

# Variables returned from the utility routine

eigVal(nblock,I), I=1,2,3

The three principal values.

eigVec(nblock,I,K1), I=1,2,3

The direction cosines of the principal directions corresponding to eigVal(K1).
