Need a break? Support the development by playing Polarity Puzzles

Model, Solvers, Properties, and PropertyExtractors

To carry out a theoretical study, three questions need to be answered:

  • What model is used to represent the problem?
  • What method is used to investigate the model?
  • What properties are going to be calculated?

In a numerical context, this determines the input, the algorithm, and the output, respectively. In TBTK, the model specification is performed using the Model class, algorithms are implemented in Solver classes, and several Property classes exist to store information about extracted properties.

Typically, most of the computational time is spent executing the algorithm. The Solvers are, therefore, where most low-level optimization is required. To shield application developers from unnecessary exposure to the numerical details, the Solvers can be wrapped in so-called PropertyExtractors. These PropertyExtractors allow for Properties to be extracted from the Solvers using an interface that is independent of the Solver. Together, the Model, the PropertyExtractors, and the Properties allow the application developer to set up and run calculations using code that emphasizes the physics of the problem.

The clear separation between the three tasks also makes it possible to change the code associated with either of them without having to modify the code of the other two. This makes it possible to easily try multiple solution methods for the same problem.


No single set of units is the most appropriate in all quantum mechanical problems. Therefore, TBTK comes with a UnitHandler that gives the application developer the freedom to specify what units to use.

Auxiliary tasks

TBTK also contains many classes for performing auxiliary tasks such as importing and exporting data, writing logs, profiling code, and plotting data.

Application development

This manual is aimed at application developers that want to implement calculations that answer specific physical questions. Together with the installation instructions, it explains the key concepts that are needed to get started. For more in-depth information, see the API, which can be found under "Classes" in the menu.

Method development

A fundamental purpose of TBTK is to make it possible to develop general-purpose code that can be easily shared with the community. For example, implementing new Solvers, providing standardized models for different types of materials, etc. Such contributions can either be released as stand-alone packages or be pulled into the TBTK framework itself. If you are interested in this, the manual is a good place to become familiar with the general workflow. More detailed information is provided in the API, which can be found under "Classes" in the menu.


Please do not hesitate to send an email to krist.nosp@m.ofer.nosp@m..bjor.nosp@m.nson.nosp@m.@seco.nosp@m.nd-t.nosp@m.ech.c.nosp@m.om if you have any questions or suggestions.

Next: UnitHandler