35 lines
1.5 KiB
Python
35 lines
1.5 KiB
Python
# GUAN is an open-source python package developed and maintained by https://www.guanjihuan.com. The primary location of this package is on website https://py.guanjihuan.com.
|
|
|
|
# calculate Green functions
|
|
|
|
import numpy as np
|
|
|
|
def green_function(fermi_energy, hamiltonian, broadening, self_energy=0):
|
|
if np.array(hamiltonian).shape==():
|
|
dim = 1
|
|
else:
|
|
dim = np.array(hamiltonian).shape[0]
|
|
green = np.linalg.inv((fermi_energy+broadening*1j)*np.eye(dim)-hamiltonian-self_energy)
|
|
return green
|
|
|
|
def green_function_nn_n(fermi_energy, h00, h01, green_nn_n_minus, broadening, self_energy=0):
|
|
h01 = np.array(h01)
|
|
if np.array(h00).shape==():
|
|
dim = 1
|
|
else:
|
|
dim = np.array(h00).shape[0]
|
|
green_nn_n = np.linalg.inv((fermi_energy+broadening*1j)*np.identity(dim)-h00-np.dot(np.dot(h01.transpose().conj(), green_nn_n_minus), h01)-self_energy)
|
|
return green_nn_n
|
|
|
|
def green_function_in_n(green_in_n_minus, h01, green_nn_n):
|
|
green_in_n = np.dot(np.dot(green_in_n_minus, h01), green_nn_n)
|
|
return green_in_n
|
|
|
|
def green_function_ni_n(green_nn_n, h01, green_ni_n_minus):
|
|
h01 = np.array(h01)
|
|
green_ni_n = np.dot(np.dot(green_nn_n, h01.transpose().conj()), green_ni_n_minus)
|
|
return green_ni_n
|
|
|
|
def green_function_ii_n(green_ii_n_minus, green_in_n_minus, h01, green_nn_n, green_ni_n_minus):
|
|
green_ii_n = green_ii_n_minus+np.dot(np.dot(np.dot(np.dot(green_in_n_minus, h01), green_nn_n), h01.transpose().conj()),green_ni_n_minus)
|
|
return green_ii_n |