Holstein Lattice Model#

The Holstein Lattice Model is a nearest-neighbor tight-binding model combined with an idealized optical phonon that interacts via a Holstein coupling. The current implementation accommodates a single electronic particle and is described in detail in Krotz et al. 2021 .

The quantum Hamiltonian of the Holstein model is a nearest-neighbor tight-binding model

\[\hat{H}_{\mathrm{q}} = -J\sum_{\langle i,j\rangle}^{N}\hat{c}^{\dagger}_{i}\hat{c}_{j}\]

where \(\langle i,j\rangle\) denotes nearest-neighbor sites with or without periodic boundaries determined by the parameter periodic_boundary=True.

The quantum-classical Hamiltonian is the Holstein coupling with dimensionless electron-phonon coupling \(g\) and phonon frequency \(\omega\)

\[\hat{H}_{\mathrm{q-c}} = g\sqrt{2m\omega^{3}}\sum_{i}^{N} \hat{c}^{\dagger}_{i}\hat{c}_{i} q_{i}\]

and the classical Hamiltonian is the harmonic oscillator

\[H_{\mathrm{c}} = \sum_{i}^{N} \frac{p_{i}^{2}}{2m} + \frac{1}{2}m\omega^{2}q_{i}^{2}\]

with mass \(m\).

The classical coordinates are sampled from a Boltzmann distribution.

\[P(\boldsymbol{p},\boldsymbol{q}) \propto \exp\left(-\frac{H_{\mathrm{c}}(\boldsymbol{p},\boldsymbol{q})}{k_{\mathrm{B}}T}\right)\]

Constants#

The following table lists all of the constants required by the HolsteinLatticeModel class:

HolsteinLatticeModel constants#

Parameter (symbol)

Description

Default Value

temp \((T)\)

Temperature

1

g \((g)\)

Dimensionless electron-phonon coupling

0.5

w \((\omega)\)

Phonon frequency

0.5

N \((N)\)

Number of sites

10

J \((J)\)

Hopping energy

1

phonon_mass \((m)\)

Phonon mass

1

periodic_boundary

Periodic boundary condition

True`

Example#

from qc_lab.models import HolsteinLattice
from qc_lab import Simulation
from qc_lab.algorithms import MeanField
from qc_lab.dynamics import serial_driver
import numpy as np

# instantiate a simulation
sim = Simulation()

# instantiate a model
sim.model = HolsteinLattice()

# instantiate an algorithm
sim.algorithm = MeanField()

# define an initial diabatic wavefunction
sim.state.wf_db = np.zeros((sim.model.constants.num_quantum_states), dtype=complex)
sim.state.wf_db[0] = 1.0

# run the simulation
data = serial_driver(sim)