その他の格子模型
イジング模型はスピンが「上か下か」の2状態のみをとる単純なモデルでしたが、これを拡張することで様々な物理現象を記述できます。
ポッツ模型 (Potts Model)
イジング模型を「 個の状態をとるスピン」に拡張したものです。 各スピン は のいずれかの値を持ちます。 ハミルトニアンは以下のように定義されます(クロネッカーのデルタ を使用)。
つまり、隣り合うスピンが「同じ状態」であればエネルギーが下がり、「異なる状態」であればエネルギーは変化しません(あるいは高くなります)。
- のとき、イジング模型と等価になります。
- 以上では、相転移の次数が変化する(2次転移から1次転移へ)など、興味深い性質を示します。
XY模型
スピンが2次元ベクトル であるモデルです。 スピンは円周上の任意の角度 をとることができます(連続自由度)。
2次元XY模型は、通常の相転移とは異なるベレゾフスキー・コステリッツ・サウレス (BKT) 転移というトポロジカルな相転移を示すことで有名です(2016年ノーベル物理学賞)。
ハイゼンベルク模型
スピンが3次元ベクトル (単位ベクトル)であるモデルです。 現実の磁性体(鉄など)のモデルとして重要です。
Rustによる実装の工夫
これらの様々なモデルをRustで実装する場合、ジェネリクスやトレイトを活用すると効率的です。
trait LatticeModel {
type Spin; // 状態の型 (i32, f64, Vector3など)
// エネルギー計算
fn calculate_energy(&self, s1: &Self::Spin, s2: &Self::Spin) -> f64;
// スピン更新(メトロポリス法の試行)
fn propose_update(&self, current: &Self::Spin) -> Self::Spin;
}
このように共通のインターフェースを定義しておけば、モンテカルロ法のメインループ(遷移判定など)を共通化し、モデル部分だけを差し替えてシミュレーションを行うことができます。 これはRustの強力な型システムの利点が活きる場面です。