"""This module provides functions to compute equilibrium states for quantum DNA
models."""
import numpy as np
import scipy.constants as c
from ..utils import get_conversion
from ..model import global_to_local, local_to_global
from ..hamiltonian import delete_groundstate
__all__ = ["get_therm_eq_state", "get_deph_eq_state"]
# ----------------------------------------------------------------------
[docs]
def get_therm_eq_state(me_solver):
"""Calculate the thermal equilibrium state.
Parameters
----------
me_solver : object
An instance of a master equation solver which contains the tight-binding Hamiltonian ``tb_ham``
and the Lindblad dissipation parameters ``lindblad_diss``.
Returns
-------
numpy.ndarray
The thermal equilibrium state of the system. If the temperature is zero, returns the ground state.
Otherwise, returns the thermal equilibrium state as a density matrix in the local basis.
Notes
-----
.. note::
The function first checks if the temperature is zero. If so, it returns the ground state. For
non-zero temperatures, it calculates the equilibrium values for each eigenvalue of the
Hamiltonian, normalizes them, and transforms the resulting diagonal matrix to the local basis.
"""
me_solver.relaxation = False
eigv, eigs = me_solver.get_eigensystem()
temperature = me_solver.temperature
# Ground state
if temperature == 0:
return me_solver.eigs[:, 0]
# Thermal equilibrium state
# Calculate the equilibrium values for each eigenvalue
eq_values = np.zeros(me_solver.matrix_dim)
for i in range(me_solver.matrix_dim):
energy = eigv[i] * get_conversion(me_solver.unit, "J")
eq_values[i] = np.exp(-energy / (c.k * temperature))
# Normalize the equilibrium values, convert to a diagonal matrix and transform to the local basis
eq_values /= np.sum(eq_values)
eq_values = np.diag(eq_values)
eq_state = global_to_local(eq_values, eigs)
return eq_state
[docs]
def get_deph_eq_state(me_solver):
"""Calculate the dephasing equilibrium state.
Parameters
----------
me_solver : object
An instance of :class:`ME_Solver` solver which contains the following attributes:
Returns
-------
numpy.ndarray
The dephasing equilibrium state as a density matrix.
"""
deph_eq_state = None
# Local dephasing
if me_solver.loc_deph_rate:
# maximally mixed state
dim = me_solver.matrix_dim
if me_solver.relaxation:
dim -= 1
deph_eq_state = np.eye(dim) / dim
# Global dephasing
if me_solver.glob_deph_rate:
loc_init_matrix = me_solver.init_matrix.full().real
if me_solver.relaxation:
loc_init_matrix = delete_groundstate(loc_init_matrix)
_, eigs = me_solver.get_eigensystem()
glob_init_matrix = local_to_global(loc_init_matrix, eigs)
# cancel all off-diagonal elements
glob_init_matrix = np.diag(np.diag(glob_init_matrix))
loc_init_matrix = global_to_local(glob_init_matrix, eigs)
deph_eq_state = loc_init_matrix
assert deph_eq_state is not None, "Dephasing equilibrium state not calculated."
return deph_eq_state
# ----------------------------------------------------------------------