原子が熱平衡状態にならず、いつまでも動的な変化をし続ける状態を量子多体スカー(傷跡)状態と呼ぶようです。今回はbloqade.jlをみてみて、量子多体スカー状態をリュードベリ原子で確認してみます。
参考
https://queracomputing.github.io/Bloqade.jl/dev/tutorials/3.quantum-scar/main/
using Bloqade
using PythonCall
using Random
plt = pyimport("matplotlib.pyplot");
多体ラビ振動
最初にスカー状態を確認する前に、多体系でのラビ振動のふるまいについて確認しています。
3量子ビット用意します。
atom1 = generate_sites(ChainLattice(), 1, scale = 3.0)
atom2 = generate_sites(ChainLattice(), 2, scale = 3.0)
atom3 = generate_sites(ChainLattice(), 3, scale = 3.0)
距離は3マイクロメートルです。
h1 = rydberg_h(atom1; Δ = 0, Ω = 2π * 2)
h2 = rydberg_h(atom2; Δ = 0, Ω = 2π * 2)
h3 = rydberg_h(atom3; Δ = 0, Ω = 2π * 2)
パラメータはデルタを0にして、ガンマのみを操作しています。
nqubits: 3
+
├─ [+] ∑ 2π ⋅ 8.627e5.0/|r_i-r_j|^6 n_i n_j
├─ [+] 2π ⋅ ∑ σ^x_i
└─ [-] 2π ⋅ 0.0 ⋅ ∑ n_i
原子同士の距離は固定、ガンマだけ操作されています。
reg1 = zero_state(1)
reg2 = zero_state(2)
reg3 = zero_state(3)
初期状態は全部0です。
total_time = 1.5
clocks = 0.0:1e-2:total_time
prob1 = KrylovEvolution(reg1, clocks, h1)
density1 = zeros(1, length(clocks));
for info in prob1
density1[1, info.step] = rydberg_density(info.reg, 1)
end
fig, ax = plt.subplots()
ax.plot(clocks, density1[1, :])
ax.set_xlabel("Time (μs)")
ax.set_ylabel("Single Rydberg Probability")
ax.set_title("Rabi Oscillation: Single Atom Case")
fig
ここではクリロフ部分空間法を使ったクリロフ時間発展を使ってるらしいですが、何のことかさっぱりなので、グラフを見ます。
時間がたつごとに、1量子ビットが0と1を行ったり来たりがわかります。
ここでリュードベリ原子が十分に離れていればいいんですが、原子同士が近づくとブロッケードでそう簡単にはならないようです。
prob2 = KrylovEvolution(reg2, clocks, h2);
density2 = zeros(2, length(clocks));
for info in prob2
for i in 1:2
density2[i, info.step] = rydberg_density(info.reg, i)
end
end
density2 = sum(density2, dims = 1);
prob3 = KrylovEvolution(reg3, clocks, h3);
density3 = zeros(3, length(clocks));
for info in prob3
for i in 1:3
density3[i, info.step] = rydberg_density(info.reg, i)
end
end
density3 = sum(density3, dims = 1);
量子ビット数によって、ルートNにラビ周波数が変化するようです。
fig, ax = plt.subplots()
ax.plot(clocks, density1[1, :])
ax.plot(clocks, density2[1, :])
ax.plot(clocks, density3[1, :])
ax.set_xlabel("Time (μs)")
ax.set_ylabel("Rydberg Probability")
ax.set_title("Many-body Rabi Oscillation for 1-, 2-, and 3-atom system")
ax.legend(["1 atom", "2 atoms", "3 atoms"], loc = "lower right")
fig
この図から、量子ビット数が増えてもリュードベリ半径内で複数の原子が励起できないため、populationが1以上にならないのと、周波数が変わるという現象が確認できるということです。この次の記事で量子多体スカー状態を見てみたいと思います。