The E-CAM Software Library

_images/protein-metal-cluster1.png

Formally, E-CAM is a European HPC Centre of Excellence supporting HPC simulations in industry and academia through software development, training and discussion in simulation and modeling. Collected in this website we have a compilation of the software modules that have been documented by the E-CAM community within the four initial target areas of E-CAM. These four areas represent the relative diversity of the broad domain of interest relevant to E-CAM, and indeed the wider CECAM community, and try to perform a rough categorisation of the areas of interest:

What is a module?

In the context of E-CAM, the definition of a software module is any piece of software that could be of use to the E-CAM community and that encapsulates some additional functionality, enhanced performance or improved usability for people performing computational simulations in the domain areas of interest to us.

This definition is deliberately broader than the traditional concept of a module as defined in the semantics of most high-level programming languages and is intended to capture inter alia workflow scripts, analysis tools and test suites as well as traditional subroutines and functions. Because such E-CAM modules will form a heterogeneous collection we prefer to refer to this as an E-CAM software repository rather than a library (since the word library carries a particular meaning in the programming world). The modules do however share with the traditional computer science definition the concept of hiding the internal workings of a module behind simple and well-defined interfaces. It is probable that in many cases the modules will result from the abstraction and refactoring of useful ideas from existing codes rather than being written entirely de novo.

Perhaps more important than exactly what a module is, is how it is written and used. A final E-CAM module adheres to current best-practice programming style conventions, is well documented and comes with either regression or unit tests (and any necessary associated data). E-CAM modules should be written in such a way that they can potentially take advantage of anticipated hardware developments in the near future (and this is one of the training objectives of E-CAM).

Scientific Software Development Best Practices

We have attempted to gather a set of best practice guidelines for scientific software development in order to assist people to develop high quality modules. These guidelines are not specific to E-CAM and gather together best practices from a number of different sources that can help increase the quality and reusability of the software developed by scientists.

E-CAM Activities

The software stored in E-CAM repositories is developed via two main activities: the work of post-docs in the context of pilot projects with industrial partners; and the work of the participants at Extended Software Development Workshops (ESDWs).

Pilot Projects

One of primary activity of E-CAM is to engage with pilot projects with industrial partners. These projects are conceived together with the partner and typically are to facilitate or improve the scope of computational simulation within the partner. The related code development for the pilot projects are open source (where the licence of the underlying software allows this) and are described in the modules associated with the pilot projects.

Below is a list of the current pilot projects within E-CAM:

Extended Software Development Workshops

E-CAM carries out 2 week software development workshops. These workshops train scientists in the development of modular codes for high performance machines. Documentation and testing are key components of the workshops and the associated on-line manuals and test cases are made available through the E-CAM module library. ESDWs are open to postdocs, senior graduate students and early career researchers in industry and academia. E-CAM carries out 4 ESDWs per year on each of the four scientific areas, with a maximum 2 weeks duration. For more information see http://www.e-cam2020.eu/events/

Contributing to this documentation

This documentation is created using ReStructured Text and the git repository for the documentation source files can be found at https://gitlab.e-cam2020.eu/e-cam/E-CAM-Library which are open to contributions from anyone in the E-CAM community. If you would like to contribute to this effort then please follow the contribution guidelines that are linked to below.