ProductsAbaqus/StandardAbaqus/Explicit 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 domain-parallel run. VGETNUMCPUS provides the number of processes used for the parallel run. Utility routine interfaceCALL GETNUMCPUS( NUMPROCESSES ) CALL VGETNUMCPUS( NUMPROCESSES ) ... Variables returned from the utility routine
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). 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). Utility routine interfaceCALL GETRANK( KPROCESSNUM ) CALL VGETRANK( KPROCESSNUM ) ... Variables returned from the utility routine
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. Utility routine interfaceFortran: #include <SMAAspUserSubroutines.hdr> integer numThreads numThreads = GETNUMTHREADS() C++: #include <SMAAspUserSubroutines.h> int numThreads = GETNUMTHREADS(); get_thread_idYou 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 routine interfaceFOTRAN: #include <SMAAspUserSubroutines.hdr> INTEGER myThreadID myThreadID = get_thread_id() C++: #include <SMAAspUserSubroutines.h> int myThreadID = get_thread_id() Variables returned from the utility routine
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. Utility routine 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 Variables returned from the utility routine
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. Utility routine 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 ... } Variables returned from the utility routine
|