Hi, I’m trying to prepare an excited state that satisfies a certain quantum number at a flavour sector. Normally, I use conserve_qns=True
with the hamiltonian
ampo = AutoMPO()
sites = siteinds("Fermion", nsites*nflavour*2; conserve_qns=True)
for isite in 1:2:nsites*nflavour*2
q1::Int = isite
q2::Int = isite + 1
ampo .-= 0.5im / a, "cdag", q1, "c", q2
ampo .+= 0.5im / a, "cdag", q2, "c", q1
# + interaction + mass term etc
end
H = MPO(ampo, sites)
where the for loop is going over two nflavour
sectors for a fermion. Using a reference state [0,1,0,1,0,1...]
, I can prepare ground state and the excited state (hadron state, for instance), where the total charge is zero.
psi1_init = randomMPS(sites, reference_state)
energy_h, psi_h = dmrg(H, [psi_gs], psi1_init; nsweeps, maxdim, cutoff, noise, weight, observer=obs)
which directly prepares the n-th excited state instead of the 1st by conserving the charge. But I want to prepare the excited state, which has charge 1 for one sector and zero for the other. I was thinking about changing the reference state to [1,1,0,1,0,1...]
, for instance, but since DMRG does not have the notion of flavour sectors, it will create a superposition of any such state, I believe. Is there a way to maybe modify the expectation loss with a Q operator that is acting on part of the lattice such that H’ = H + (Q_sector - 1)^2?
Thanks
Best regards