Thanks for your suggestions! I got some time to try both ways during holiday, and find something interesting (but also confusing…). Basically, I combined two options. I first used mean-field theory approximation, assuming a minimum-energy pattern of both \langle S^z_j\rangle and bond operator \langle c^\dag_{j,\sigma}c_{j+1,\sigma}+h.c\rangle, then I got a free mean-field H. By minimizing the energy, I got a range for both coupling constants a, b for where there is an ordered phase. By ordered I mean both |\langle S^z_j\rangle| and |\langle c^\dag_{j,\sigma}c_{j+1,\sigma}+h.c\rangle| nonzero. And you know, as in usual mean-field calculatioin, these two order parameters are related to each other, so if one is finite/ordered, another should also be ordered.
Then I solved my original H using DMRG with a pair of (a,b) in that ordered parameter range. I choose a spot in that range where b is 0.5, so that hopefully my pseudospin has enough dynamics to make dmrg converge and it’s also not too large to make my mean-field result unreliable. Then I calculated both |\langle S^z_j\rangle| and |\langle c^\dag_{j,\sigma}c_{j+1,\sigma}+h.c\rangle| with ground-state MPS, if they are indeed nonzero then numerics agree with the mean-field results.
But my problem is, I got an indeed antiferromagnetic ordered \langle S^z_j\rangle with a finite amplitude~0.1. But at same time, \langle c^\dag_{j,\sigma}c_{j+1,\sigma}+h.c\rangle looks random over sites with amplitude~10^{-5}, so enssentially zero. I feel this problem is not related to MF part, because I still use original H in dmrg, it just seems like the bond order can’t be detected… So I was wondering do you happen to know what can caused such situation. My system size is only 20, and I use bonddim=1500, 50 sweeps, I’m guessing maybe it’s not really converged? And my code for calculating bond expectation is below. Maybe this is wrong…?
Any suggestion would be really appreciated!! And I really want to thank you for providing such a creative way to treat this static spin situation!
for j in 1:N-1
orthogonalize!(psi1, j)
psi1_j = psi1[j]*psi1[j+1]
psidag1_j = dag(prime(psi1[j]*psi1[j+1], "Site"))
ampo_b= -b*(op(sites,"Cdagup",j)*op(sites,"Cup",j+1)+op(sites,"Cdagup",j+1)*op(sites,"Cup",j)+op(sites,"Cdagdn",j)*op(sites,"Cdn",j+1)+op(sites,"Cdagdn",j+1)*op(sites,"Cdn",j))
bond1[j] = b*scalar(psidag1_j * ampo_b * psi1_j)
end