Skip to content

Commit 1fa8857

Browse files
author
Documenter.jl
committed
build based on b507a32
1 parent dbf7a3a commit 1fa8857

File tree

141 files changed

+2049
-1352
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

141 files changed

+2049
-1352
lines changed

dev/.documenter/.vitepress/config.mts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ const navTemp = {
3131
{ text: 'Ab Initio Noise spectrum', link: '/examples/ab_initio_noise' },
3232
{ text: 'Adiabatic sweep', link: '/examples/steady_state_sweep' },
3333
{ text: 'Quantum Cumulants', link: '/examples/cumulants_KPO' },
34-
{ text: 'KB vs HB method', link: '/examples/harmonic_oscillator_KB_vs_HB' }]
34+
{ text: 'KB vs HB method', link: '/examples/harmonic_oscillator_KB_vs_HB' },
35+
{ text: 'Forward Transmission', link: '/examples/forward_transmission' }]
3536
}]
3637
},
3738
{ text: 'Resources', collapsed: false, items: [
@@ -137,7 +138,8 @@ export default defineConfig({
137138
{ text: 'Ab Initio Noise spectrum', link: '/examples/ab_initio_noise' },
138139
{ text: 'Adiabatic sweep', link: '/examples/steady_state_sweep' },
139140
{ text: 'Quantum Cumulants', link: '/examples/cumulants_KPO' },
140-
{ text: 'KB vs HB method', link: '/examples/harmonic_oscillator_KB_vs_HB' }]
141+
{ text: 'KB vs HB method', link: '/examples/harmonic_oscillator_KB_vs_HB' },
142+
{ text: 'Forward Transmission', link: '/examples/forward_transmission' }]
141143
}]
142144
},
143145
{ text: 'Resources', collapsed: false, items: [

dev/.documenter/examples/ab_initio_noise.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ result = get_steady_states(harmonic_eq, TotalDegree(), varied, fixed)
7777
plot(result; y="sqrt(u1^2 + v1^2)")
7878
```
7979

80-
![](sfmlxfy.png){width=600px height=400px}
80+
![](xtcbojd.png){width=600px height=400px}
8181

8282
The sidebands from for the steady states will look like
8383

@@ -88,7 +88,7 @@ scatter(ωrange, sidebands2; xlab="ω", legend=false, c=2)
8888
scatter!(ωrange, sidebands1; xlab="ω", legend=false, c=1)
8989
```
9090

91-
![](fktfxjl.png){width=600px height=400px}
91+
![](mpsahvh.png){width=600px height=400px}
9292

9393
Let us now reproduce this sidebands using a noise probe. We use the ModelingToolkit extension to define the stochastic differential equation system from the harmonic equations. The resulting system will have addtivce white noise with a noise strength $\sigma = 0.00005$ for each variable.
9494

@@ -130,7 +130,7 @@ freqω, psd = outputpsd(sol)
130130
plot(freqω, psd; yscale=:log10, xlabel="Frequency", ylabel="Power")
131131
```
132132

133-
![](xtcbojd.png){width=600px height=400px}
133+
![](fmblvsd.png){width=600px height=400px}
134134

135135
We will perform parameter sweep to generate noise spectra across the driving frequency $\omega$. For this we use the `EnsembleProblem` API from the SciML ecosystem.
136136

@@ -164,7 +164,7 @@ spectrum = log10.(reduce(hcat, getindex.(sol_ensemble.u, 2)))
164164
heatmap(ωrange, probe, spectrum)
165165
```
166166

167-
![](mpsahvh.png){width=600px height=400px}
167+
![](vjhquak.png){width=600px height=400px}
168168

169169
Remember that we don't do a continuation of the system, but rather initlized the system at each frequency $\omega$ and evolve it for a fixed time $T$. This leads to imperfections in the spectrum. However, if we plot the sidebands computed with HomotopyContinuation.jl on top of the spectrum, we find descent match.
170170

@@ -174,7 +174,7 @@ scatter!(ωrange, sidebands2; xlab="ω", legend=false, c=:white, markerstrokewid
174174
scatter!(ωrange, sidebands1; xlab="ω", legend=false, c=:black, markerstrokewidth=0, ms=2)
175175
```
176176

177-
![](fmblvsd.png){width=600px height=400px}
177+
![](uefgqqt.png){width=600px height=400px}
178178

179179

180180
---

dev/.documenter/examples/cumulants_KPO.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ eqs_completed_RWA = complete(eqs_RWA)
4040
```
4141

4242
\begin{align}
43-
\frac{d}{dt} \langle a\rangle &= \left( - U + \Delta \right) \mathit{i} \langle a\rangle + G \mathit{i} \langle a^\dagger\rangle -0.5 \langle a\rangle \kappa - U \mathit{i} \langle a^\dagger\rangle \langle a\rangle ^{2} \\
44-
\frac{d}{dt} \langle a^\dagger\rangle &= \left( U - \Delta \right) \mathit{i} \langle a^\dagger\rangle - G \mathit{i} \langle a\rangle + U \mathit{i} \langle a^\dagger\rangle ^{2} \langle a\rangle -0.5 \langle a^\dagger\rangle \kappa
43+
\frac{d}{dt} \langle a\rangle &= - U \mathit{i} \langle a\rangle ^{2} \langle a^\dagger\rangle + \left( - U + \Delta \right) \mathit{i} \langle a\rangle -0.5 \langle a\rangle \kappa + G \mathit{i} \langle a^\dagger\rangle \\
44+
\frac{d}{dt} \langle a^\dagger\rangle &= - G \mathit{i} \langle a\rangle + \left( U - \Delta \right) \mathit{i} \langle a^\dagger\rangle -0.5 \kappa \langle a^\dagger\rangle + U \mathit{i} \langle a\rangle \langle a^\dagger\rangle ^{2}
4545
\end{align}
4646

4747

-139 KB
Loading
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
2+
3+
4+
# Linear response and transmission/reflection coeffictients for magnon three-wave mixing {#Linear-response-and-transmission/reflection-coeffictients-for-magnon-three-wave-mixing}
5+
6+
```julia
7+
using HarmonicSteadyState, QuantumCumulants, Plots
8+
```
9+
10+
11+
Consider a model of nonlinear magnon-magnon coupling, as described in [this](https://arxiv.org/abs/2506.11527) paper. The model describes a three-wave mixing interaction between a strongly driven $k=0$ FMR mode and two parametricallly excited propagating modes with opposite momentum $\pm k$ and at half frequency. In this notebook, we will show how the mean-field approximation can be used to calculate steady states, and to calculate the $S_{21}$ transmission coefficient.
12+
13+
```julia
14+
hm = FockSpace(:magnon)
15+
hc = FockSpace(:polariton)
16+
h = hm hc # Hilbertspace
17+
18+
@qnumbers m::Destroy(h, 1) c::Destroy(h, 2) # Operators
19+
20+
@rnumbers Δ Vk Ωd γm γk # Parameters
21+
param = [Δ, Vk, Ωd, γm, γk]
22+
23+
H_RWA_sym = (
24+
Δ * m' * m + Δ / 2 * c' * c + Vk * m * c' * c' + Vk * m' * c * c + (Ωd * m + Ωd * m')
25+
)
26+
ops = [m, m', c, c'] # Operators for meanfield evolution
27+
28+
eqs_RWA = meanfield(ops, H_RWA_sym, [m, c]; rates=[γm, γk], order=1)
29+
eqs_completed_RWA = complete(eqs_RWA) # Meanfield equations using QuantumCumulants.jl
30+
```
31+
32+
\begin{align}
33+
\frac{d}{dt} \langle m\rangle &= -1 i \langle c\rangle ^{2} Vk -1 i \Delta \langle m\rangle -1 i {\Omega}d -0.5 {\gamma}m \langle m\rangle \\
34+
\frac{d}{dt} \langle m^\dagger\rangle &= 1 i \Delta \langle m^\dagger\rangle -0.5 {\gamma}m \langle m^\dagger\rangle + 1 i {\Omega}d + 1 i Vk \langle c^\dagger\rangle ^{2} \\
35+
\frac{d}{dt} \langle c\rangle &= -0.5 \langle c\rangle {\gamma}k + \frac{-1}{2} i \langle c\rangle \Delta -2 i Vk \langle m\rangle \langle c^\dagger\rangle \\
36+
\frac{d}{dt} \langle c^\dagger\rangle &= -0.5 {\gamma}k \langle c^\dagger\rangle + \frac{1}{2} i \Delta \langle c^\dagger\rangle + 2 i \langle c\rangle \langle m^\dagger\rangle Vk
37+
\end{align}
38+
39+
40+
We can use this meanfield equations to construct a `HarmonicEquation` object in HarmonicSteadyState.jl. In the construction, additional information is computed, such as the Jacobian of the equations, which is used to determine the stability if the the steady states.
41+
42+
```julia
43+
harmonic_eq = HarmonicEquation(eqs_completed_RWA, param)
44+
```
45+
46+
47+
```ansi
48+
A set of 4 harmonic equations
49+
Variables: mᵣ(t), mᵢ(t), cᵣ(t), cᵢ(t)
50+
Parameters: Δ, Vk, Ωd, γm, γk
51+
52+
Harmonic ansatz:
53+
0 = mᵣ(t) + mᵢ(t) + cᵣ(t) + cᵢ(t)
54+
55+
Harmonic equations:
56+
57+
1.4142135623730951(-0.35355339059327373mᵣ(t)*γm - 0.7071067811865475mᵢ(t)*Δ - 0.9999999999999998Vk*cᵣ(t)*cᵢ(t)) ~ Differential(t)(mᵣ(t))
58+
59+
-1.4142135623730951(-Ωd - 0.7071067811865475mᵣ(t)*Δ + 0.35355339059327373mᵢ(t)*γm - 0.4999999999999999Vk*(cᵣ(t)^2) + 0.4999999999999999Vk*(cᵢ(t)^2)) ~ Differential(t)(mᵢ(t))
60+
61+
1.4142135623730951(-0.35355339059327373cᵣ(t)*γk - 0.35355339059327373cᵢ(t)*Δ - 0.9999999999999998Vk*cᵣ(t)*mᵢ(t) + 0.9999999999999998Vk*mᵣ(t)*cᵢ(t)) ~ Differential(t)(cᵣ(t))
62+
63+
-1.4142135623730951(-0.35355339059327373cᵣ(t)*Δ + 0.35355339059327373cᵢ(t)*γk - 0.9999999999999998Vk*cᵣ(t)*mᵣ(t) - 0.9999999999999998Vk*cᵢ(t)*mᵢ(t)) ~ Differential(t)(cᵢ(t))
64+
65+
```
66+
67+
68+
Let's sweep the power of the drive $\Omega_d$, with $\Delta=0$, and solve for the steady state. The steady-state solutions show that the FMR mode saturates after a threshold power, followed by the coherent excitation of the parametrically induced counter-propagating modes.
69+
70+
```julia
71+
drive_range = range(0, 1.8, 100)
72+
fixed ==> 0, Vk => 0.0002, γm => 0.1, γk => 0.01)
73+
varied = (Ωd => drive_range)
74+
result = get_steady_states(harmonic_eq, TotalDegree(), varied, fixed)
75+
76+
plot(plot(result; y="1/sqrt(2)*(mᵣ+ mᵢ)"), plot(result; y="1/sqrt(2)*(cᵣ + cᵢ)"))
77+
78+
# Linear response and S21
79+
```
80+
81+
![](uilcwxq.png){width=600px height=400px}
82+
83+
To find the response of the driven system to a second, weak probe, we use the method described [here](https://quantumengineeredsystems.github.io/HarmonicBalance.jl/stable/background/stability_response#linresp_background). Here, we calculate the response in the same rotating frame as the Hamiltonian. The linear response is related to the scattering parameter $S_{21}$ by $S_{21}(\omega)=1-\sqrt{\kappa_{ext}} \chi(\omega),$ where $\kappa_{ext}$ is the coupling of the system to the measurement apparatus.
84+
85+
The result below shows the characteristic splitting of the magnon resonance above the power threshold, which matches the experiment.
86+
87+
```julia
88+
Ω_range = range(-0.1, 0.1, 500)
89+
χ3 = get_susceptibility(result, 1, Ω_range, 3);
90+
χ1 = get_susceptibility(result, 1, Ω_range, 1);
91+
κ_ext = 0.05
92+
S21_3 = 1 .- χ3 * κ_ext / 2
93+
S21_log_3 = 20 .* log10.(abs.(S21_3)) # expressed in dB
94+
S21_1 = 1 .- χ1 * κ_ext / 2
95+
S21_log_1 = 20 .* log10.(abs.(S21_1)) # expressed in dB
96+
```
97+
98+
99+
```ansi
100+
500×35 Matrix{Float64}:
101+
-0.705811 -0.705811 -0.705811 … -0.705811 -0.705811 -0.705811
102+
-0.71075 -0.71075 -0.71075 -0.71075 -0.71075 -0.71075
103+
-0.715739 -0.715739 -0.715739 -0.715739 -0.715739 -0.715739
104+
-0.720778 -0.720778 -0.720778 -0.720778 -0.720778 -0.720778
105+
-0.725868 -0.725868 -0.725868 -0.725868 -0.725868 -0.725868
106+
-0.731009 -0.731009 -0.731009 … -0.731009 -0.731009 -0.731009
107+
-0.736202 -0.736202 -0.736202 -0.736202 -0.736202 -0.736202
108+
-0.741448 -0.741448 -0.741448 -0.741448 -0.741448 -0.741448
109+
-0.746748 -0.746748 -0.746748 -0.746748 -0.746748 -0.746748
110+
-0.752102 -0.752102 -0.752102 -0.752102 -0.752102 -0.752102
111+
⋮ ⋱
112+
-0.746748 -0.746748 -0.746748 -0.746748 -0.746748 -0.746748
113+
-0.741448 -0.741448 -0.741448 -0.741448 -0.741448 -0.741448
114+
-0.736202 -0.736202 -0.736202 -0.736202 -0.736202 -0.736202
115+
-0.731009 -0.731009 -0.731009 -0.731009 -0.731009 -0.731009
116+
-0.725868 -0.725868 -0.725868 … -0.725868 -0.725868 -0.725868
117+
-0.720778 -0.720778 -0.720778 -0.720778 -0.720778 -0.720778
118+
-0.715739 -0.715739 -0.715739 -0.715739 -0.715739 -0.715739
119+
-0.71075 -0.71075 -0.71075 -0.71075 -0.71075 -0.71075
120+
-0.705811 -0.705811 -0.705811 -0.705811 -0.705811 -0.705811
121+
```
122+
123+
124+
Compare the two branches
125+
126+
```julia
127+
stable = get_class(result, 3, "physical")
128+
heatmap(
129+
Ω_range, drive_range, vcat(S21_log_1', S21_log_3'); c=:matter, cbar_title="S21 (dB)"
130+
)
131+
ylabel!("Ω_d")
132+
xlabel!("Probe detuning")
133+
```
134+
135+
![](jicvpgx.png){width=600px height=400px}
136+
137+
138+
---
139+
140+
141+
_This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl)._
5.98 KB
Loading
173 Bytes
Loading
-141 KB
Loading

0 commit comments

Comments
 (0)