-
Hello dear developers, In the descriptive article of the code 10.1063/5.0180424, the authors mentioned the possibility to use the Harmonic Davidson approach to target specific high-energy eigenstate without computing all the low lying states as opposite of the other implemented methods like state-averaged, pojected orthogonalization, ecc... In particular, how I should change the example below in which instead of calculating the first 10 excited states of the Heisenberg model with a state-averaged approach, I could target only the 10th excited state with the Harmonic Davidson method ?!
|
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 1 reply
-
Hi, thanks for your interest in using block2. With Harmonic Davidson approach, you can target excited state which is close to a given energy (via the ket = driver.get_random_mps(tag="KET", bond_dim=250, nroots=1)
bond_dims = [250] * 4 + [500] * 4
noises = [1e-5] * 4 + [1e-6] * 2 + [0]
thrds = [1e-12] * 8
energy = driver.dmrg(
heis_mpo, ket, n_sweeps=8, bond_dims=bond_dims,
noises=noises, thrds=thrds, cutoff=1E-24,
dav_type="Harmonic|CloseTo", davidson_shift=-8.88, iprint=2,
)
print('Energy = [%s]' % " ".join("%20.15f" % x for x in [energy])) Note that it is recommended to use a tighter Davidson threshold (1E-12) for this case. If you compare this with your original output, you can see that this gives you the 7th excited state (E=-8.88986002). As stated in the paper, the current implementation of Harmonic Davidson is not stable. You may just do a normal Davidson and directly target an excited state, which seems to be more stable for your case: ket = driver.get_random_mps(tag="KET", bond_dim=250, nroots=1)
bond_dims = [250] * 4 + [500] * 4
noises = [1e-5] * 4 + [1e-6] * 2 + [0]
thrds = [1e-12] * 8
energy = driver.dmrg(
heis_mpo, ket, n_sweeps=8, bond_dims=bond_dims,
noises=noises, thrds=thrds, cutoff=1E-24,
dav_type="CloseTo", davidson_shift=-8.88, iprint=2,
)
print('Energy = [%s]' % " ".join("%20.15f" % x for x in [energy])) |
Beta Was this translation helpful? Give feedback.
-
Hi @hczhai, thanks a lot for your explanation. |
Beta Was this translation helpful? Give feedback.
Hi, thanks for your interest in using block2.
With Harmonic Davidson approach, you can target excited state which is close to a given energy (via the$n$ th state. The following lines will allow you to do that:
davidson_shift
argument ofdriver.dmrg
) instead of theNote that it is reco…