Students interested in my supervision for their BSc or MSc degree projects can choose from the following open topics. The topics are intentionally broad so that they can be adjusted according to the student‘s interests.
You can contact me in person or via email.
Development of the Template Numerical Library
Template Numerical Library (TNL) is an open-source scientific library developed at Czech Technical University in Prague. It is a collection of building blocks that facilitate the development of efficient numerical solvers and HPC algorithms. It is implemented in C++ using modern programming paradigms in order to provide a flexible and user-friendly interface. TNL provides native support for modern hardware architectures, including multicore CPUs, GPU accelerators, and distributed systems.
This topic is intentionally very broad as it can be easily adapted to the student‘s interests. In general, the student‘s project would consist of working on one specific component of TNL, such as an algorithm or a data structure. The following are just a few examples where students could contribute:
- comparison of various backends for parallel programming (C++ threads, OpenMP, oneTBB, SYCL, HIP, CUDA)
- parallel algorithms for multi-core CPUs and GPU accelerators
- benchmarking and optimization of selected algorithms
- distributed data management
- advanced algorithms for numerical linear algebra (solvers for systems of equations, matrix decompositions, computation of eigenvalues and eigenvectors)
- implementation of a numerical solver for efficient solution of the shallow water equation
Requirements: Students must have experience with programming in C++ (on the level of FNSPE courses 18PRC1 and 18PRC2).
Computational aspects of the Lattice Boltzmann Method
The lattice Boltzmann method (LBM) is a popular method for fluid flow simulation that can be applied to highly turbulent flows and it can be efficiently implemented for massively parallel architectures, such as GPU-accelerated supercomputers. Our code is based on the open-source Template Numerical Library (TNL) and the LBM solver is also available on GitLab as an open-source module TNL-LBM.
Students will be guided by a team of expert mathematicians and programmers, and they will collaborate on improving various aspects of the LBM solver:
- implementation of a real-time visualization tool using the ParaView Catalyst and ADIOS2 libraries
- implementation of advanced streaming patterns (e.g. esoteric twist, esoteric pull, esoteric push)
- efficient implementation of tricubic interpolation on GPU accelerators
- implementation of a time-skewing algorithm for LBM (or any explicit stencil code)
- post-processing schemes to ensure the conservativity of the velocity field
- optimization of LBM with mixed-precision approaches (e.g. using
float
for storage anddouble
for computation) - using LBMAT for the optimization of relaxation parameters in various LBM collision operators (mathematical topic)
Requirements: Students must have experience with programming in C++ (on the level of FNSPE courses 18PRC1 and 18PRC2).
Implementation of the Finite Volume Method for polyhedral meshes and GPU accelerators
The Template Numerical Library (described above) has been successfully used to develop modern and efficient solvers for partial differential equations based on state-of-the-art numerical methods, including the mixed-hybrid finite element method or the lattice Boltzmann method. Another popular method is the finite volume method, which is suitable for many classes of real-world problems. One of its strong aspects is that it can be easily formulated to allow for unstructured meshes, even general polyhedral meshes.
The goal of this project will be the development of a numerical solver based on the finite volume method using the Template Numerical Library. We will start with a very simple problem and gradually progress towards features needed for advanced problems.
Requirements: Students must have experience with numerical mathematics (on the level of FNSPE course 01NMA1) and differential equations (on the level of FNSPE course 01DIFR). Experience with programming in C++ (on the level of FNSPE courses 18PRC1 and 18PRC2) is also recommended.
Meshing algorithms for numerical simulations
Meshes are fundamental data structures for many numerical methods in natural sciences, engineering, and other fields. In order to approximate problems with complex geometries with sufficient accuracy, unstructured meshes often have to be considered instead of structured meshes. Hence, an efficient way to generate, represent and manipulate an unstructured mesh in computer memory is needed in order to facilitate high-performance computations of large problems.
The Template Numerical Library (described above) provides a general data structure that can represent any conforming unstructured mesh, including polygonal and polyhedral meshes. The goal of this project will be its further development in one specific area, such as the following examples.
- implementation of the iterator concept in C++ for mesh entities
- tetrahedral mesh optimization (Laplacian smoothing or Lloyd relaxation)
- polygonal/polyhedral mesh optimization (Laplacian smoothing, Lloyd relaxation, or elimination of short edges in Voronoi diagrams)
- implementation of polygonal planarization in 3D (approaches based on Newell normal vectors and mass-weighted centroid)
- implementation of a triangulation algorithm for a polygonal domain, using either Delaunay triangulation, Bowyer-Watson algorithm, Seidel algorithm, or minimum-cost algorithm
Requirements: Students must have experience with programming in C++ (on the level of FNSPE courses 18PRC1 and 18PRC2).
Administration of systems for high-performance computing
Linux is the dominant operating system for servers in many domains, including web servers and high-performance computing systems. Its open-source and decentralized nature offers great possibilities, but also brings many challenges. The rise of modern agile software development techniques resulted in the popularity of containers, lightweight pseudo-virtualization technique that can be used for the isolation of applications and their whole environment. Containerization solves many longstanding problems with compatibility between software components and coexistence of multiple versions, provides ideal facilities for continuous integration/continuous delivery, and overall improves the developer experience in complex systems.
Containerization is also becoming popular in high-performance systems, which have been traditionally more conservative and bare-bone compared to other domains. In this project, we will explore the possibilities for integration of agile software development techniques with HPC resources. The first step will be learning about all the available techniques and software tools on both sides, such as GitLab CI, task scheduler Slurm, and container frameworks Docker and Shifter. The second step will be configuration and deployment of selected systems on the faculty servers. The last step will be testing the systems and final evaluation of the deployment.
Requirements: Students must have experience with scripting and programming in Python and Bash. User experience with Linux systems on desktop or laptop is also needed, but no knowledge of server administration is required as a prerequisite.
Automatization for technical collaborative platforms
Collaboration is the most important human skill in team sports, acting, governing, and software development. The latter field profits from numerous web services that were developed to organize the results of human work and to facilitate remote interaction between humans. However, online collaboration is not only about humans – many tasks can be identified and easily automated to save precious human time.
In this project, we will focus on the Arch Linux wiki – a community platform that provides documentation for the Arch Linux distribution. We will investigate the possibilities where its content maintenance can be automated, starting from simple helpers based on heuristics, moving to natural language processing and even artificial intelligence. Some areas that would benefit from automation are linkrot fighting, detection of unsigned comments on talk pages, spell-checking, or linting for compliance with style rules. The base for this project will be wiki-scripts, a collection of Python scripts that can deal with common maintenance tasks. One of its components provides data synchronization between the MediaWiki server and a client database, which can be used for efficient data-intensive workflows.
Requirements: Students must have experience with programming in Python or JavaScript. Prior experience with the development of web applications is also advantageous.