Files
AbaqusSubroutineDev/docs/AbaqusUserSubroutineManual/AbaqusUserSubroutineManual_061.md
T
2026-08-18 23:24:35 +09:00

12 KiB
Raw Blame History

2.1.3 OBTAINING THE Abaqus OUTPUT DIRECTORY NAME

Products: Abaqus/Standard Abaqus/Explicit

References

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

Overview

Utility routines GETOUTDIR and VGETOUTDIR can be called from any Abaqus/Standard or Abaqus/Explicit user subroutine, respectively, to obtain the output directory of the current job.

Interface

character*256 OUTDIR
...
CALL GETOUTDIR( OUTDIR, LENOUTDIR )
CALL VGETOUTDIR( OUTDIR, LENOUTDIR )
... 

Variables returned from the utility routine

OUTDIR

Character string to receive the value of the output directory name.

LENOUTDIR

Length of the character string OUTDIR.

2.1.4 OBTAINING PARALLEL PROCESSES INFORMATION

Products: Abaqus/Standard Abaqus/Explicit

References

• “Parallel execution: overview,” Section 3.5.1 of the Abaqus Analysis Users Guide
• “VUSDFLD,” Section 4.1.39 of the Abaqus Verification Guide

Overview

Several different utility routines are available to provide detailed information about your parallel processes.

GETNUMCPUS and VGETNUMCPUS (obtain the number of processes)

Utility routine GETNUMCPUS can be called from any Abaqus/Standard user subroutine. GETNUMCPUS returns the number of MPI processes.

Utility routine VGETNUMCPUS can be called from any Abaqus/Explicit user subroutine in a domainparallel run. VGETNUMCPUS provides the number of processes used for the parallel run.

Interface

CALL GETNUMCPUS( NUMPROCESSES )CALL VGETNUMCPUS( NUMPROCESSES ):·

Variable returned from the utility routine

NUMPROCESSES

Number of processes specified for the analysis.

GETRANK and VGETRANK (obtain the process number)

Utility routine GETRANK can be called from any Abaqus/Standard user subroutine. GETRANK returns the rank of the MPI process from which the function is called. For example, in a hybrid MPI and thread parallel execution scheme, multiple threads may all return the rank of their parent MPI process (see “Parallel execution in Abaqus/Standard,” Section 3.5.2 of the Abaqus Analysis Users Guide).

Utility routine VGETRANK can be called from any Abaqus/Explicit user subroutine in a domain-parallel run. VGETRANK provides the individual process rank (see “Parallel execution in Abaqus/Explicit,” Section 3.5.3 of the Abaqus Analysis Users Guide).

Interface

CALL GETRANK( KPROCESSNUM )
CALL VGETRANK( KPROCESSNUM )
... 

Variable returned from the utility routine

KPROCESSNUM

Process number or rank. A process number is either zero or a positive integer.

GETNUMTHREADS (obtain the number of threads)

Utility routine GETNUMTHREADS can be called from any Abaqus user subroutine. It returns the number of threads in a process. In a hybrid parallel execution mode, there will be several Abaqus MPI processes, each having several threads.

Interface

Fortran:
#include <SMAAspUserSubroutines.hdr>

integer numThreads
numThreads = GETNUMTHREADS()

C++:
#include <SMAAspUserSubroutines.h>

int numThreads = GETNUMTHREADS(); 

get_thread_id

You can determine the ID of the thread you are in by calling the utility function get_thread_id. The returned ID is an integer that Abaqus assigns to each of its threads. The main thread will have the ID=0, and each subsequent thread will have an ID of 1, 2, 3, 4, ..., N. This function can be called from any Abaqus user subroutine and from both the Fortran and C/C++ codes.

Interface

FOTRAN:
#include <SMAAspUserSubroutines.hdr>

INTEGER myThreadID

myThreadID = get_thread_id()

C++:
#include <SMAAspUserSubroutines.h>

int myThreadID = get_thread_id() 

Variable returned from the utility routine

thread_id

Current thread ID, an integer.

GETCOMMUNICATOR (Fortran)

Utility function GETCOMMUNICATOR can be called from any Abaqus user subroutine. GETCOMMUNICATOR returns a communicator that Abaqus defines for its worker processes, similar to MPI_COMM_WORLD. In Fortran its type is an INTEGER. The communicator thus obtained can be used for subsequent MPI communication routines. In a nonparallel run, when the MPI subsystem is not initialized, communicators do not exist and GET_COMMUNICATOR() will return 0. Another way of testing is to call the MPI_Initialized(flag) function. This function will set the flag to 1 if MPI has been initialized.

Interface

#include <SMAAspUserSubroutines.hdr>
integer ABA_COMM_WORLD 
ABA_COMM_WORLD = GETCOMMUNICATOR()
if (ABA_COMM_WORLD.ne.0) then
    ...do some parallel work, using MPI ...
else
    ...do some work in a single process ...
end if 

Variable returned from the utility routine

INTEGER

Communicator handle identifier of type INTEGER. In a non-MPI run, the value returned will be zero.

get_communicator (C++)

Utility function get_communicator can be called from any Abaqus user subroutine. get_communicator returns a communicator that Abaqus defines for its worker processes. In C++ this function is called get_communicator() and returns a value of the type MPI_Comm. The communicator thus obtained can be used for subsequent MPI communication routines. In a nonparallel run, when the MPI subsystem is not initialized, communicators do not exist and get_communicator() will return 0. Another way of testing is to call the MPI_Initialized(flag) function. This function will set the flag to 1 if MPI has been initialized.

Interface

#include <SMAAspUserSubroutines.h>

MPI_Comm ABA_COMM_WORLD = get_communicator()

if (ABA_COMM_WORLD) {
    ... do some parallel work, using MPI ...
}
else{
    ...do some work in a single process ...
} 

