We solve a system of advection-diffusion-reaction in a fluid flowing past a cylinder. This case is inspired from a FEniCS tutorial . A fluid flows inside a channel containing a cylinder as an obstacle. Chemical species A, B and C live in the fluid, with sources of A and B at the entry of the channel. Due to diffusion and fluid mixing, A and B react to form a certain amount of C.
The geometry is shown below:
The simulation is split into two participants: a Fluid participant that computes the fluid flow and sends the velocity field to the Chemical participant which computes the reaction, diffusion and advection of all chemical species. The coupling is unidirectional (
serial-explicit with only one data entity being transferred).
Available solvers and dependencies
Both participants run on FEniCS. Install FEniCS and the FEniCS-adapter to run this tutorial.
Running the simulation
Each participant has a
run.sh file in its subfolder.
To start the
Fluid participant, run:
cd fluid-fenics ./run.sh
To start the
Chemical participant, run:
cd chemical-fenics ./run.sh
The chemical participant writes
.pvd files that can be opened with ParaView. The fluid participant also produces output files representing the velocity field. Since the fluid time step is significantly smaller than the chemical time step, there are more fluid velocity files than chemical concentration files. Keep this in mind when opening both simultaneously.
The figure below shows the state after a duration of 2 units of time. The concentration in A, B and C are plotted.
 Hans Petter Langtangen and Anders Logg. Solving PDEs in Python. Springer (2017). https://doi.org/10.1007/978-3-319-52462-7