*****
0.8.2
*****

Released 31 of March 2017.


Contributors
============

A total of 1 people contributed to this release.  People with a "+" by their
names contributed a patch for the first time.

* Nick Papior

Pull requests merged
====================

A total of 0 pull requests were merged for this release.


* Fixed reading _hr.dat from Wannier90, now the band-structure of
  SrTiO3 (Junquera's test example) is correct.

* Speeded up tbtrans.py analyzing methods enourmously by introducing
  faster sparse iterators. Now one can easily perform data-analysis on
  systems in excess of 10.000 atoms very fast.

* Added the TBT.AV.nc file which is meant to be created by `sisl` from
  the TBT.nc files (i.e. create the k-averaged output).
  This enables users to run tbtrans, create the k-averaged output, and
  then delete the old file to heavily reduce disk-usage.

  An example:

      tbtrans RUN.fdf > TBT.out
      sdata siesta.TBT.nc --tbt-av
      rm siesta.TBT.nc

  after this `siesta.TBT.AV.nc` exists will all k-averaged quantites.
  If one is not interested in k-resolved quantities this may be very interesting.

* Updated the TBT.nc sile for improved readability.

* Easier script data-extraction from TBT.nc files due to easier conversion
  between atomic indices and pivoting orbitals.

  For this:

  * a2p
    returns the pivoting indices for the given atoms (complete set)
  * o2p
    returns the pivoting indices for the given orbitals

  * Added `atom` keyword for retrieving DOS for a given set of atoms

  * `sdata` and `TBT.nc` files now enable the creation of the TBT.AV.nc file
    which is the k-averaged file of TBT.nc

* Faster bond-current algorithms (faster iterator)

* Initial template for TBT.Proj files for sdata processing

* Geometry:

  * Enabled multiplying geometries with integers to emulate `repeat` or
    `tile` functions:

        >>> geometry * 2 == geometry.tile(2, 0).tile(2, 1).tile(2, 2)
        >>> geometry * [2, 1, 2] == geometry.tile(2, 0).tile(2, 2)
        >>> geometry * [2, 2] == geometry.tile(2, 2)
        >>> geometry * ([2, 1, 2], 'repeat') == geometry.repeat(2, 0).repeat(2, 2)
        >>> geometry * ([2, 1, 2], 'r') == geometry.repeat(2, 0).repeat(2, 2)
        >>> geometry * ([2, 0], 'r') == geometry.repeat(2, 0)
        >>> geometry * ([2, 2], 'r') == geometry.repeat(2, 2)

    This may be considered an advanced feature but useful nonetheless.

  * Enabled "adding" geometries in a similar way as multiplication
    I.e. the following applies:

        >>> A + B == A.add(B)
        >>> A + (B, 1) == A.append(B, 1)
        >>> A + (B, 2) == A.append(B, 2)
        >>> (A, 1) + B == A.prepend(B, 1)

  * Added `origo` and `atom` argument to rotation functions. Previously this could be
    accomblished by:

        rotated = geometry.move(-origo).rotate(...).move(origo)

    while now it is:

        rotated = geometry.rotate(..., origo=origo)

    The origo argument may also be a single integer in which case the rotation
    is around atom `origo`.

    Lastly the `atom` argument enables only rotating a sub-set of atoms.

  * Geometry[..] is now calling axyz if `..` is pure indices, if it is
    a `slice` it does not work with super-cell indices

  * Added `rij` functions to the Geometry for retrieving distances
    between two atoms (`orij` for orbitals)

  * Renamed iter_linear to iter

  * Added argument to iter_species for only looping certain atomic indices

  * Added iter_orbitals which returns an iterator with atomic _and_ associated
    orbitals.
    The orbitals are with respect to the local orbital indices on the given atom

    ```
    >>> for ia, io in Geometry.iter_orbitals():
    >>>     Geometry.atom[ia].R[io]
    ```

    works, while

    ```
    >>> for ia, io in Geometry.iter_orbitals(local=False):
    >>>     Geometry.atom[ia].R[io]
    ```

    does not work because `io` is globally defined.

  * Changed argument name for `coords`, `atom` instead of the
    old `idx`.

  * Renamed function `axyzsc` to `axyz`

* SparseCSR:

  * Added `iter_nnz(i=None)` which loops on sparse elements connecting to
    row `i` (or default to loop on all rows and columns).

  * `ispmatrix` to iterate through a `scipy.sparse.*_matrix` (and the `SparseCSR`
    matrix).

* Hamiltonian:

  * Added `iter_nnz` which is the `Hamiltonian` equivalent of `SparseCSR.iter_nnz`.
    It enables explicit looping on atomic couplings, or orbital couplings.
    I.e. one may specify a subset of atoms or orbitals to loop over.

  * Preliminary implementation of the non-collinear spin-case. Needs testing.
