Finite Element Methods for the Poisson-Nernst-Planck equations coupled with Navier-Stokes Solver

The code

We are developing, solvers for simulating convection-diffusion-reaction equations which can be used for charge-transport systems with an arbitrary number of charge-carrying species.
These systems are modeled by the Poisson-Nernst-Planck (PNP) equations with the possibility of coupling to the Navier-Stokes (NS) equation to simulate electrokinetic phenomena.
Our codes are based on the FEniCS package for discretizing the differential equations. This permits the use of any compatible linear algebra solver for solving the resulting linear system of equations.

The solvers use continuous piecewise linear finite elements for the PNP system, and div-conforming (discontinuous) finite elements for the NS system.
The nonlinearities of the system are handled by implementing a monolithic Newton approach of the entire PNP (and NS) system.
The linearized systems are stabilized by an edge-averaged finite element (EAFE) approximation.

Our main focus is on the PyEAFE module. PyEAFE is a python implementation of the EAFE approximation for linear convection-diffusion-reaction equations with PDE finite coefficients based on the Dolfin software package. For coupled PDEs and nonlinear problems, helper methods exist in the module that allow users to define the PDE coefficients in terms of finite element functions and their derivatives; this is usefule for applying EAFE approximations to linearized systems resulting from a Newton iteration scheme or solving weakly coupled differential equations.

All our codes are available on Github:

PyEAFE:
Python module for EAFE discretization.

PDELab:
Docker image with jupyter lab and fenics installed.

PyPNP (in development):
Solver written in Python to simulate the Poisson-Nernst-Planck equations.