Products: Abaqus/Standard Abaqus/Explicit
Several different utility routines are available to provide detailed information about your parallel 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 domain-parallel run. VGETNUMCPUS provides the number of processes used for the parallel run.
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 User's 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 User's Guide).
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.
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.
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.
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.