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/tutorial/observables.md
+42-51
Original file line number
Diff line number
Diff line change
@@ -38,57 +38,61 @@ Note that `d[sites...]` produces a vector with the LDOS at sites defined by `sit
38
38
We can also compute the convolution of the density of states with the Fermi distribution `f(ω)=1/(exp((ω-μ)/kBT) + 1)`, which yields the density matrix in thermal equilibrium, at a given temperature `kBT` and chemical potential `μ`. This is computed with `ρ = densitymatrix(gs, (ωmin, ωmax))`. Here `gs = g[sites...]` is a `GreenSlice`, and `(ωmin, ωmax)` are integration bounds (they should span the full bandwidth of the system). Then, `ρ(µ, kBT = 0; params...)` will yield a matrix over the selected `sites` for a set of model `params`.
Note that the diagonal is `0.5`, indicating half-filling.
54
54
55
55
The default algorithm used here is slow, as it relies on numerical integration in the complex plane. Some GreenSolvers have more efficient implementations. If they exist, they can be accessed by omitting the `(ωmin, ωmax)` argument. For example, using `GS.Spectrum`:
Note, however, that the computation of `g` is much slower in this case, due to the need of a full diagonalization. A better algorithm choice in this case is `GS.KPM`. It requires, however, that we define the region for the density matrix beforehand, as a `nothing` contact.
74
75
```julia
75
76
julia>@time g = h |>attach(nothing, region = RP.circle(1)) |>greenfunction(GS.KPM(order =10000, bandrange = (0,8)));
The integration algorithm allows many different integration paths that can be adjusted to each problem, see the `Paths` docstring. Another versatile choice is `Paths.radial(ωrate, ϕ)`. This one is called with `ϕ = π/4` when doing `ρ = densitymatrix(gs::GreenSlice, ωrate::Number)`. In the example above this is slightly faster than the `(ωmin, ωmax)` choice, which resorts to `Paths.sawtooth(ωmin, ωmax)`.
95
+
92
96
## Current
93
97
94
98
A similar computation can be done to obtain the current density, using `J = current(g(ω), direction = missing)`. This time `J[sᵢ, sⱼ]` yields a sparse matrix of current densities along a given direction for each hopping (or the current norm if `direction = missing`). Passing `J` as a hopping shader yields the equilibrium current in a system. In the above example we can add a magnetic flux to make this current finite
@@ -238,14 +242,7 @@ GreenFunction{Float64,2,0}: Green function of a Hamiltonian{Float64,2,0}
JosephsonIntegrand{Float64} : Equilibrium (dc) Josephson current observable before integration over energy
246
-
kBT :0.0
247
-
Contact :1
248
-
Number of phase shifts :0
245
+
Josephson{JosephsonIntegratorSolver}: equilibrium Josephson current at a specific contact
249
246
250
247
julia>qplot(g, children = (; sitecolor =:blue))
251
248
```
@@ -257,37 +254,31 @@ In this case we have chosen to introduce the superconducting leads with a model
257
254
corresponding to a BCS bulk, but any other self-energy form could be used. We have introduced the phase difference (`phase`) as a model parameter. We can now evaluate the zero-temperature Josephson current simply with
258
255
```julia
259
256
julia>J(phase =0)
260
-
-1.974396994480587e-16
257
+
1.992660837638158e-12
261
258
262
259
julia>J(phase =0.2)
263
-
0.004617597139699372
260
+
0.0046175971391935605
264
261
```
265
262
Note that finite temperatures can be taken using the `kBT` keyword argument for `josephson`, see docstring for details.
266
263
267
264
One is often interested in the critical current, which is the maximum of the Josephson current over all phase differences. Quantica.jl can compute the integral over a collection of phase differences simultaneously, which is more efficient that computing them one by one. This is done with
Return the vertices of the polygonal integration path used to compute `O(args...)`.
2204
+
Return the vertices of the integration path used to compute `O(args...)`.
2201
2205
"""
2202
-
path
2206
+
points
2203
2207
2204
2208
"""
2205
2209
Paths
2206
2210
2207
2211
A Quantica submodule that contains representations of different integration paths in the
2208
-
complex-ω plane. Available paths are:
2212
+
complex-ω plane for integrals of the form `∫f(ω)g(ω)dω`, where `f(ω)` is the Fermi
2213
+
distribution at chemical potential `µ` and temperature `kBT`. Available paths are:
2209
2214
2210
-
Paths.vertical(ωscale::Real)
2215
+
Paths.radial(ωscale::Real, ϕ)
2211
2216
2212
-
A vertical path from a point `µ` on the real axis to `µ + Inf*im`. `ωscale` defines the rate at which the integration variable `x` sweeps this ω path, i.e. `ω = µ+im*ωscale*x`.
2217
+
A four-segment path from `ω = -Inf` to `ω = Inf`. The path first ascends along an arc of
2218
+
angle `ϕ` (with `0 <= ϕ < π/2`) and infinite radius. It then converges along a straight line
2219
+
in the second `ω-µ` quadrant to the chemical potential origin `ω = µ`. Finally it performs
2220
+
the mirror-symmetric itinerary in the first `ω-µ` quadrant, ending on the real axis at `ω =
2221
+
Inf`. The radial segments are traversed at a rate dictated by `ωscale`, that should
2222
+
represent some relevant energy scale in the system for optimal convergence of integrals. At
2223
+
zero temperature `kBT = 0`, the two last segments don't contribute and are elided.
0 commit comments