ESL — The Electronic Structure Library is a community-maintained library of software of use for electronic structure simulations. It is an extended library that can be employed by everyone for building their own packages and projects. It consists of entries documenting functionalities, algorithms, interfaces, standards and pieces of code ranging from small routines for performing simple tasks, all the way up to complete libraries.
The ambition of the ESL is to segregate layers of functionality within modules which are general, standardised and efficient. In this way, new ideas, and new science, can be coded by scientists without needing to rewrite functionalities that are already well-established, and without needing to know more software engineering than science.
Publication — The background, vision and content of the ESL are described in a 2020 paper:
Micael J. T. Oliveira, Nick Papior, Yann Pouillon, Volker Blum, Emilio Artacho, Damien Caliste, Fabiano Corsetti, Stefano de Gironcoli, Alin M. Elena, Alberto García, Victor M. García-Suárez, Luigi Genovese, William P. Huhn, Georg Huhs, Sebastian Kokott, Emine Küçükbenli, Ask H. Larsen, Alfio Lazzaro, Irina V. Lebedeva, Yingzhou Li, David López-Durán, Pablo López-Tarifa, Martin Lüders, Miguel A. L. Marques, Jan Minar, Stephan Mohr, Arash A. Mostofi, Alan O’Cais, Mike C. Payne, Thomas Ruh, Daniel G. A. Smith, José M. Soler, David A. Strubbe, Nicolas Tancogne-Dejean, Dominic Tildesley, Marc Torrent, and Victor Wen-zhe Yu, The CECAM electronic structure library and the modular software development paradigm J. Chem. Phys. 153, 024117 (2020), DOI: 10.1063/5.0012901
If you use the ESL, please consider giving credit to this publication.
Electronic Structure Codes that support the ESL — Codes that use the ESL or parts of it include many major packages in our community. Examples include abinit, BigDFT, FHI-aims, GPAW, Octopus, Quantum Espresso, Siesta, and others. The ESL is by no means restricted to this set - the more, the better.
The ESL is not intended to be a conventional software library. Our aim is for it to grow with contributions open to a wide community, without imposing the rigidity implied by the a priori definition of a conventional library. It is also intended to be more than a software repository. The expectation is for the ESL to be useful and used, and through that to be able to slowly standardise software, APIs and data standards of common use in the community, as opposed to accumulating disconnected bits of code.
The contents of the library is organised in the form of ESL entries,
with one page per entry. ESL entries are categorised as
Functionalities
, Data standards
, ESL Software
, and
Other Software
(listed as category tags). One entry can contain more
than one of these category. However,
we encourage the creation of single-category entries linked to one
another, in order to allow a navigable network to form. In particular,
entries describing functionalities should be separated as much as
possible, since each functionality will typically link to several
different implementations.
Describes a particular functionality typically taken care of by a piece of software. This could be anything from a small routine up to a complete library. It should represent a specific process or component of an electronic structure calculation, but may be broad enough to allow different approaches/methods/algorithms or a variety of smaller tasks within it. Examples are:
Contains the specifications for storing particular types of data in files. It should provide all the necessary details for any program to be able to read and write according to the standard.
Describes and links to a piece of code. The code can be specific to a single functionality or bundle together more than one of each. The important things to keep in mind for these category are:
ESL Software is either software born and developed within the ESL initiative or software distributed under the ESL brand with the agreement of its authors. Other Software is software that is not part of the ESL, but is nevertheless of interest for anyone developing or using electronic structure codes.
Creating and maintaining the ESL entries is open to all. If you would like to do so, please read through the Contributing page for more details. Have a look around the existing entries to get a feel for how the division in categories works in practice.
You are free to create and contribute to categories at all levels. You can also organise your contribution as you prefer. Here are some suggestions: