Numerical Simulations Laboratory

Honesty first. We work only on realistic projects that fit our expertise and capabilities.

We enjoy to collaborate with highly qualified scientists and engineers to combine our expertise and to realize their ideas in new simulation tools. We like to share our experience with young and motivated researchers willing to get help and boost their computational tasks. Before any project begins, we discuss its details until a clear and complete technical specification is agreed by both parties, and after that we accurately estimate budget and time needed to complete the job. Having passed these steps you can be sure that the project will be done successfully and within our estimations.

The main challenge in computational software development is to achieve the highest degree of code extensibility and reliability while keeping the minimum run time.

A simulation code should be developed like a LEGO constructor to allow easy and safe modifications or even replacements of underlying algorithms. Many our customers, especially researchers from academia, continue to improve their codes independently by implementing additional features or adjusting a mathematical model to find the best match to reality.

Reliability and correctness of the implementation is another cornerstone of a numerical code. The clever use of advanced capabilities of modern languages and special tricks that we have accumulated for years help us to minimize possible errors or misprints (see our implementation of a formula that takes about 100 pages). Finally, extensive and hard testing is a must to ensure the correctness of a code.

The code execution time is a crucially important characteristic in real life applications. For given mathematical model it is mostly determined by computational complexity of the chosen algorithms. However, an improper choice of software technologies or a bad design may increase it drastically (for example, ignoring cache coherence). Today, a wide range of parallelization tools can be used to speed up a serial code or to efficiently perform large scale simulations on clusters or supercomputers.

We ensure: