MarcusLevichJortner: Marcus-Levich-Jortner Charge Transfer Rates

Description Usage Arguments Details Value References See Also Examples

Description

Compute charge transfer (CT) rates using the Marcus-Levich-Jortner expression:

k = 2π/h_bar * J^2 * √(1/4πλskbT)]*

∑(n=0,∞) [ exp(-S) * S^n/n! * exp(-(ΔE0+ΔEField+λs+nhbarω)^2/4λskbT) ]

where J and ΔE0 = Ef - Ei are respectively the electronic coupling and the site energy difference between the initial and final electronic states involved in the CT reaction, and λs is the external (intermolecular) reorganization energy. S = λi / hbar ω is the electron-phonon coupling (Huang-Rhys factor), directly related to the internal (intramolecular) reorganization energy ( λi ) and to the energy of the effective vibrational mode ( hbar ω ) assisting the CT process. dEField is an additional contribution to the site energy difference due to an external electric field and T is the temperature.

Usage

1
2
MarcusLevichJortner(J, lambdaI, lambdaS, hBarW,
                    dE0 = 0, dEField = 0, temp = 300, nVib = 50)

Arguments

J

a scalar, a vector, a matrix or an array containing the electronic couplings (in eV) used to calculate the CT rates.

lambdaI

a scalar, a vector, a matrix or an array containing the internal reorganization energies (in eV) used to calculate the CT rates.

lambdaS

a scalar, a vector, a matrix or an array containing the external reorganization energies (in eV) used to calculate the CT rates.

hBarW

a scalar giving the energy of the effective vibrational mode assisting the charge transfer 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).

nVib

an integer indicating the number of vibrational states used to compute the Franck-Condon factor. By default 50 vibrational states are considered.

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 usefull to compute simultaneously several charge transfer rates for different pairs of molecules, structures ...

Value

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

References

R.A. Marcus, Journal of Chemical Physics, 24:966, 1956

R.A. Marcus, Reviews of Modern Physics, 65:599, 1993

S.A. Rice and M.T. Vala, Journal of Chemical Physics, 42:73, 1965

See Also

energyConversion, dEField, Marcus, LandauZener, KMC

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
## 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)

Example output

Loading required package: parallel

ChargeTransport documentation built on May 2, 2019, 9:24 a.m.