:mod:`kwant.solvers` -- Library of solvers ========================================== Overview -------- Kwant offers several modules for computing the solutions to quantum transport problems, the so-called solvers. Each of these solvers may use different internal algorithms and/or depend on different external libraries. If the libraries needed by one solver are not installed, trying to import it will raise an ``ImportError`` exception. The :doc:`Installation instructions <../pre/install>` list all the libraries that are required or can be used by Kwant and its solvers. :mod:`kwant.solvers.default` -- The default solver -------------------------------------------------- .. module:: kwant.solvers.default There is one solver, `kwant.solvers.default` that is always available. For each Kwant installation it combines the best functionality of the *available* solvers into a single module. We recommend to use it unless there are specific reasons to use another. The following functions are provided. .. autosummary:: :toctree: generated/ smatrix greens_function wave_function ldos ``smatrix`` returns an object of the following type: .. module:: kwant.solvers .. autosummary:: :toctree: generated/ kwant.solvers.common.SMatrix The analog of ``smatrix``, ``greens_function`` accordingly returns: .. autosummary:: :toctree: generated/ kwant.solvers.common.GreensFunction Being just a thin wrapper around other solvers, the default solver selectively imports their functionality. To find out the origin of any function in this module, use Python's ``help``. For example >>> help(kwant.solvers.default.ldos) Other solver modules -------------------- Unlike the default one, other solvers have to be imported manually. They provide, whenever possible, exactly the same interface as the default. Some allow for specific tuning that can improve performance. The differences to the default solver are listed in the documentation of each module. .. toctree:: :maxdepth: 1 kwant.solvers.sparse kwant.solvers.mumps For Kwant experts: detail of the internal structure of a solver --------------------------------------------------------------- Each solver module (except the default one) contains a class ``Solver`` (e.g. ``kwant.solvers.sparse.Solver``), that actually implements that solver's functionality. For each module-level function provided by the solver, there is a correspondent method in the ``Solver`` class. The module-level functions are simply the methods of a hidden ``Solver`` instance that is present in each solver module. The encapsulation in a class allows different solvers to easily share common code. It also makes it possible to use solvers with different options concurrently. Typically, one does not need this flexibility, and will not want to bother with the ``Solver`` class itself. Instead, one will use the module-level functions as explained in the previous sections.