# DFTB+

{{#if: Bálint Aradi, BCCMS, Bremen, Germany

Ben Hourahine, The University of Strathclyde, Glasgow, UK |

Source authors:
Ben Hourahine, The University of Strathclyde, Glasgow, UK

}}{{#if: LGPL |

}}{{#if: Project GitHub |

}}{{#if:
• Semiempirical
• |

| {{#if: |

| {{#if: |

| {{#if: |

|{{#if:
• Data standard entry example
• |

| {{#if: |

|}}}}}}}}}}}}{{#if:
• Semiempirical
• |

Functionalities:

}}{{#if: |

Algorithms:

{{{algorithms}}}

}}{{#if: |

Generic interfaces:

{{{generic interfaces}}}

}}{{#if: |

APIs:

{{{apis}}}

}}{{#if:
• Data standard entry example
• |

Data standards:

}}{{#if: |

Software:

{{{software}}}

}}

DFTB+ is a software package for carrying out fast quantum mechanical atomistic calculations based on the Density Functional Tight Binding method. It can be either used as a standalone program or integrated into other software packages as a library.

Entries can be of different kinds depending on the content categories they contain. This one is a dummy example of an entry containing information of an algorithm, API, and software implementation. The different categories that can be contained in one entry are described in About ESL.

The entry is first introduced with a few lines describing its contents, i.e., an introductory abstract. It should be brief but sufficient to transmit to the reader what he/she needs to know in order to decide whether it is interesting for his/her project.

At the bottom of the page comes a list of Categories. As explained in Contributing, all pages should contain the ESL Entries category tag. A software entry should also contain either the ESL Software or the Other Software tag. Other tags can be added if appropriate.

## Algorithm

If the method described is quite generic and allows for different ways of its being implemented, a description of the algorithm (or a link to an external website or other ESL entry) is important and useful. In some cases it is obvious and not needed.

It can be described with words, flow charts or metalanguage.

```A, B, C: NxN Matrices

Do until get bored:
Matrix multiply C = A x B
Store C
enddo

if (useful)
Celebrate
endif
```

## Generic programming interface

Describes the programming interface for the implementation of an algorithm in generic terms. It should be human-readable and descriptive, listing the physical quantities involved (e.g., the Hamiltonian, the lattice vectors, etc.) rather than specifying how these are to be represented within the code.

## Application programming interface

Describes the API (application programming interfaces) in strict terms, i.e., it should give all the information necessary to be implementable within a piece of code with no ambiguities.

`subroutine theRoutine( a, B, result, n, w)`

Implementation independent:

• `a` (input) INTEGER
Variable ${\displaystyle a}$.
• `B` (input) DOUBLE PRECISION array, dimension (`a`,`a`)
Matrix ${\displaystyle B}$.
• `result` (output) DOUBLE PRECISION array, dimension (`a`,`a`)
The result.

Algorithm specific:

• `n` (output) DOUBLE PRECISION
Variable ${\displaystyle n}$.

Implementation specific:

• `w` (input, optional) LOGICAL
`T`: Do this.
`F`: Don't do it.

## Software description and installation

If the entry contains a specific software implementation, in addition to the box in the upper right corner, this section should contain whatever needs explaining about the code which is not already present in the description of the algorithm or programming interface. Software should be included in the list of categories at the end of the page.

### Prerequisites

List here dependencies, such as:

• BLAS
• LAPACK

Optional dependencies:

### Instructions

On how to install, link, etc.

### Tests

Supports ctest

## Publications

(Optional) The main paper describing this software can be found in this reference[1]. Alternatively, this could appear as a subsection in one or more of the other sections (Algorithm, Programming interface, etc.) if more appropriate.

## Current developments

(Optional) You can announce here things related to the entry that are currently under development, keeping in mind that you want to deliver.

## Future developments

(Optional) You can announce here things to come related to the entry, keeping in mind that you want to deliver.

## Other sections

(Optional) Other sections can be added if relevant to the entry.

## References

(Optional)

1. A. N. Other, On the implementation of an algorithm, J. Rand. Thoughts 3, 14 (1592). DOI: 65.3589/7.932.3846.26.433