You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/src/index.md
+9-114Lines changed: 9 additions & 114 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -30,126 +30,30 @@ Where:
30
30
``\\\hat{\boldsymbol{b}}\quad and\quad\hat{\boldsymbol{c}}`` are operator-valued vectors and
31
31
``\\\hat{\boldsymbol{A}}`` is an operator-valued matrix which is *not nessecarily triangular*.
32
32
33
-
In order to handle all combinations of upper and lower regular forms in conjunction with left and right canonical (orthogonal) forms we must extend ITensors *QR* decomposition capabilities to also include *QL*, *RQ* and *LQ* decomposition. Below and in the code these will be generically referred to as *QX* decomposition.
Fortunately, under the hood, ITensor takes care of all the reshaping for us. After this process *W* will now be in left canonical form. Other cases and some additional details are described in tech notes.
34
+
# Truncation (SVD compression)
35
+
Truncation (or compression) of an MPO starts with 2 orthogonalization sweeps using column pivoting, rank reducing QR decomposoitions. These sweeps will significantly reduce the bond dimensions of the MPO. A final sweep using SVD decomposition and compression of the internal degrees of freedom will then yield a bond spectrum at each bond site. The users can control the rank reduction and SVD compression using parameters described below.
69
36
```@docs
70
-
block_qx
37
+
ITensorMPOCompression.truncate!
71
38
```
72
39
# Orthogonalization (Canonical forms)
73
-
This is achieved by simply sweeping through the lattice and carrying out block respecting *QX* steps described above. For left canoncical form one starts at the left and sweeps right, and the converse applies for right canonical form.
40
+
Most users will not need to deal directly with orthogonalization, as the truncation routine will do this automaticlly. This is achieved by simply sweeping through the lattice and carrying out block respecting *QX* steps described in the technical notes. For left canoncical form one starts at the left and sweeps right, and the converse applies for right canonical form.
74
41
```@docs
75
42
ITensorMPOCompression.orthogonalize!
76
43
```
77
-
# Truncation (SVD compression)
78
-
## Finite lattice
79
-
Prior to truncation the MPO must first be rendered into canoncial form using the orthogonalize! function described above. If for example the MPO is right-lower canonical form then a truncation sweep starts by doing a block repsecting *QL* decomposition on site 1:
where internal sans-M matrix is what gets decomposed with SVD. Picking out this internal matrix is really the secret sauce for avoiding diverging singular values when the lattice size grows. After decomposition `M=UsV` the `U` matrix is absorbed to the left such that `W=QU` which is left canoncial. *sV* gets combined with L' and transfered to next site to the right. There are many details to consider and these are explained in the technical notes.
97
-
98
-
## Infinite lattice
99
-
Truncation for an infinite lattice operates on the gauge transforms `G` that relate the left and right orthogonal forms:
Where `Ncell` is the number of lattice sites in the repeating unit cell. The gauge transforms are the output from left orthogonalizatio of a right orthogonalized iMPO. As usual we don't decompose `G` directly, but instead do a block respecting `svd` in order to only attack the non-extensive degrees of freedom. Small singular values can be truncated at this stage.
This looks rather elegant compared to the finite lattice case.
126
-
127
-
## Truncate functions
128
-
```@docs
129
-
truncate!
130
-
```
131
44
132
45
# Characterizations
133
46
134
-
The module has a number of functions for characterization of MPOs and operator-valued matrices. Some
135
-
points to keep in mind:
136
-
1. An MPO must be in one of the regular forms in order for orthogonalization to work.
137
-
2. An MPO must be in one ot the orthonormal (canonical) forms prior to SVD truncation (compression). However the truncate! function will detect this and do the orthogonalization if needed.
138
-
3. Lower (upper) regular form does not mean that the MPO is lower (upper) triangular. As explained in the [Technical Notes](../TechnicalDetails.pdf) the `A`-block does not need to be triangular.
139
-
4. Having said all that, most common hand constructed MPOs are either lower or upper triangular. Lower happens to be the more common convention.
140
-
5. The orthogonalize! operation just happens to preserve lower (upper) trianglur form. However truncation (SVD) does not preserve triangular form.
141
-
47
+
The module has a number of functions for viewing and characterization of MPOs and operator-valued matrices.
142
48
143
49
## Regular forms
144
50
145
51
Regular forms are defined above in section [Regular Forms](@ref)
146
52
147
53
```@docs
148
-
reg_form
54
+
ITensorMPOCompression.reg_form
149
55
detect_regular_form
150
56
is_regular_form
151
-
is_lower_regular_form
152
-
is_upper_regular_form
153
57
```
154
58
155
59
## Orthogonal forms
@@ -162,9 +66,9 @@ The definition of orthogonal forms for MPOs or operator-valued matrices are more
162
66
Where the summation limits depend on where the V-block is for `left`/`right` and `lower`/`upper`. The specifics for all four cases are shown in table 6 in the [Technical Notes](../TechnicalDetails.pdf)
163
67
164
68
```@docs
165
-
orth_type
166
-
isortho
167
-
check_ortho
69
+
ITensorMPOCompression.orth_type
70
+
ITensors.isortho
71
+
ITensorMPOCompression.check_ortho
168
72
```
169
73
170
74
# Some utility functions
@@ -181,12 +85,3 @@ MPOs for various models. Right now we have four Hamiltonians available
181
85
4. The 3-body model in eq. 34 of the Parker paper, built with autoMPO.
182
86
The autoMPO MPOs come pre-truncated so they are not as useful for testing truncation. The automated truncation in AutoMPO can **partially** disabled by providing the the keyword argument `cutoff=-1.0` which gets passed down in the svd/truncate call used when building the MPO
Copy file name to clipboardExpand all lines: src/characterization.jl
+20-34Lines changed: 20 additions & 34 deletions
Original file line number
Diff line number
Diff line change
@@ -143,21 +143,6 @@ end
143
143
#
144
144
# Detection of canonical (orthogonal) forms
145
145
#
146
-
147
-
@doc"""
148
-
check_ortho(H,lr[,eps])::Bool
149
-
150
-
Test if all sites in an MPO statisfty the condition for `lr` orthogonal (canonical) form.
151
-
152
-
# Arguments
153
-
- `H:MPO` : MPO to be characterized.
154
-
- `lr::orth_type` : choose `left` or `right` orthogonality condition to test for.
155
-
- `eps::Float64 = 1e-14` : operators inside H with norm(W[i,j])<eps are assumed to be zero.
156
-
157
-
Returns `true` if the MPO is in `lr` orthogonal (canonical) form. This is an expensive operation which scales as N*Dw^3 which should mostly be used only for unit testing code or in debug mode. In production code use isortho which looks at the cached ortho state.
158
-
159
-
"""
160
-
161
146
@doc"""
162
147
isortho(H,lr)::Bool
163
148
@@ -200,38 +185,42 @@ end
200
185
# We must therefore test for both and return true if either one is true.
201
186
#
202
187
188
+
203
189
@doc"""
204
-
detect_regular_form(W[,eps])::Tuple{Bool,Bool}
190
+
detect_regular_form(H)::Tuple{Bool,Bool}
205
191
206
-
Inspect the structure of an operator-valued matrix W to see if it satisfies the regular form
207
-
conditions as specified in Section III, definition 3 of
208
-
> *Daniel E. Parker, Xiangyu Cao, and Michael P. Zaletel Phys. Rev. B 102, 035147*
192
+
Inspect the structure of an MPO `H` to see if it satisfies the regular form conditions.
209
193
210
194
# Arguments
211
-
- `W::ITensor` : operator-valued matrix to be characterized. W is expected to have 2 "Site" indices and 1 or 2 "Link" indices
212
-
- `eps::Float64 = 1e-14` : operators inside W with norm(W[i,j])<eps are assumed to be zero.
195
+
- `H::MPO` : MPO to be characterized.
196
+
197
+
# Keywords
198
+
- `eps::Float64 = 1e-14` : operators inside `W` with norm(W[i,j])<eps are assumed to be zero.
213
199
214
200
# Returns a Tuple containing
215
-
- `reg_lower::Bool` Indicates W is in lower regular form.
216
-
- `reg_upper::Bool` Indicates W is in upper regular form.
217
-
The function returns two Bools in order to handle cases where W is not in regular form, returning
218
-
(false,false) and W is in a special pseudo diagonal regular form, returning (true,true).
201
+
- `reg_lower::Bool` Indicates all sites in `H` are in lower regular form.
202
+
- `reg_upper::Bool` Indicates all sites in `H` are in upper regular form.
203
+
The function returns two Bools in order to handle cases where `H` is not regular form, returning (`false`,`false`) and `H` is in a special pseudo-diagonal regular form, returning (`true`,`true`).
Inspect the structure of an MPO `H` to see if it satisfies the regular form conditions.
213
+
Inspect the structure of an MPO `H` to see if it satisfies the `lower/upper` regular form conditions.
226
214
227
215
# Arguments
228
216
- `H::MPO` : MPO to be characterized.
217
+
- `ul::reg_form` : Select whether to test for `lower` or `upper` regular form.
218
+
219
+
# Keywords
229
220
- `eps::Float64 = 1e-14` : operators inside `W` with norm(W[i,j])<eps are assumed to be zero.
230
221
231
-
# Returns a Tuple containing
232
-
- `reg_lower::Bool` Indicates all sites in `H` are in lower regular form.
233
-
- `reg_upper::Bool` Indicates all sites in `H` are in upper regular form.
234
-
The function returns two Bools in order to handle cases where `H` is not regular form, returning (`false`,`false`) and `H` is in a special pseudo-diagonal regular form, returning (`true`,`true`).
222
+
# Returns
223
+
- `regular::Bool` Indicates all sites in `H` are in `ul` regular form.
0 commit comments