ASEにてNPT-MD計算を行う場合、対象構造の格子ベクトル(atoms.cell)が三角行列形式である必要があります(ASE3.24以前のバージョンでは上三角行列形式)。例えば、ase.build.bulkを使ってCuのFCC構造を作成すると、以下のような斜方形の格子ベクトルを持つatomsオブジェクトが得られます。
from ase.build import bulk
Cu_fcc_atoms = bulk(name="Cu", crystalstructure="fcc")
Cu_fcc_atoms = Cu_fcc_atoms * (4, 4, 4)
Cu_fcc_atoms.cell[:]array([[0. , 7.22, 7.22],
[7.22, 0. , 7.22],
[7.22, 7.22, 0. ]])このようなatomsオブジェクトに対して、格子ベクトルの変換を行わずにNPT-MDを実施しようとすると、以下のようなエラー(NotImplementedError)が出てMD計算が進行しません。
・ ASE 3.25.0 の場合(画像クリックで拡大)
・ASE 3.24.0 の場合(画像クリックで拡大)
convert_atoms_to_upper
matlantis-futures 内の関数 convert_atoms_to_upper を使用することで、格子ベクトルが上三角行列形式に変更されたatomsオブジェクトを得ることができます。
from matlantis_features.utils.atoms_util import convert_atoms_to_upper
Cu_fcc_atoms = convert_atoms_to_upper(Cu_fcc_atoms)
Cu_fcc_atoms.cell[:]array([[ 8.33693789, 2.94755266, 5.10531096],
[ 0. , 8.84265797, 5.10531096],
[ 0. , 0. , 10.21062192]])格子ベクトル変換後のatomsオブジェクトを用いることで、ASEでのNPT-MD計算が実行可能になります。
#Tips(2025/8/5追記)
CIF ファイルで保存した場合、読み込み後に再度変換が必要です。ご留意ください。