Learn R Programming

ChargeTransport (version 1.0.2)

LandauZener: Landau-Zener Charge Transfer Rates

Description

Computes charge transfer (CT) rates using the semi-classic Landau-Zener expression obtained by combining transition state theory with the Landau-Zener treatment for non-adiabatic transitions (it includes an adiabatic correction to the Marcus expression): $$k=\kappa _{el} \nu _{n} \Gamma _{n} exp \left[ - \beta \left( \Delta E^{\ddagger} - \Delta\right) \right]$$ where $\kappael$ and $\Gamman$ are respectively the thermally averaged electronic transmission coefficient and nuclear tunneling factor. $\nun$ is the frequency of the effective vibrational mode assisting the reaction. $\DeltaEa$ is the non-adiabatic activation energy (see activationFreeEnergy) and $\Delta$ is a correction factor relating $\DeltaEa$ to the adiabatic activation energy ($= \DeltaEa - \Delta$). ($\beta = 1/kbT$ where $kb$ is the Boltzmann constant and $T$ the temperature).

The electronic transmission coefficient accounting for multiple crossings at the intersection region is given by: $$\kappa _{el} = \frac{2P_{LZ}}{1+P_{LZ}}$$ $$P_{LZ} = 1 - exp \left( -2 \pi \gamma \right)$$ $$2 \pi \gamma = \frac{\pi ^{3/2} \left| J \right| ^2}{h \nu _n \sqrt{ \lambda k_{B}T}}$$ where $PLZ$ is the Landau-Zener transition probability for a single surface crossing event, $\lambda$ is the reorganization energy and $J$ is the electronic coupling. The activation free energy and the adiabatic correction factor are given by: $$\Delta E^{\ddagger}=\frac{\left( \lambda + \Delta E^{0} + \Delta E_{Field} \right)^2}{4\lambda}$$ $$\Delta=\left|J\right|+\frac{\lambda+\Delta E^{0}+\Delta E_{Field}}{2}-\sqrt{\frac{\left(\lambda+\Delta E^{0}+\Delta E_{Field}\right)^2}{4}+\left|J\right|^2}$$

The parameter $2 \pi \gamma$ determines the adiabaticity of the reaction. If $2 \pi \gamma << 1$ the reaction is non-adiabatic and the Landau-Zener becomes the Marcus expression. In the opposite limit $2 \pi \gamma >> 1$ the ET is adiabatic and $PLZ$ and $\kappael$ approach unity. Then, the rate expression is the same as for standard chemical reactions in the classical transition state approximation: $$k_{ad} = \nu_{n} exp \left[ - \beta \left( \Delta E^{\ddagger} - \Delta \right) \right]$$

Usage

LandauZener(J, lambda, nuN, dE0 = 0, dEField = 0, temp = 300, gammaN = 1)
electronicTransmissionCoefficient(J, lambda, nuN, temp = 300)
LandauZenerProbability(J, lambda, nuN, temp = 300)
adiabaticCorrection(J, lambda, dE0 = 0, dEField = 0)

Arguments

J
a scalar, a vector, a matrix or an array containing the electronic couplings (in eV) used to calculate the CT rates.
lambda
a scalar, a vector, a matrix or an array containing the total reorganization energies (in eV) used to calculate the CT rates.
nuN
a scalar giving the frequency of the effective vibrational mode assisting the CT process (in eV) used to calculate the CT rates.
dE0
a scalar, a vector, a matrix or an array containing the site energy differences (in eV) used to calculate the CT rates. By default self-exchange reactions are considered (dE0=0).
dEField
a scalar, a vector, a matrix or an array containing an additional contribution to the site energy differences due to an external electric field (in eV). By default no electric field is applied (dEField=0).
temp
a scalar giving the temperature (in Kelvin) at which to evalute the CT rates. By default CT rates are evaluated at room temperature (temp=300).
gammaN
a scalar giving the nuclear tunneling factor. By default the transition is assumed to occur without any tunneling effect (gammaN=1).

Value

Depending on the dimension of the objects passed to the function a scalar, a vector, a matrix or an array containing the Landau-Zener CT rates (in s-1) is returned.

