I would like to calculate the Dynamical Spin Structure and/or the Excitation spectrum of the 2 chain spin ladder, which I implemented below.Ultimately, I would like to compare the results to Neutron Scattering experiments. Using the ladder lattice of TenPy I constructed the model:
Code: Select all
class spinLadder(CouplingModel, MPOModel):
# model as in 'Topological quantum paramagnet in a
# quantum spin ladder', PHYSICAL REVIEW B 96, 220405(R) (2017)
def __init__(self, model_params):
# define some default parameters
L = model_params.get('L', 2)
J = model_params.get('J', 1.)
K = model_params.get('K', 0.01)
hy = model_params.get('hy', 0.)
# initialize a ladder lattice with two spin-1/2 sites on it
site1 = SpinHalfSite(conserve=None)
site2 = SpinHalfSite(conserve=None)
bc = 'periodic' if model_params['bc_MPS'] == 'infinite' else 'open'
lat = Ladder(L, [site1, site2], bc=bc, bc_MPS=model_params['bc_MPS'])
# initialize a coupling model
CouplingModel.__init__(self, lat)
# add terms of the Hamiltonian
# intracell Heisenberg coupling (along the rungs of the ladder)
self.add_coupling(J, 0, 'Sp', 1, 'Sm', 0, plus_hc=True)
self.add_coupling(J, 0, 'Sz', 1, 'Sz', 0, plus_hc=True)
# intercell Heisenberg coupling (along the length of the ladder)
self.add_coupling(K, 0, 'Sp', 0, 'Sm', 1, plus_hc=True)
self.add_coupling(K, 0, 'Sz', 0, 'Sz', 1, plus_hc=True)
self.add_coupling(K, 1, 'Sp', 1, 'Sm', 1, plus_hc=True)
self.add_coupling(K, 1, 'Sz', 1, 'Sz', 1, plus_hc=True)
# odd-parity DM interactions # NOTE: check whether plus_hc=True is correct
self.add_coupling(D, 0, 'Sz', 0, 'Sx', 1, plus_hc=True)
self.add_coupling(-D, 0, 'Sx', 0, 'Sz', 1, plus_hc=True)
self.add_coupling(D, 1, 'Sz', 1, 'Sx', 1, plus_hc=True)
self.add_coupling(-D, 1, 'Sx', 1, 'Sz', 1, plus_hc=True)
# even parity anisotropic interdimer coupling # NOTE: also chck with hc
self.add_coupling(Gamma, 0, 'Sz', 0, 'Sx', 1, plus_hc=True)
self.add_coupling(Gamma, 0, 'Sx', 0, 'Sz', 1, plus_hc=True)
self.add_coupling(Gamma, 1, 'Sz', 1, 'Sx', 1, plus_hc=True)
self.add_coupling(Gamma, 1, 'Sx', 1, 'Sz', 1, plus_hc=True)
# add a magnetic field pointing in y direction
self.add_onsite(hy, 0, 'Sy')
self.add_onsite(hy, 1, 'Sy')
# construct the Hamiltonian in the Matrix-Product-Operator (MPO) picture
MPOModel.__init__(self, lat, self.calc_H_MPO())