Parallel Programming Projects
The two projects where I used parallel programming during my master’s at Imperial are summarised:
1. Parallelising PDE Solver
Reaction-diffusion equations:
\[\frac{\partial C_1}{\partial t} = (C_1 (1 - C_1) - f C_2\frac{C_1 - q}{C_1 + q})/\epsilon + D_1 \nabla^2 C_1\] \[\frac{\partial C_2}{\partial t} = C_1 - C_2 + D_1 \nabla^2 C_1\]Domain is discretised using a Forward Time Centered Space (FTCS) scheme.

Simulation is divided into rectangular domains that are as close to square as possible to reduce communication amount. Communications are set up using MPI in the form of non-blocking peer-to-peer communication, with each process communicating only with its vertical and horizontal neighbours.

I tested the performance using a number of cores and plotted the speedup and efficiency results, as seen above. With 4 processors, we can gain 2.5 times speedup.
Simulation video with periodic boundary conditions:

2. Optimising Mineral Separation Circuits
This project was a group project included in my master’s program at Imperial College London. Here, I implemented a genetic algorithm to find the optimum circuit configuration to separate minerals with the maximum performance.


Optimum Circuit Configuration

Genetic Algorithm

Convergence

Parallelisation with OpenMP

How Does the Optimum Cirucit Change with the Varying Values of Geraridum
