Skip to content

Commit 35f0034

Browse files
Add support for MTKNPT
This is a follow-up to materialyzeai#88 to add support for `MTKNPT`. This is the newly recommended method for NPT simulations in ASE, with `npt` being deprecated (see https://gitlab.com/ase/ase/-/merge_requests/3765). In materialyzeai#88, I only added the isotropic version. I didn't see the regular `MTKNPT` until now. Signed-off-by: Andrew S. Rosen <asrosen93@gmail.com>
1 parent 2450f15 commit 35f0034

1 file changed

Lines changed: 22 additions & 4 deletions

File tree

src/matcalc/_md.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from ase.md import Langevin
1010
from ase.md.andersen import Andersen
1111
from ase.md.bussi import Bussi
12-
from ase.md.nose_hoover_chain import IsotropicMTKNPT
12+
from ase.md.nose_hoover_chain import IsotropicMTKNPT, MTKNPT
1313
from ase.md.npt import NPT
1414
from ase.md.nptberendsen import Inhomogeneous_NPTBerendsen, NPTBerendsen
1515
from ase.md.nvtberendsen import NVTBerendsen
@@ -53,6 +53,7 @@ def __init__(
5353
"npt_nose_hoover",
5454
"npt_berendsen",
5555
"npt_inhomogeneous",
56+
"npt_mtk",
5657
"npt_isotropic_mtk",
5758
] = "nvt",
5859
temperature: int = 300,
@@ -89,8 +90,8 @@ def __init__(
8990
calculator (Calculator): The calculator used for energy, force, and stress evaluations.
9091
Default to the provided calculator.
9192
ensemble (str): Ensemble for MD simulation. Options include "nve", "nvt_langevin",
92-
"nvt_andersen", "nvt_bussi", "npt", "npt_berendsen", "npt_nose_hoover", "npt_mtk".
93-
Default to "nvt".
93+
"nvt_andersen", "nvt_bussi", "npt", "npt_berendsen", "npt_nose_hoover", "npt_mtk",
94+
"npt_isotropic_mtk". Default to "nvt".
9495
temperature (int): Simulation temperature in Kelvin. Default to 300.
9596
timestep (float): Time step in femtoseconds. Default to 1.0.
9697
steps (int): Number of MD simulation steps. Default to 100.
@@ -287,6 +288,23 @@ def _initialize_md(self, atoms: Atoms) -> Any: # noqa: C901
287288
loginterval=self.loginterval,
288289
append_trajectory=self.append_trajectory,
289290
)
291+
elif self.ensemble.lower() == "npt_mtk":
292+
md = MTKNPT(
293+
atoms,
294+
timestep=timestep_fs,
295+
temperature_K=self.temperature,
296+
pressure_au=self.pressure,
297+
tdamp=taut,
298+
pdamp=taup,
299+
tchain=self.tchain,
300+
pchain=self.pchain,
301+
tloop=self.tloop,
302+
ploop=self.ploop,
303+
trajectory=self.trajfile,
304+
logfile=self.logfile,
305+
loginterval=self.loginterval,
306+
append_trajectory=self.append_trajectory,
307+
)
290308
elif self.ensemble.lower() == "npt_isotropic_mtk":
291309
md = IsotropicMTKNPT(
292310
atoms,
@@ -310,7 +328,7 @@ def _initialize_md(self, atoms: Atoms) -> Any: # noqa: C901
310328
"The specified ensemble is not supported, choose from 'nve', 'nvt',"
311329
" 'nvt_nose_hoover', 'nvt_berendsen', 'nvt_langevin', 'nvt_andersen',"
312330
" 'nvt_bussi', 'npt', 'npt_nose_hoover', 'npt_berendsen', 'npt_inhomogeneous',"
313-
" 'npt_isotropic_mtk'."
331+
" 'npt_mtk', 'npt_isotropic_mtk'."
314332
)
315333
return md
316334

0 commit comments

Comments
 (0)