.. _mpi_session_init:

MPI_Session_init
================

.. include_body

:ref:`MPI_Session_init` |mdash| Creates a new session handle

SYNTAX
------

C Syntax
^^^^^^^^

.. code-block:: c

   #include <mpi.h>

   int MPI_Session_init(MPI_Info info, MPI_Errhandler errhandler, MPI_Session *session)

Fortran Syntax
^^^^^^^^^^^^^^

.. code-block:: fortran

   USE MPI
   ! or the older form: INCLUDE 'mpif.h'

   MPI_SESSION_INIT(INFO, ERRHANDLER, SESSION, IERROR)
       INTEGER INFO, ERRHANDLER, SESSION, IERROR

Fortran 2008 Syntax
^^^^^^^^^^^^^^^^^^^

.. code-block:: fortran

   USE mpi_f08

   MPI_Session_init(info, errhandler, session, ierror)
       TYPE(MPI_Info), INTENT(IN) :: info
       TYPE(MPI_Errhandler), INTENT(IN) :: errhandler
       TYPE(MPI_Session), INTENT(OUT) :: session
       INTEGER, OPTIONAL, INTENT(OUT) :: ierror

INPUT PARAMETERS
----------------

* ``info`` : info object (handle)
* ``errhandler`` : error handler to be attached to the returned session
   (handle)

OUTPUT PARAMETERS
-----------------

* ``session`` : New session (handle).
* ``ierror`` : Fortran only: Error status (integer).

DESCRIPTION
-----------

:ref:`MPI_Session_init` is used to instantiate an MPI Session. The
returned session handle can be used to query the runtime system about
characteristics of the job within which the process is running, as
well as other system resources.  Other MPI communications can also be
initiated in the context of an MPI session handle.  All sessions must
be finalized via :ref:`MPI_Session_finalize` before the MPI process
terminates.

Multiple sessions can be created and destroyed during the lifetime of
an MPI process.  This is different than MPI world model, which can be
initialized at most exactly once (and then subsequently finalized)
during the lifetime of an MPI process.


NOTES
-----

The *info* argument is used to request MPI functionality requirements
and possible MPI implementation specific capabilities.

The *errhandler* argument specifies an error handler to invoke in the
event that the Session instantiation call encounters an error.

ERRORS
------

.. include:: ./ERRORS.rst

.. seealso::
   * :ref:`MPI_Init`
   * :ref:`MPI_Initialized`
   * :ref:`MPI_Init_thread`
   * :ref:`MPI_Finalize`
   * :ref:`MPI_Finalized`
   * :ref:`MPI_Group_from_session_pset`
   * :ref:`MPI_Session_c2f`
   * :ref:`MPI_Session_call_errhandler`
   * :ref:`MPI_Session_create_errhandler`
   * :ref:`MPI_Session_f2c`
   * :ref:`MPI_Session_finalize`
   * :ref:`MPI_Session_get_errhandler`
   * :ref:`MPI_Session_get_info`
   * :ref:`MPI_Session_get_nth_pset`
   * :ref:`MPI_Session_get_num_psets`
   * :ref:`MPI_Session_get_pset_info`
   * :ref:`MPI_Session_init`
   * :ref:`MPI_Session_set_errhandler`
   * :ref:`MPI_T_pvar_session_create`
   * :ref:`MPI_T_pvar_session_free`
