@@ -8,33 +8,33 @@ Acts simalar as just a finite hamiltonian, but we 'remember' the boundary hamilt
88# todo - what is the required interface for abstractmpo?
99# support densempo windows?
1010struct WindowMPOHamiltonian{O} <: AbstractMPO{O}
11- left_ham :: InfiniteMPOHamiltonian{O}
12- finite_ham :: FiniteMPOHamiltonian{O}
13- right_ham :: InfiniteMPOHamiltonian{O}
11+ left_ham:: InfiniteMPOHamiltonian{O}
12+ finite_ham:: FiniteMPOHamiltonian{O}
13+ right_ham:: InfiniteMPOHamiltonian{O}
1414end
1515
1616# utility constructor
1717function WindowMPOHamiltonian (ham:: InfiniteMPOHamiltonian , interval:: UnitRange )
18-
18+
1919 # to make sure the interval corresponds with finite_ham, it is important that the unitcell of the left/right hamiltonians is circshifted correctly
20- left_edge = (interval. start- 1 ) % length (ham)
21- left_ham = InfiniteMPOHamiltonian ([ham[i] for i in (left_edge- length (ham)+ 1 ): left_edge])
22- right_edge = (interval. stop+ 1 ) % length (ham)
23- right_ham = InfiniteMPOHamiltonian ([ham[i] for i in right_edge: (right_edge+ length (ham)- 1 )])
20+ left_edge = (interval. start - 1 ) % length (ham)
21+ left_ham = InfiniteMPOHamiltonian ([ham[i] for i in (left_edge - length (ham) + 1 ): left_edge])
22+ right_edge = (interval. stop + 1 ) % length (ham)
23+ right_ham = InfiniteMPOHamiltonian ([ham[i] for i in right_edge: (right_edge + length (ham) - 1 )])
2424
25- finite_ham = FiniteMPOHamiltonian ([ham[i] for i in interval])
26- WindowMPOHamiltonian (left_ham, finite_ham, right_ham)
25+ finite_ham = FiniteMPOHamiltonian ([ham[i] for i in interval])
26+ return WindowMPOHamiltonian (left_ham, finite_ham, right_ham)
2727end
2828
2929
3030Base. copy (h:: WindowMPOHamiltonian ) = WindowMPOHamiltonian (copy (h. left_ham), copy (h. finite_ham), copy (h. right_ham))
3131
3232# some basic linalg
3333for fun in (:(Base.:+ ), :(Base.:- ), :(Base.:* ))
34- @eval $ fun (a:: WindowMPOHamiltonian ,b:: WindowMPOHamiltonian ) = WindowMPOHamiltonian ($ fun (a. left_ham,b. left_ham),$ fun (a. finite_ham,b. finite_ham),$ fun (a. right_ham,b. right_ham))
34+ @eval $ fun (a:: WindowMPOHamiltonian , b:: WindowMPOHamiltonian ) = WindowMPOHamiltonian ($ fun (a. left_ham, b. left_ham), $ fun (a. finite_ham, b. finite_ham), $ fun (a. right_ham, b. right_ham))
3535end
3636
3737TensorKit. dot (
38- bra:: WindowMPS , H:: WindowMPOHamiltonian , ket:: WindowMPS = bra,
39- envs = environments (bra, H, ket)
40- ) = dot (bra. window, H. finite_ham, ket. window,envs)
38+ bra:: WindowMPS , H:: WindowMPOHamiltonian , ket:: WindowMPS = bra,
39+ envs = environments (bra, H, ket)
40+ ) = dot (bra. window, H. finite_ham, ket. window, envs)
0 commit comments