Utilities toolbox workshop

From ESL
Jump to navigation Jump to search

This is a one-week coding workshop being prepared for the summer of 2015 (June 1-6). The general aim is to work on “utilities toolbox” of routines/modules of use for creating bigger electronic structure codes.

List of proposed components

The following is a list of components that are under consideration for development during the workshop.

  • Geometry tools: lattice vectors, atomic positions, k-grid, format conversion, finding neighbours, Ewald summation
  • Atomic tools: processing of pseudos, generation of bases and population analysis, evaluation of radial functions and their gradients, ultiplication by ylm functions
  • Grid tools: grid definition and FFT handling, multi-grid solvers
  • Matrix algebra tools: interfacing of iterative eigensolvers to low-level matrix storage and operations
  • Relaxation and dynamics tools: MD and relaxation routines tailored for electronic structure codes, analysis of MD trajectories
  • Pre- and post-processing tools and scripts: XML processing, task farming, plotting of DOS, bands, and Fermi surfaces, interfacing to visualisation packages

Besides the main components, there are a few very low-lying functionalities that might be used in common by all or some of the components written during the workshop:

  • Error handling
  • Memory allocation
  • Timing/profiling
  • Input handling

Schedule for discussion day

09:00 Introduction Welcome, practical announcements, presentation of everyone going around the room, brief intro to ESL, show website, get coders to register.
09:20 ESL overview Background, context, ESL philosophy, first workshop.
09:50 Aims of workshop Introduce utilities toolbox idea, explain format and aims of discussion day.
10:00 Coffee break
10:30 Library components discussion What routines are needed? Focus on user needs & usefulness from point of view of enabling research. What aims for present workshop vs long-term?
11:30 Library components brainstorm Make list of what we want to work on, what features each component should include, preliminary division of labour amongst coders.
12:00 Lunch break
13:30 Licensing discussion Explain different software licenses (GPL, LGPL, BSD, etc.), arrive to acceptable compromise for everyone.
13:50 Languages discussion Decide on languages for the libraries (Fortran+C? python for utilities?), language standards and compilers, aims for language interoperability.
14:10 Data structures and APIs discussion Talk about examples from Libxc, etc. and parallelisation/big data (BigIO project)--what is needed for ESL? How should we coordinate with other proposals?
14:30 Underlying framework discussion Error handling, memory management, profiling, input handling -- which of these things do we need to have in common? What shall we use for them?
15:00 Coffee break
15:30 Underlying framework discussion (continued) Error handling, memory management, profiling, input handling -- which of these things do we need to have in common? What shall we use for them?
16:00 Battle plan Bring together everything that has been decided, revisit library components discussion, finalise coding teams and objectives for the week, make sure everyone is happy with what they are doing.
16:30 Future of ESL Discuss long-term goals, future workshops and events, future strategy, presentations at conferences, papers.
16:50 Concluding remarks Any other comments/questions/suggestions, especially from one-day attendees.
17:00 End Extendable up to 18:00 if there is lots to talk about.


  • Connect one componnent of ESL to FHI-AIMS (V. Blum)
  • CIF parser (M. Oliveira, J. Spencer, Y. Pouillon)
  • libOMM (F. Corsetti)
  • GridXC (J. Soler, A. Garcia, M. Oliveira, D. Caliste, L. Genovese)
  • Pseudopotential IO (M. Oliveira, Y. Pouillon, A. Garcia, M. Torrent)
  • Low level components - FDF, Flib, etc (N. Andersen, L. Genovese, D. Caliste)
  • BigIO (D. Caliste, M. Oliveira, Y. Pouillon, M. Torrent, G. Huhs)
  • Post-processing to build ab-initio tight-binding Hamiltonians (L. Agapito)
  • Monte Carlo library (A. Carreras)
  • Numpy - C interface documentation (Togo Atsushi)