イオントラップの中では、同じ符号の電荷を持つイオン同士が反発しながら、外から加えた閉じ込めの力によって一定の配置をつくります。その並び方が分かっても、少し押したときにどう揺れるかは、まだ分かりません。位置と揺れ方は、同じ力から求める別々の情報です。
Open Quantum Design(OQD)の公開計算ツールTrICalには、平衡位置を求める処理と、そこから振動モードを求める処理があります。この二段階を追うと、イオンが落ち着く場所と、集団として動く仕組みの違いが見えてきます。
簡単にまとめると?
- 平衡位置は、閉じ込めとイオン同士の反発を合わせたポテンシャルエネルギーが、局所的に最小になる配置です。
- 振動モードは、その配置から少しずれたときの戻る力を使って求めます。イオンごとに独立して揺れるとは限りません。
- TrICalの公開実装では、平衡位置の計算に続き、エネルギーの曲率と質量からモードの周波数と動く向きを求めています。
反発と閉じ込めが釣り合う場所
まず、同じ電荷を持つ二つのイオンを、左右に動ける一本の軸に沿って閉じ込めた場合を考えます。中央へ戻そうとする力だけなら、どちらも中央に集まるはずです。しかしイオン同士は反発するので、一定の間隔を空けた配置に落ち着きます。
この力の関係は、位置に応じて変わるポテンシャルエネルギーで表せます。閉じ込めによる項とクーロン反発の項を足し合わせ、エネルギーが小さくなる位置を探すのが平衡位置の計算です。OQDの解説も、この二つの寄与を合計して配置を求める流れを示しています。
実際の数値計算では、最適化が止まっただけで最も安定した配置と断定できるわけではありません。初期配置や計算する方向によって、別の局所的な極小へ進む場合があります。まず力が十分小さくなっているか、その近くでエネルギーが増えるかを調べることが、次の振動計算につながります。
同じ位置でも、揺れる向きによって戻る力が違う
平衡位置から少しだけイオンをずらすと、元へ戻そうとする力が生まれます。その強さを決めるのは、エネルギーの値そのものではなく、位置に対してどれくらい急に曲がっているかです。
多くの座標について、この曲がり方をまとめた行列をヘッセ行列(Hessian)と呼びます。対角成分は一つの座標を動かしたときの曲率を、非対角成分は別の座標の変化との結び付きを表します。一つのイオンを押すと隣のイオンへの反発も変わるので、集団の動きを考える必要があるのです。
そこで、一定の割合を保ちながらイオンが一緒に動く組合せを探します。これが振動モード(基準振動)です。動く向きと相対的な大きさを表す固有ベクトルと、その揺れの周波数が一組になります。モードの形が分かれば、どのイオンが同じ向きに動き、どこで反対向きになるかを読み取れます。
二つのイオンでは、同じ向きと反対向きに分かれる
違いが見えやすいのは、質量と電荷が同じ二つのイオンを、左右対称な調和ポテンシャルに閉じ込めた理想モデルです。ここでは軸方向の小さな振動だけを考え、横方向の動きは十分強く閉じ込められているとします。これはTrICalの実行結果や装置の測定値ではなく、仕組みを説明するための模型です。
| 軸方向のモード | イオンの動き | 二つの間隔 | 角周波数 |
|---|---|---|---|
| 重心モード | 同じ向きに同じ量だけ動く | 変わらない | ω₀ |
| 伸縮モード | 反対向きに同じ量だけ動く | 広がったり狭まったりする | √3 ω₀ |
重心モードでは、二つのイオンの間隔が変わりません。そのため、動きに伴うクーロン反発の変化はなく、集団全体が閉じ込めの力で揺れます。伸縮モードでは間隔が変わるので、反発の変化も戻る力に加わり、より速い揺れになります。
この模型で平衡点のヘッセ行列を質量で割ると、ω₀²に行列[[2, −1], [−1, 2]]を掛けた形になります。固有値はω₀²と3ω₀²で、平方根を取ると表の二つの角周波数が得られます。固有ベクトルの成分が同符号なら同じ向き、異符号なら反対向きの動きです。
たとえば単独のイオンの周波数を仮に1 MHzと置くと、この理想模型では重心モードが1 MHz、伸縮モードは約1.73 MHzになります。異なる質量を混ぜたり、閉じ込めが調和的でなかったりする場合に、この比をそのまま使うことはできません。
TrICalの処理では、位置から曲率、質量へ進む
OQDが公開するTrappedIonsの実装では、equilibrium_positionがイオン間反発と外部ポテンシャルを合計し、最適化で平衡位置を探します。normal_modesは、その平衡位置でヘッセ行列を評価する処理です。位置がまだ保存されていなければ、先に平衡位置を計算します。
曲率だけでは揺れる速さは決まりません。同じ戻る力でも、重いものほど加速しにくいため、質量が必要です。今回確認した実装は、共通の質量を使う場合には行列を質量で割り、質量を並べて与える場合には平方根を使って座標間の重みを調整してから、固有値と固有ベクトルを求めます。
さらに、計算のために無次元化した長さやエネルギーの尺度を戻し、固有値の平方根から周波数に相当する量を得ます。この式の次元で得られるのは角周波数ωです。Hz単位の周波数fにするには、f = ω / 2π と換算します。返り値をそのままMHzと読まず、質量・長さ・ポテンシャルの単位をそろえることが大切です。
参照したのは、OQDの上位リポジトリから指定されているTrICalのcommit 2c3a91dです。その版のパッケージ記載は0.1.0dev1で、開発段階の公開実装として読みました。ここで説明した処理はコードの照合に基づくもので、TrICalを実行した性能評価や実機の動作確認ではありません。
周波数の一覧だけで、安定性まで決めない
小さな振動として扱うには、対象とする自由度で平衡点が安定していることが必要です。質量を考慮した曲率に負の固有値があれば、その方向は元へ戻る揺れとして扱えません。ゼロに近い値なら、弱い閉じ込めや対称性に由来する自由な動き、数値誤差などを区別する必要があります。
同じ配置でも、軸方向では安定し、横方向では不安定ということも考えられます。計算した方向、ポテンシャルの近似、質量と単位、そして固有値の符号をそろえて見ると、周波数の違いが物理的な変化なのか、模型や計算条件の違いなのかを判断しやすくなります。平衡位置は「どこにいるか」、振動モードは「その近くでどう動くか」を教えてくれます。
出典
- Open Quantum Design, Mechanical Properties of Ion Crystals(現行公開解説)
- Open Quantum Design, Trapped Ions API(平衡位置・振動モードの処理)
- Open Quantum Design, oqd-trical / trappedions.py、版情報(commit 2c3a91d、2026年10月26日確認)
