Basic techniques and tools for development and maintenance of atomic-scale software
- Xavier Gonze (Catholic University of Louvain, Belgium)
- Alberto Castro (University of Zaragoza, Spain)
- Damien Caliste (Alternative Energies and Atomic Energy Commission (CEA), France)
- Matthieu Verstraete (Universite de Liege, Belgium)
- Yann Pouillon (University of Cantabria, Spain)
- Francesco Sottile (Ecole Polytechnique, Palaiseau, France)
The goal of the tutorial will be to improve the ability of the participants to produce software that will have a long life cycle, that is adequate for group software development, that is re-usable, that can better communicate with other atomic-scale software, that executes correctly and is portable, with an acceptable execution speed.
During the last decade, the standard of writing of such software has been steadily improving (also due to CECAM efforts), but it is felt that students and post-docs, with a physicist formation, who would like to start software development, while not having formally trained in software engineering, will benefit a lot from the proposed tutorial, especially tuned for atomic-scale software, and focusing on immediately useful concepts and tools.
We will focus on concepts and tools that are independent of the scientific programming language used by the developer (FORTRAN or C/C++). Although most of the examples will be taken from the software and standards developed within the European Theoretical Spectroscopy Facility (http://www.etsf.eu/), the tutorial will aim at a high level of applicability, and thus should benefit to every developer of atomic-scale software. Both the example software and the tools (at the exception of Xdb) that will be relied upon are available under a free software licence, so that the participants will encounter no barrier to immediately use what they have learned when back in their research institution.
Deadline for application: 1 April 2010
Plan of lectures
This five-day tutorial, is intended for an audience of scientists involved
in software development for atomic-scale simulations. The following topics will be covered :
(1) Basic concepts of software maintenance
(concepts [1-4] ; coding rules, ROBODOC ) ;
(2) Version management tools
(concepts ; bzr  and svn ) ;
(3) Scripting. Introduction to Python  ;
(4) Debugging and testing
(concepts - idb and gdb , buildbot  ) ;
(5) Code re-use. Libraries.
(concepts ; NetCDF , ETSF_IO ) ;
(6) File formats. Conversion tools.
(concepts ; NetCDF  , ETSF FileFormat , ETSF_IO , XML ) ;
(7) The autotools
(8) F90/C/Python bindings
(9) More libraries and file formats
(10) Profiling and optimizing
Each theme will be addressed thanks to a mix of :
presentation of basic concepts, and general information ;
introduction to related specific tools, with examples ;
detailed presentation of how it works for selected atomic-scale software ;
prepared hands-on exercises ;
working sessions, during which the student work on a self-defined project ;
short presentations of the integration of these concepts for different atomic-scale software.
 Software maintenance. Concepts and practice. (2003) 2nd ed.
P. Grubb & A.A. Takang, World Scientific (London)
 The mythical man-month. Essays on software engineering. Anniversary edition (1995) Frederick P. Brooks, Jr. Addison-Wesley
 http://www.intel.com/software/products/compilers/docs/linux/idb_manual_l.html and http://sourceware.org/gdb/download/onlinedocs/gdb.html