ASE 加速ガイド
ASE Acceleration
Section titled “ASE Acceleration”FBTK は、ASE (Atomic Simulation Environment) の解析機能を大幅に高速化するための Rust バックエンドとして機能します。
なぜ FBTK を使うのか?
Section titled “なぜ FBTK を使うのか?”ASE は非常に多機能ですが、大規模な原子系(数万原子〜)における全原子間の距離計算や近傍リストの作成は、純粋な Python 実装では時間がかかる場合があります。FBTK はこれらの計算を Rust で並列実行するため、計算時間を劇的に短縮できます。
パフォーマンス比較
Section titled “パフォーマンス比較”以下は、4,000 原子の銅結晶における計算時間の比較です(環境: 4-core CPU)。
| 機能 | ASE (Python) | FBTK (Rust) | 加速倍率 |
|---|---|---|---|
get_all_distances | ~1.8 sec | ~0.01 sec | 約 180倍 |
get_neighbor_list | ~0.2 sec | ~0.01 sec | 約 15倍 |
ASE の Atoms オブジェクトを fbtk.from_ase() でラップするだけで、高速な解析メソッドが利用可能になります。
import fbtkfrom ase.build import bulk
# 1. ASE で系を作成 (直交セル)atoms = bulk('Cu', 'fcc', a=3.614, cubic=True) * (10, 10, 10)
# 2. FBTK の System オブジェクトに変換 (高速・メモリコピー最小限)system = fbtk.from_ase(atoms)
# 3. 高速な全原子間距離計算 (周期境界 (PBC) を考慮した最短距離対応)dists = system.get_all_distances(mic=True)
# 4. 高速な近傍リスト取得neighbors = system.get_neighbor_list(cutoff=5.0)ベンチマーク・コード
Section titled “ベンチマーク・コード”実際に手元の環境で速度を計測するためのスクリプトです。
import fbtkimport timeimport numpy as npfrom ase.build import bulk
# 系を作成 (4,000 原子)atoms = bulk('Cu', 'fcc', a=3.614, cubic=True) * (10, 10, 10)
# FBTK への変換system = fbtk.from_ase(atoms)
# 距離行列計算の計測start = time.time()d_fbtk = system.get_all_distances(mic=True)print(f"FBTK time: {time.time() - start:.4f} sec")
# ASE標準の計測start = time.time()d_ase = atoms.get_all_distances(mic=True)print(f"ASE time: {time.time() - start:.4f} sec")
# 結果が一致することを確認assert np.allclose(d_ase, d_fbtk)print("Results match perfectly!")制限事項と注意点
Section titled “制限事項と注意点”小さなユニットセルにおける最短距離
Section titled “小さなユニットセルにおける最短距離”FBTK の距離計算(PBC 考慮時)は、高速化のために標準的なアルゴリズムを採用しています。ユニットセルの各辺の長さが、計算したい距離の 2 倍よりも十分に大きくない場合、ASE の厳密な探索結果と一致しないことがあります。
大規模なバルク系(各辺 10 Å 以上推奨)の解析では、この制限による影響はなく、ASE と同等の結果を高速に得ることができます。