Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Motivation, target audience, philosophy.
Our library is intended to be used by two communities: directly by computational physicists who develop their own computer codes, and indirectly by users who use applications based on the library. There are a number of challenges that such a scientific developer faces:
Challenge: Framework/boilerplate code
A typical computational physics program (for example, a Monte Carlo simulation code) contains parts that have little to do with the scientific problem that the simulation strives to get insight into. Those parts form the necessary framework for running the simulation, and are responsible for various auxiliary tasks such as reading the parameters of the simulation or saving intermediate and final results. Auxiliary "boilerplate" code is often imported with little or no changes from application to application. As writing the auxiliary code is secondary to solving the scientific problem at hand, it is therefore given less attention. However, the auxiliary code is not necessarily trivial and redeveloping it from scratch results in unnecessary duplication of effort and reduced code quality.
Challenge: Code reuse problem
For the same reasons, physics code often lacks modularization: parts of the code are not properly separated by well-defined interfaces, and the scientific code is buried deep inside the boilerplate/framework. The resulting lack of interoperability hinders the exchange of code with other research groups and results in further unnecessary duplication of effort.
Challenge: Process management
As codes grow, they become progressively more difficult to manage and document. The lack of modularity and documentation makes it hard for researchers outside the primary developers group to contribute to the project. A possibility of unintentional disruption of code functionality by introducing changes effectively discourages implementing new features.
Challenge: High performance computing requirements
Although programming in a high-level language (such as Python) may help in solving the framework/boilerplate code problem, the use of a high-level language is often problematic. Computational physics algorithms are complex, and the computational kernels implementing them are resource-demanding and in most of the cases must make use of multi-node and multi-core capabilities of contemporary HPC (High Performance Computing) hardware. The high-performance requirements necessitate implementation of the kernels in a lower-level language, such as C++, and utilizing MPI and OpenMP parallel programming techniques. The task of including high-performance parallelized kernels into high-level language framework, although technically feasible, is far from being trivial.
The purpose of the ALPS core libraries is to reduce the user's time and effort to develop and test complex scientific applications. This project addresses the above-mentioned challenges by providing reusable and widely-used, high-performance, well-documented software building blocks with open architecture. To facilitate reuse, the library utilizes high level of abstraction without compromising performance. To encourage reuse and contributions, the library strives to maintain current user-level and developer-level documentation, easy installation procedure, as well as a short development cycle with rapid bugfixes and frequent releases. The manageability requirements are addressed via documented code, modular structure, and extensive testing. The project is open to contributions in the form of bug reports, feature requests, and code.