Variable returned from the utility routine

MPI_Comm

Communicator handle of type MPI_Comm. In a non-MPI run, the value returned will be zero.

2.1.5 OBTAINING PART INFORMATION

Products: Abaqus/Standard Abaqus/Explicit

References

• “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis Users Guide
• “Defining an assembly,” Section 2.10.1 of the Abaqus Analysis Users Guide
• “Pure bending of a cylinder: CAXA elements,” Section 1.3.33 of the Abaqus Verification Guide

Overview

Several utility routines are available to allow you to obtain information about your part instances.

Utility routines GETPARTINFO and VGETPARTINFO can be called from any Abaqus/Standard or Abaqus/Explicit user subroutine, respectively, to retrieve the part instance name and original node or element number corresponding to an internal node or element number. Utility routines GETINTERNAL and VGETINTERNAL can be called from any Abaqus/Standard or Abaqus/Explicit user subroutine, respectively, to retrieve the internal node or element number corresponding to a part instance name and original node or element number. The part file (jobname.prt) must be available. The expense of calling these routines is not trivial, so minimal use of them is recommended.

GETPARTINFO and VGETPARTINFO (obtain part instance information given global node/element number)

Interface

CHARACTER*80 CPNAME
...
CALL GETPARTINFO(INTNUM, JTYP, CPNAME, LOCNUM, JRCD)
or
CALL VGETPARTINFO(INTNUM, JTYP, CPNAME, LOCNUM, JRCD) 

Variables to be provided to the utility routine

INTNUM

The internal (global) node or element number to be looked up.

JTYP

An integer flag indicating whether INTNUM is a node or element number. Set JTYP=0 to look up a node number, and set JTYP=1 to look up an element number.

Variables returned from the utility routine

CPNAME

The name of the part instance that contains INTNUM. An empty part instance name indicates that the node or element is at the assembly level and is not included in any part instance.

LOCNUM

The part-local node or element number corresponding to INTNUM.

JRCD

Return code (0no error, 1error).

GETINTERNAL and VGETINTERNAL (obtain global node/element number given part instance information )

Interface

CHARACTER*80 CPNAME
...
CALL GETINTERNAL(CPNAME, LOCNUM, JTYP, INTNUM, JRCD)
or
CALL VGETINTERNAL(CPNAME, LOCNUM, JTYP, INTNUM, JRCD) 

Variables to be provided to the utility routine

CPNAME

The name of the part instance that contains LOCNUM.

LOCNUM

The part-local node or element number to be looked up.

JTYP

An integer flag indicating whether LOCNUM is a node or element number. Set JTYP=0 to look up a node number, and set JTYP=1 to look up an element number.

Variables returned from the utility routine

INTNUM

The internal (global) node or element number corresponding to LOCNUM in part instance CPNAME.

JRCD

Return code (0no error, 1error).

2.1.6 OBTAINING MATERIAL POINT INFORMATION IN AN Abaqus/Standard ANALYSIS

Product: Abaqus/Standard

References

• “UVARM,” Section 1.1.58
• “USDFLD,” Section 1.1.53
• “UDMGINI,” Section 1.1.26
• “Damage and failure of a laminated composite plate,” Section 1.1.14 of the Abaqus Example Problems Guide
• “USDFLD,” Section 4.1.24 of the Abaqus Verification Guide
• “UVARM,” Section 4.1.26 of the Abaqus Verification Guide

Overview

Utility routine GETVRM can be called from either user subroutine UVARM, UDMGINI, or USDFLD to access material integration point information.

Interface

DIMENSION ARRAY(15), JARRAY(15) CHARACTER*3 FLGRAY(15)

CALL GETVRM('VAR',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP,MATLAYO, LACCFLA)

Variables to be provided to the utility routine

VAR

Output variable key from the table in “Abaqus/Standard output variable identifiers,” Section 4.2.1 of the Abaqus Analysis Users Guide. The applicable keys are listed in the output table as being available for results file output at the element integration points; e.g., S for stress.

JMAC

Variable that must be passed into the GETVRM utility routine. The calling user subroutine provides this variable.

JMATYP

Variable that must be passed into the GETVRM utility routine. The calling user subroutine provides this variable.

MATLAYO

Variable that must be passed into the GETVRM utility routine. The calling user subroutine provides this variable.

LACCFLA

Variable that must be passed into the GETVRM utility routine. The calling user subroutine provides this variable.

Variables returned from the utility routine

ARRAY

Real array containing individual components of the output variable.

JARRAY

Integer array containing individual components of the output variable.

FLGRAY

Character array containing flags corresponding to the individual components. Flags will contain either YES, NO, or N/A (not applicable).

JRCD

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

Available output variable keys

Only output variable keys that are valid for results file output are available for use with GETVRM. In general, if a key corresponds to a collective output variable, rather than an individual component, it can be used with GETVRM. For example, S for the stress tensor can be used, whereas any individual component of stress, say S11, 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 Users Guide. Output variable keys that cannot be used with GETVRM are listed later in this section.

You will be returned ARRAY, JARRAY, and FLGRAY, which correspond to the real-valued components, integer-valued components, and the flags associated with the request VAR, respectively. If any array component is not applicable for a given request, its value will be returned as the initialized value: 0.0 in ARRAY, 0 in JARRAY, and N/A in FLGRAY. The error flag JRCD=1 is returned from GETVRM any time a request key is not recognized, the request is not valid (such as requesting transverse shear stress for a shell element that uses thin shell theory), or all of the output components requested are zero; otherwise, JRCD=0.

Ordering of returned components

The components for a request are written as follows. Single index components (and requests without components) are returned in positions 1, 2, 3, etc. Double index components are returned in the