コンテンツにスキップ

ASE 加速ガイド

FBTK は、ASE (Atomic Simulation Environment) の解析機能を大幅に高速化するための Rust バックエンドとして機能します。

ASE は非常に多機能ですが、大規模な原子系(数万原子〜)における全原子間の距離計算や近傍リストの作成は、純粋な Python 実装では時間がかかる場合があります。FBTK はこれらの計算を Rust で並列実行するため、計算時間を劇的に短縮できます。

以下は、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 fbtk
from 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)

実際に手元の環境で速度を計測するためのスクリプトです。

import fbtk
import time
import numpy as np
from 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 “小さなユニットセルにおける最短距離”

FBTK の距離計算(PBC 考慮時)は、高速化のために標準的なアルゴリズムを採用しています。ユニットセルの各辺の長さが、計算したい距離の 2 倍よりも十分に大きくない場合、ASE の厳密な探索結果と一致しないことがあります。

大規模なバルク系(各辺 10 Å 以上推奨)の解析では、この制限による影響はなく、ASE と同等の結果を高速に得ることができます。