Electronic Structure Library coding workshop: drivers
- Stefano de Gironcoli (International School for Advanced Studies (SISSA) and CNR-DEMOCRITOS IOM, Trieste, Italy)
- Ivan Girotto (International Center for theoretical Physics, Italy)
- Fabiano Corsetti (Synopsys QuantumWise, Denmark)
Electronic structure methods are mostly developed in self contained monolithic software distributions  implementing a variety of features that have been developed over the last few decades. Currently most of these large codes contain routines with overlapping functionality and make use of non-standard data formats due to historical reasons, and as the state of the art in theory and computer hardware progresses, the complexity of these codes continue to grow separately, in a way that reduces their inter-operability with each new version.
While this independent development model was certainly a successful one in the past, the current situation is far from ideal: new developers willing to contribute new ideas, who already face a steep learning curve due to the complexity of the existing software, are also required to become deeply involved with the development of a specific package. Furthermore, extension of their new development to other codes requires repetition of the same work for each independent package over and over, with very little academic and personal reward.
The problem is widely recognized in the community as important yet it remains unsolved. Addressing it from various angles is among the goals of the E-CAM Center of Excellence, spawn by the CECAM community, and the Max Center of Excellence, both recently funded by EU.
There are a few notable efforts to go beyond the traditional paradigm by producing communal software and libraries that are agnostic to the specific electronic structure code in which they are used. Examples include visualization , symmetry analysis , the computation and use of maximally-localized Wannier functions , libraries for exchange and correlation , and data structures and standards [6,7].
To build on these positive examples, a few years ago the Electronic Structure Library (ESL)  project was launched within CECAM, with the idea of fostering a new paradigm of library-based development for electronic structure by creating a common online repository of high-quality software libraries, programming interfaces and data standards in the field of electronic structure, which will facilitate reuse of code, interoperability between different code bases, rapid and efficient evolution to new computer architectures, and development of new methodologies.
The ESL aims to be a community-driven project which anyone can contribute to, with regular hands-on workshops being held to encourage developers to get involved in working on individual libraries and contributing to the ESL website, and to form collaborations between different code bases. The overarching strategy and direction of the ESL is also discussed and decided upon at these workshops, coordinated by a core group of organizers.
A first ESL coding workshop (July 2014) was an extended six-week software development workshop hosted by CECAM HQ in Lausanne, in which the tools and infrastructure for the project were prepared (such as the wiki website ), and the first contributions were included and made available online. This was followed by a second one-week workshop (June 2015), also in Lausanne, in which some of the basic standards for library contributions were discussed and implemented . Several new libraries were created during the workshop and added to the ESL repository to build a "utilities toolbox" with an effort to implement existing libraries into different pre-existing codes, in order to start putting into practice the idea of cross-code interoperability and code reuse. A third two-week workshop (June 2016) took place at ZCAM in Zaragoza, Spain, and addressed the broad theme of solvers, resulting in initiation of three library bundles that target widely used routines in electronic structure codes: Kohn-sham eigensolvers, Poisson solvers, and atomic solvers.
 Some examples: SIESTA [http://departments.icmab.es/leem/siesta/], Quantum ESPRESSO [http://www.quantum-espresso.org/], ABINIT [http://www.abinit.org/], VASP [http://www.vasp.at/], CP2K [http://www.cp2k.org/], CPMD [http://www.cpmd.org/], CASTEP [http://www.castep.org/], ONETEP [http://www.onetep.org/], CONQUEST [http://www.order-n.org/], Qbox [http://eslab.ucdavis.edu/software /qbox/], Elk [http://elk.sourceforge.net/], FHI-aims [https://aimsclub.fhi-berlin.mpg.de/], WIEN2k [http://www.wien2k.at/], Crystal [http://www.crystal.unito.it/], Octopus [http://www.tddft.org/programs /octopus/].
 XCrySDen [http://www.xcrysden.org].
 Spglib [http://spglib.sourceforge.net].
 Wannier90 [http://wannier.org].
 LibXC [http://www.tddft.org/programs/octopus/wiki/index.php/Libxc/]
 ETSF_IO [https://launchpad.net/etsf-io].
 Previous CECAM efforts in code interoperability and data standards (see sections on previous workshops).
 The Electronic Structure Library [http://esl.cecam.org].
 ESL recommendations for contributions [http://esl.cecam.org/mediawiki/index.php/ESL_language_recommendations, http://esl.cecam.org/mediawiki/index.php/ESL_licensing_recommendations].