<!-- source-page: 591 -->

```txt
const double* xc, const double* yc, const double* zc, double amp, double totalTime, double stepTime, const char* surfaceName, double* bcvals)
{
    int i;
    if (direction == 2) {
    for (i = 0; i < nfacets; i++) {
    bcvals[i] = 1.0 - xc[i] * xc[i] / 100.0;
    }
    }
} 
```

<!-- source-page: 592 -->

<!-- source-page: 593 -->

# 2. Utility Routines

• “Utility routines,” Section 2.1

<!-- source-page: 594 -->

<!-- source-page: 595 -->

# 2.1 Utility routines

• “Obtaining Abaqus environment variables,” Section 2.1.1   
• “Obtaining the Abaqus job name,” Section 2.1.2   
• “Obtaining the Abaqus output directory name,” Section 2.1.3   
• “Obtaining parallel processes information,” Section 2.1.4   
• “Obtaining part information,” Section 2.1.5   
• “Obtaining material point information in an Abaqus/Standard analysis,” Section 2.1.6   
• “Obtaining material point information in an Abaqus/Explicit analysis,” Section 2.1.7   
• “Obtaining material point information averaged at a node,” Section 2.1.8   
• “Obtaining node point information,” Section 2.1.9   
• “Obtaining node to element connectivity,” Section 2.1.10   
• “Obtaining stress invariants, principal stress/strain values and directions, and rotating tensors in an Abaqus/Standard analysis,” Section 2.1.11   
• “Obtaining principal stress/strain values and directions in an Abaqus/Explicit analysis,” Section 2.1.12   
• “Obtaining wave kinematic data in an Abaqus/Aqua analysis,” Section 2.1.13   
• “Printing messages to the message or status file,” Section 2.1.14   
• “Terminating an analysis,” Section 2.1.15   
• “Obtaining sensor information,” Section 2.1.16   
• “Accessing Abaqus materials,” Section 2.1.17   
• “Accessing Abaqus thermal materials,” Section 2.1.18   
• “Obtaining scalar state information in an Abaqus/CFD analysis,” Section 2.1.19   
• “Obtaining vector state information in an Abaqus/CFD analysis,” Section 2.1.20   
• “Obtaining the MPI communicator in an Abaqus/CFD analysis,” Section 2.1.21   
• “Ensuring thread safety,” Section 2.1.22   
• “Allocatable arrays,” Section 2.1.23

<!-- source-page: 596 -->

<!-- source-page: 597 -->

# 2.1.1 OBTAINING Abaqus ENVIRONMENT VARIABLES

Products: Abaqus/Standard Abaqus/Explicit

# References

• “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis User’s Guide   
• “Using the Abaqus environment settings,” Section 3.3.1 of the Abaqus Analysis User’s Guide   
• “UWAVE and UEXTERNALDB,” Section 4.1.27 of the Abaqus Verification Guide

# Overview

Utility routines GETENVVAR and VGETENVVAR can be called from any Abaqus/Standard or Abaqus/Explicit user subroutine, respectively, to obtain the value of an environment variable.

# Interface

```txt
character*256 ENVVAR
...
CALL GETENVVAR('ENVVARNAME', ENVVAR, LENVVAR)
CALL VGETENVVAR('ENVVARNAME', ENVVAR, LENVVAR)
... 
```

# Variable to be provided to the utility routine

# ENVVARNAME

Environment variable name.

# Variables returned from the utility routine

# ENVVAR

Character string to receive the value of the environment variable.

# LENVVAR

Length of the character string ENVVAR.

<!-- source-page: 598 -->

<!-- source-page: 599 -->

# 2.1.2 OBTAINING THE Abaqus JOB NAME

Products: Abaqus/Standard Abaqus/Explicit

# References

• “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis User’s Guide   
• “UWAVE and UEXTERNALDB,” Section 4.1.27 of the Abaqus Verification Guide

# Overview

Utility routines GETJOBNAME and VGETJOBNAME can be called from any Abaqus/Standard or Abaqus/Explicit user subroutine, respectively, to obtain the name of the current job.

# Interface

```txt
character*256 JOBNAME
...
CALL GETJOBNAME( JOBNAME, LENJOBNAME )
CALL VGETJOBNAME( JOBNAME, LENJOBNAME )
... 
```

# Variables returned from the utility routine

# JOBNAME

Character string to receive the value of the job name.

# LENJOBNAME

Length of the character string JOBNAME.

<!-- source-page: 600 -->
