Skip to content

Modelling of electrified interfaces using Poisson-Boltzmann theory

Notifications You must be signed in to change notification settings

lucasdekam/frumkin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Frumkin

Alexander Frumkin was a Soviet Russian electrochemist, famous for his contributions to the understanding of the relationship between kinetics and the electric double layer structure.

This repository contains code for modelling the electric double layer (in absence of chemisorption) using modified Poisson-Boltzmann theory. The theory is largely based on the work of Iglič, Gongadze, and Kralj-Iglič (2019). The code is intended to be easy to use, with out-of-the-box plotting functions, for easy comparison to experimental capacitance data.

Minimal example

First, we need to define an electrolyte. We specify a list of solvents and ions. Water has been implemented out-of-the-box, and has size parameter 1. The ions have sizes 6 and 2, respectively. The size parameter specifies the size of species relative to the lattice spacing. The lattice spacing is defined here such that if all lattice sites are occupied by water molecules, their density equals the water density at room temperature.

from frumkin.electrolyte import LatticeElectrolyte, Ion, Water
conc = 1e-2  # molar concentration
el = LatticeElectrolyte([
    Water(),
    Ion(name=r"Na$^+$", size=6, concentration=conc, charge=+1),
    Ion(name=r"Cl$^-$", size=2, concentration=conc, charge=-1),
])

For implementing other solvents look at the definition of the Solvent class in frumkin/electrolyte.py.

Next, we set up the model:

from frumkin.gongadze_iglic import GongadzeIglic
model = GongadzeIglic(el, ohp=2.8)

The ohp (outer Helmholtz plane) parameter specifies the distance of closest approach for ions in Angstrom. If it is not specified, the model will calculate ohp as half the size of a counterion (positive ions if the surface is negatively charged and vice versa).

It is also possible to specify the permittivity in the Stern layer to a fixed value with the eps_stern parameter. If it is not specified, the permittivity depends on the local electric field.

Given an array of potentials w.r.t the potential of zero charge, we can run a voltammetry experiment and plot the resulting surface charge and capacitance:

import numpy as np 
potential = np.linspace(-1, 1, 200)
result = model.voltammetry(potential)
f = result.plot()

(the f= is necessary in notebooks to not get double figures).

Charge and capacitance plots

We can also show the spatial profiles of the double layer at a fixed potential, defined in volts w.r.t. the point of zero charge:

profiles = model.single_point(potential=-1)
f2 = profiles.plot()

Spatial extent of the double layer

For more examples, see the examples folder.

Nondimensionalization

Coming soon

Further reading

Further theoretical background on modified Poisson-Boltzmann models:

Development

In the future it would be interesting to add orbital-free density functional theory, chemisorption, and solvent structure.

It might be good to upgrade the solver from SciPy's solve_bvp to a finite element solver like FEniCS. Such a solver has already been implemented for Poisson-Nernst-Planck models in the electrochemistry module of matscipy.

Papers that used Frumkin

About

Modelling of electrified interfaces using Poisson-Boltzmann theory

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published