Details

The arguments of these function can be scalars, vectors, matrices or arrays. Mixing scalar values with vectors, matrices or arrays is allowed but in all other cases the arguments must have the same dimensions and lengths. Using matrices or arrays is useful to compute simultaneously several charge transfer rates for different pairs of molecules, structures ...

References

H. Oberhofer and J. Blumberger, Physical Chemistry Chemical Physics, 14, 13846–13852, 2012

B. S. Brunschwig, J. Logan, M. D. Newton and N. Sutin, Journal of the American Chemical Society, 102, 5798, 1980

M. D. Newton and N. Sutin, Annual Review of Physical Chemistry, 35, 437, 1984

M. D. Newton, Chemical Reviews, 91, 767, 1991.

A. Nitzan, Chemical Dynamics in Condensed Phases, Oxford University Press, 2006

See Also

energyConversion, dEField, activationFreeEnergy, Marcus, MarcusLevichJortner, KMC

Examples

Run this code
## Produce a map of the decimal logarithm of the Marcus,
## Marcus-Levich-Jortner and Landau-Zener rate expressions for:
nuN <- 1445 # effective vibrational mode wavenumber in cm-1
lambdaI <- 0.14  # internal reorganization energy in eV
lambdaS <- 36E-3 # external reorganization energy in eV

N  <- 301
J  <- seq( 0  , 65,length.out=N)*1E-3 # eV
dE <- seq(-0.5,0.5,length.out=N)      # eV
G  <- expand.grid(J, dE)
J  <- G[,1]
dE <- G[,2]

kMLJ    <- MarcusLevichJortner(
           J = J, lambdaI = lambdaI, lambdaS = lambdaS,
           hBarW = centimeterMinusOne2electronVolt(nuN), dE0 = dE)
kMarcus <- Marcus(
           J = J, lambda = lambdaI+lambdaS, dE0 = dE)
kLZ     <- LandauZener(
           J = J, lambda = lambdaI+lambdaS,
           nuN = centimeterMinusOne2Hertz(nuN), dE0 = dE)

kMLJ    <- matrix(kMLJ   , nrow = N, ncol = N)
kMarcus <- matrix(kMarcus, nrow = N, ncol = N)
kLZ     <- matrix(kLZ    , nrow = N, ncol = N)

addAxis <- function(bottom = TRUE, left = FALSE, above = FALSE, right = FALSE){
  useless <- lapply(1:4,axis, labels=FALSE)
  if(bottom) axis(1, labels = TRUE)
  if(left  ) axis(2, labels = TRUE)
  if(above ) axis(3, labels = TRUE)
  if(right ) axis(4, labels = TRUE)
  if(bottom) mtext(side=1,line=1.2, text=expression( abs(J)/eV), cex=par("cex"))
  if(left  ) mtext(side=2,line=1.2, text=expression(Delta*E/eV), cex=par("cex"))
  if(right ) mtext(side=4,line=1.2, text=expression(Delta*E/eV), cex=par("cex"))
  box()
}

layout(matrix(1:3, ncol=3))
par(cex=2, lwd=1.5, pty="s", mgp=c(1.1,0.1,0), tck=0.02, mar=rep(0.7,4), oma=rep(2,4))
contour(unique(J), unique(dE), log10(kMLJ   ),
        zlim = c(1,15), levels = -15:15, xaxt="n", yaxt="n", labcex=3)
addAxis(TRUE, TRUE, FALSE, FALSE)
title("Marcus-Levich-Jortner", line=1)
contour(unique(J), unique(dE), log10(kMarcus),
        zlim = c(1,15), levels = -15:15, xaxt="n", yaxt="n", labcex=3)
addAxis(TRUE, FALSE, FALSE, FALSE)
title("Marcus", line=1)
contour(unique(J), unique(dE), log10(kLZ    ),
        zlim = c(1,15), levels = -15:15, xaxt="n", yaxt="n", labcex=3)
addAxis(TRUE, FALSE, FALSE, TRUE)
title("Landau-Zener", line=1)

Run the code above in your browser using DataLab