Provided by: openmpi-doc_4.1.5-3ubuntu1_all bug

NAME

       MPI_Finalize  - Terminates MPI execution environment.

SYNTAX

C Syntax

       #include <mpi.h>
       int MPI_Finalize()

Fortran Syntax

       USE MPI
       ! or the older form: INCLUDE 'mpif.h'
       MPI_FINALIZE(IERROR)
            INTEGER   IERROR

Fortran 2008 Syntax

       USE mpi_f08
       MPI_Finalize(ierror)
            INTEGER, OPTIONAL, INTENT(OUT) :: ierror

C++ Syntax

       #include <mpi.h>
       void Finalize()

OUTPUT PARAMETER

       IERROR    Fortran only: Error status (integer).

DESCRIPTION

       This  routine  cleans  up all MPI states. Once this routine is called, no MPI routine (not
       even  MPI_Init)  may  be  called,  except  for   MPI_Get_version,   MPI_Initialized,   and
       MPI_Finalized. Unless there has been a call to MPI_Abort, you must ensure that all pending
       communications involving a process are complete before the process calls MPI_Finalize.  If
       the  call  returns,  each  process  may either continue local computations or exit without
       participating in further communication with other processes. At the moment when  the  last
       process  calls  MPI_Finalize,  all  pending  sends  must  be matched by a receive, and all
       pending receives must be matched by a send.

       MPI_Finalize is collective over all connected processes. If  no  processes  were  spawned,
       accepted,  or  connected, then this means it is collective over MPI_COMM_WORLD. Otherwise,
       it is collective over the union of all  processes  that  have  been  and  continue  to  be
       connected.

NOTES

       All  processes  must  call this routine before exiting. All processes will still exist but
       may not make any further  MPI  calls.  MPI_Finalize  guarantees  that  all  local  actions
       required  by communications the user has completed will, in fact, occur before it returns.
       However, MPI_Finalize guarantees nothing about pending communications that have  not  been
       completed;  completion is ensured only by MPI_Wait, MPI_Test, or MPI_Request_free combined
       with some other verification of completion.

       For example, a successful return from a blocking communication operation or from  MPI_Wait
       or  MPI_Test  means  that the communication is completed by the user and the buffer can be
       reused, but does not guarantee that the local process has no more work to do. Similarly, a
       successful  return  from  MPI_Request_free with a request handle generated by an MPI_Isend
       nullifies the handle but  does  not  guarantee  that  the  operation  has  completed.  The
       MPI_Isend is complete only when a matching receive has completed.

       If  you would like to cause actions to happen when a process finishes, attach an attribute
       to MPI_COMM_SELF with a callback function. Then, when  MPI_Finalize  is  called,  it  will
       first  execute  the  equivalent  of an MPI_Comm_free on MPI_COMM_SELF. This will cause the
       delete callback function to be executed on all keys associated with  MPI_COMM_SELF  in  an
       arbitrary  order.  If  no  key  has  been  attached  to MPI_COMM_SELF, then no callback is
       invoked. This freeing of MPI_COMM_SELF happens before any other parts of MPI are affected.
       Calling  MPI_Finalized  will  thus return "false" in any of these callback functions. Once
       you have done this with MPI_COMM_SELF, the results of MPI_Finalize are not specified.

ERRORS

       Almost all MPI routines return an error value; C routines as the value of the function and
       Fortran  routines in the last argument. C++ functions do not return errors. If the default
       error handler is set to MPI::ERRORS_THROW_EXCEPTIONS, then  on  error  the  C++  exception
       mechanism will be used to throw an MPI::Exception object.

       Before  the  error value is returned, the current MPI error handler is called. By default,
       this error handler aborts the MPI job, except for I/O function errors. The  error  handler
       may    be   changed   with   MPI_Comm_set_errhandler;   the   predefined   error   handler
       MPI_ERRORS_RETURN may be used to cause error values to be returned. Note that MPI does not
       guarantee that an MPI program can continue past an error.

SEE ALSO

       MPI_Init
       MPI_Init_thread
       MPI_Initialized
       MPI_Finalized