What is a module?

A 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. It reflects the needs and the characteristics of software development expressed in formal and informal discussions by the communities active and targeted by E-CAM, and allows for the flexibility needed to impact and foster concerted software development and knowledge transfer in our broad academic and scientific community. 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. 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 are written in such a way that they can potentially take advantage of anticipated hardware developments in the near future. This is ensured by the E-CAM programmers, whose task is to oversee and implement the different stages of software development, under the supervision of the Software Manager.

The software modules stored in the E-CAM repository are developed via two main activities: the work of the post-docs and the scientific programmers (see staff) and the participants at Extended Software Development Workshops (ESDWs).