.. _mpi_type_create_hindexed:

MPI_Type_create_hindexed
========================

.. include_body

:ref:`MPI_Type_create_hindexed` |mdash| Creates an indexed datatype with offsets in bytes.

.. The following file was automatically generated
.. include:: ./bindings/mpi_type_create_hindexed.rst

INPUT PARAMETERS
----------------
* ``count``: Number of blocks |mdash| also number of entries in array_of_displacements and array_of_blocklengths (integer).
* ``array_of_blocklengths``: Number of elements in each block (array of nonnegative integers).
* ``array_of_displacements``: Byte displacement of each block (C: array of *MPI_Aint*, Fortran: array of integer).
* ``oldtype``: Old datatype (handle).

OUTPUT PARAMETERS
-----------------
* ``newtype``: New datatype (handle).
* ``ierror``: Fortran only: Error status (integer).

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

The function is identical to :ref:`MPI_Type_indexed`, except that block
displacements in ``array_of_displacements`` are specified in bytes, rather
than in multiples of the ``oldtype`` extent.

Assume that oldtype has type map

::

       {(type(0), disp(0)), ..., (type(n-1), disp(n-1))},

with extent ex. Let B be the ``array_of_blocklength`` argument and D be the
``array_of_displacements`` argument. The newly created datatype has

::

   n x S^count-1
       (i=0)        B[i]  entries:

     {(type(0), disp(0) + D[0]),...,(type(n-1), disp(n-1) + D[0]),...,
     (type(0), disp(0) + (D[0] + B[0]-1)* ex),...,
     type(n-1), disp(n-1) + (D[0]+ B[0]-1)* ex),...,
     (type(0), disp(0) + D[count-1]),...,(type(n-1), disp(n-1) + D[count-1]),...,
     (type(0), disp(0) +  D[count-1] + (B[count-1] -1)* ex),...,
     (type(n-1), disp(n-1) + D[count-1] + (B[count-1] -1)* ex)}


ERRORS
------

.. include:: ./ERRORS.rst

.. seealso::
   * :ref:`MPI_Type_create_struct`
   * :ref:`MPI_Type_create_hvector`
   * :ref:`MPI_Type_indexed`
