From 9a3dc7d31e30e4fb42a91df2746982f0e46afc65 Mon Sep 17 00:00:00 2001 From: Guido Petretto Date: Fri, 25 Aug 2023 17:15:09 +0200 Subject: [PATCH 1/7] initial implementation of a multi step MD flow --- src/atomate2/vasp/flows/core.py | 94 +++++++++++++++++++++++- src/atomate2/vasp/jobs/core.py | 67 ----------------- src/atomate2/vasp/jobs/md.py | 123 ++++++++++++++++++++++++++++++++ src/atomate2/vasp/schemas/md.py | 14 ++++ src/atomate2/vasp/sets/base.py | 11 ++- 5 files changed, 240 insertions(+), 69 deletions(-) create mode 100644 src/atomate2/vasp/jobs/md.py create mode 100644 src/atomate2/vasp/schemas/md.py diff --git a/src/atomate2/vasp/flows/core.py b/src/atomate2/vasp/flows/core.py index 1be66fbf85..2aed8fd89b 100644 --- a/src/atomate2/vasp/flows/core.py +++ b/src/atomate2/vasp/flows/core.py @@ -7,7 +7,7 @@ from typing import TYPE_CHECKING from emmet.core.vasp.calculation import VaspObject -from jobflow import Flow, Maker +from jobflow import Flow, Maker, OutputReference from atomate2.vasp.jobs.core import ( HSEBSMaker, @@ -16,6 +16,7 @@ RelaxMaker, StaticMaker, ) +from atomate2.vasp.jobs.md import MDMaker, md_output from atomate2.vasp.sets.core import HSEBSSetGenerator, NonSCFSetGenerator if TYPE_CHECKING: @@ -506,3 +507,94 @@ def make(self, structure: Structure, prev_vasp_dir: str | Path | None = None): static_job.output.structure, prev_vasp_dir=static_job.output.dir_name ) return Flow([static_job, bs_job], bs_job.output, name=self.name) + + +@dataclass +class MultiMDMaker(Maker): + """ + Maker to perform an MD run split in several steps. + + Parameters + ---------- + name : str + Name of the flows produced by this maker. + md_maker : .BaseVaspMaker + Maker to use to generate the first relaxation. + """ + + name: str = "multi md" + md_maker: BaseVaspMaker = field(default_factory=MDMaker) + n_runs: int = 5 + + def make( + self, + structure: Structure, + prev_vasp_dir: str | Path | None = None, + traj_ids: list[str] | None = None, + ): + """ + Create a flow with several chained MD runs. + + Parameters + ---------- + structure : .Structure + A pymatgen structure object. + prev_vasp_dir : str or Path or None + A previous VASP calculation directory to copy output files from. + traj_ids: a list of ids of job identifying previous steps of the + MD trajectory. + + Returns + ------- + Flow + A flow containing n_runs MD calculations. + """ + md_job = None + md_jobs = [] + for i in range(1, self.n_runs + 1): + if md_job is None: + md_structure = structure + md_prev_vasp_dir = prev_vasp_dir + else: + md_structure = md_job.output.structure + md_prev_vasp_dir = md_job.output.dir_name + md_job = self.md_maker.make(md_structure, prev_vasp_dir=md_prev_vasp_dir) + md_job.name += f" {i}" + md_jobs.append(md_job) + + output_job = md_output( + structure=md_jobs[-1].output.structure, + vasp_dir=md_jobs[-1].output.dir_name, + traj_ids=[j.uuid for j in md_jobs], + prev_traj_ids=traj_ids, + ) + output_job.name = "molecular dynamics output" + + md_jobs.append(output_job) + + return Flow(md_jobs, output_job.output, name=self.name) + + def restart_from_uuid(self, md_ref: str | OutputReference): + """ + Create a flow from the output reference of another MultiMDMaker. + + The last output will be used as the starting point and the reference to + all the previous steps will be included in the final document. + + Parameters + ---------- + md_ref: str or OutputReference + The reference to the output of another MultiMDMaker + + Returns + ------- + A flow containing n_runs MD calculations. + """ + if isinstance(md_ref, str): + md_ref = OutputReference(md_ref) + + return self.make( + structure=md_ref.structure, + prev_vasp_dir=md_ref.vasp_dir, + traj_ids=md_ref.traj_ids, + ) diff --git a/src/atomate2/vasp/jobs/core.py b/src/atomate2/vasp/jobs/core.py index a75e49d6f2..15815b1f8f 100644 --- a/src/atomate2/vasp/jobs/core.py +++ b/src/atomate2/vasp/jobs/core.py @@ -6,15 +6,6 @@ from dataclasses import dataclass, field from typing import TYPE_CHECKING -from custodian.vasp.handlers import ( - FrozenJobErrorHandler, - IncorrectSmearingHandler, - LargeSigmaHandler, - MeshSymmetryErrorHandler, - PositiveEnergyErrorHandler, - StdErrHandler, - VaspErrorHandler, -) from pymatgen.alchemy.materials import TransformedStructure from pymatgen.alchemy.transmuters import StandardTransmuter @@ -25,7 +16,6 @@ HSERelaxSetGenerator, HSEStaticSetGenerator, HSETightRelaxSetGenerator, - MDSetGenerator, NonSCFSetGenerator, RelaxSetGenerator, StaticSetGenerator, @@ -53,7 +43,6 @@ "TightRelaxMaker", "HSETightRelaxMaker", "TransmuterMaker", - "MDMaker", ] @@ -524,59 +513,3 @@ def make( self.write_additional_data.setdefault("transformations:json", tjson) return super().make.original(self, structure, prev_vasp_dir) - - -@dataclass -class MDMaker(BaseVaspMaker): - """ - Maker to create VASP molecular dynamics jobs. - - Parameters - ---------- - name : str - The job name. - input_set_generator : .VaspInputSetGenerator - A generator used to make the input set. - write_input_set_kwargs : dict - Keyword arguments that will get passed to :obj:`.write_vasp_input_set`. - copy_vasp_kwargs : dict - Keyword arguments that will get passed to :obj:`.copy_vasp_outputs`. - run_vasp_kwargs : dict - Keyword arguments that will get passed to :obj:`.run_vasp`. - task_document_kwargs : dict - Keyword arguments that will get passed to :obj:`.TaskDoc.from_directory`. - stop_children_kwargs : dict - Keyword arguments that will get passed to :obj:`.should_stop_children`. - write_additional_data : dict - Additional data to write to the current directory. Given as a dict of - {filename: data}. Note that if using FireWorks, dictionary keys cannot contain - the "." character which is typically used to denote file extensions. To avoid - this, use the ":" character, which will automatically be converted to ".". E.g. - ``{"my_file:txt": "contents of the file"}``. - """ - - name: str = "molecular dynamics" - - input_set_generator: VaspInputGenerator = field(default_factory=MDSetGenerator) - - # Explicitly pass the handlers to not use the default ones. Some default handlers - # such as PotimErrorHandler do not apply to MD runs. - run_vasp_kwargs: dict = field( - default_factory=lambda: { - "handlers": ( - VaspErrorHandler(), - MeshSymmetryErrorHandler(), - PositiveEnergyErrorHandler(), - FrozenJobErrorHandler(), - StdErrHandler(), - LargeSigmaHandler(), - IncorrectSmearingHandler(), - ) - } - ) - - # Store ionic steps info in a pymatgen Trajectory object instead of in the output - # document. - task_document_kwargs: dict = field( - default_factory=lambda: {"store_trajectory": True} - ) diff --git a/src/atomate2/vasp/jobs/md.py b/src/atomate2/vasp/jobs/md.py new file mode 100644 index 0000000000..61b5d21c58 --- /dev/null +++ b/src/atomate2/vasp/jobs/md.py @@ -0,0 +1,123 @@ +"""Module defining molecular dynamics jobs.""" + +from __future__ import annotations + +import logging +from dataclasses import dataclass, field +from typing import TYPE_CHECKING + +from custodian.vasp.handlers import ( + FrozenJobErrorHandler, + IncorrectSmearingHandler, + LargeSigmaHandler, + MeshSymmetryErrorHandler, + PositiveEnergyErrorHandler, + StdErrHandler, + VaspErrorHandler, +) +from jobflow import Response, job + +from atomate2.vasp.jobs.base import BaseVaspMaker +from atomate2.vasp.schemas.md import MultiMDOutput +from atomate2.vasp.sets.core import MDSetGenerator + +if TYPE_CHECKING: + from pathlib import Path + + from pymatgen.core import Structure + + from atomate2.vasp.sets.base import VaspInputGenerator + + +logger = logging.getLogger(__name__) + + +__all__ = ["MDMaker"] + + +@dataclass +class MDMaker(BaseVaspMaker): + """ + Maker to create VASP molecular dynamics jobs. + + Parameters + ---------- + name : str + The job name. + input_set_generator : .VaspInputSetGenerator + A generator used to make the input set. + write_input_set_kwargs : dict + Keyword arguments that will get passed to :obj:`.write_vasp_input_set`. + copy_vasp_kwargs : dict + Keyword arguments that will get passed to :obj:`.copy_vasp_outputs`. + run_vasp_kwargs : dict + Keyword arguments that will get passed to :obj:`.run_vasp`. + task_document_kwargs : dict + Keyword arguments that will get passed to :obj:`.TaskDoc.from_directory`. + stop_children_kwargs : dict + Keyword arguments that will get passed to :obj:`.should_stop_children`. + write_additional_data : dict + Additional data to write to the current directory. Given as a dict of + {filename: data}. Note that if using FireWorks, dictionary keys cannot contain + the "." character which is typically used to denote file extensions. To avoid + this, use the ":" character, which will automatically be converted to ".". E.g. + ``{"my_file:txt": "contents of the file"}``. + """ + + name: str = "molecular dynamics" + + input_set_generator: VaspInputGenerator = field(default_factory=MDSetGenerator) + + # Explicitly pass the handlers to not use the default ones. Some default handlers + # such as PotimErrorHandler do not apply to MD runs. + run_vasp_kwargs: dict = field( + default_factory=lambda: { + "handlers": ( + VaspErrorHandler(), + MeshSymmetryErrorHandler(), + PositiveEnergyErrorHandler(), + FrozenJobErrorHandler(), + StdErrHandler(), + LargeSigmaHandler(), + IncorrectSmearingHandler(), + ) + } + ) + + # Store ionic steps info in a pymatgen Trajectory object instead of in the output + # document. + task_document_kwargs: dict = field( + default_factory=lambda: {"store_trajectory": True} + ) + + +@job(output_schema=MultiMDOutput) +def md_output( + structure: Structure, + vasp_dir: str | Path, + traj_ids: list[str], + prev_traj_ids: list[str] | None, +): + """ + Collect output references of a multistep MD flow. + + Parameters + ---------- + structure: .Structure + The final structure to be stored. + vasp_dir: str or Path + The path to the folder containing the last calculation of a MultiMDMaker. + traj_ids: list of strings + List of the uuids of the jobs that will compose the trajectory. + + Returns + ------- + The output dictionary. + """ + if prev_traj_ids: + # not += to not modify the original list + traj_ids = traj_ids + prev_traj_ids + output = MultiMDOutput( + structure=structure, vasp_dir=str(vasp_dir), traj_ids=traj_ids + ) + return Response(output=output) diff --git a/src/atomate2/vasp/schemas/md.py b/src/atomate2/vasp/schemas/md.py new file mode 100644 index 0000000000..4c90a05426 --- /dev/null +++ b/src/atomate2/vasp/schemas/md.py @@ -0,0 +1,14 @@ +"""Schemas for MD documents.""" + +from typing import List + +from pydantic import BaseModel, Field +from pymatgen.core import Structure + + +class MultiMDOutput(BaseModel): + """Output of a MultiMD Flow.""" + + structure: Structure = Field("Final structure of the last step of the flow") + vasp_dir: str = Field("Path to the last vasp folder of the flow") + traj_ids: List[str] = Field("List of uuids of the MD calculations in the flow") diff --git a/src/atomate2/vasp/sets/base.py b/src/atomate2/vasp/sets/base.py index d63f847cf1..53e2becb55 100644 --- a/src/atomate2/vasp/sets/base.py +++ b/src/atomate2/vasp/sets/base.py @@ -422,10 +422,19 @@ def get_input_set( # type: ignore bandgap=bandgap, ispin=ispin, ) + site_properties = structure.site_properties + poscar = Poscar( + structure, + velocities=site_properties.get("velocities"), + predictor_corrector=site_properties.get("predictor_corrector"), + predictor_corrector_preamble=structure.properties.get( + "predictor_corrector_preamble" + ), + ) return VaspInputSet( incar=incar, kpoints=kpoints, - poscar=Poscar(structure), + poscar=poscar, potcar=self._get_potcar(structure, potcar_spec=potcar_spec), ) From d11af6837faf64633312b5956dd2d60fad26e4ca Mon Sep 17 00:00:00 2001 From: Guido Petretto Date: Fri, 15 Sep 2023 15:02:11 +0200 Subject: [PATCH 2/7] update md output document --- src/atomate2/vasp/flows/core.py | 8 ++++---- src/atomate2/vasp/jobs/md.py | 17 ++++++++++++----- src/atomate2/vasp/schemas/md.py | 8 ++++++-- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/atomate2/vasp/flows/core.py b/src/atomate2/vasp/flows/core.py index 2aed8fd89b..c9d315602e 100644 --- a/src/atomate2/vasp/flows/core.py +++ b/src/atomate2/vasp/flows/core.py @@ -530,7 +530,7 @@ def make( self, structure: Structure, prev_vasp_dir: str | Path | None = None, - traj_ids: list[str] | None = None, + prev_traj_ids: list[str] | None = None, ): """ Create a flow with several chained MD runs. @@ -541,7 +541,7 @@ def make( A pymatgen structure object. prev_vasp_dir : str or Path or None A previous VASP calculation directory to copy output files from. - traj_ids: a list of ids of job identifying previous steps of the + prev_traj_ids: a list of ids of job identifying previous steps of the MD trajectory. Returns @@ -566,7 +566,7 @@ def make( structure=md_jobs[-1].output.structure, vasp_dir=md_jobs[-1].output.dir_name, traj_ids=[j.uuid for j in md_jobs], - prev_traj_ids=traj_ids, + prev_traj_ids=prev_traj_ids, ) output_job.name = "molecular dynamics output" @@ -596,5 +596,5 @@ def restart_from_uuid(self, md_ref: str | OutputReference): return self.make( structure=md_ref.structure, prev_vasp_dir=md_ref.vasp_dir, - traj_ids=md_ref.traj_ids, + prev_traj_ids=md_ref.full_traj_ids, ) diff --git a/src/atomate2/vasp/jobs/md.py b/src/atomate2/vasp/jobs/md.py index 61b5d21c58..e3907a94ed 100644 --- a/src/atomate2/vasp/jobs/md.py +++ b/src/atomate2/vasp/jobs/md.py @@ -107,17 +107,24 @@ def md_output( The final structure to be stored. vasp_dir: str or Path The path to the folder containing the last calculation of a MultiMDMaker. - traj_ids: list of strings + traj_ids: list of str List of the uuids of the jobs that will compose the trajectory. + prev_traj_ids: list of str + List of the uuids of the jobs coming from previous flow that will be + added to the trajectory. Returns ------- The output dictionary. """ + full_traj_ids = list(traj_ids) if prev_traj_ids: - # not += to not modify the original list - traj_ids = traj_ids + prev_traj_ids - output = MultiMDOutput( - structure=structure, vasp_dir=str(vasp_dir), traj_ids=traj_ids + full_traj_ids = prev_traj_ids + full_traj_ids + output = MultiMDOutput.from_structure( + structure=structure, + meta_structure=structure, + vasp_dir=str(vasp_dir), + traj_ids=traj_ids, + full_traj_ids=full_traj_ids, ) return Response(output=output) diff --git a/src/atomate2/vasp/schemas/md.py b/src/atomate2/vasp/schemas/md.py index 4c90a05426..7806e02134 100644 --- a/src/atomate2/vasp/schemas/md.py +++ b/src/atomate2/vasp/schemas/md.py @@ -2,13 +2,17 @@ from typing import List -from pydantic import BaseModel, Field +from emmet.core.structure import StructureMetadata +from pydantic import Field from pymatgen.core import Structure -class MultiMDOutput(BaseModel): +class MultiMDOutput(StructureMetadata): """Output of a MultiMD Flow.""" structure: Structure = Field("Final structure of the last step of the flow") vasp_dir: str = Field("Path to the last vasp folder of the flow") traj_ids: List[str] = Field("List of uuids of the MD calculations in the flow") + full_traj_ids: List[str] = Field( + "List of uuids of the MD calculations in the flow and in previous linked flows" + ) From a806f74a2ea7176b7fadf97e1fc00b3f12f221d9 Mon Sep 17 00:00:00 2001 From: Guido Petretto Date: Tue, 31 Oct 2023 10:46:02 +0100 Subject: [PATCH 3/7] handle lattice velocities --- src/atomate2/vasp/sets/base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/atomate2/vasp/sets/base.py b/src/atomate2/vasp/sets/base.py index a3a160a92b..2d4c0a7cc7 100644 --- a/src/atomate2/vasp/sets/base.py +++ b/src/atomate2/vasp/sets/base.py @@ -444,6 +444,7 @@ def get_input_set( predictor_corrector_preamble=structure.properties.get( "predictor_corrector_preamble" ), + lattice_velocities=structure.properties.get("lattice_velocities"), ) return VaspInputSet( incar=incar, From c4fe7455452ceffa10221f074d9d7834e58cd2ea Mon Sep 17 00:00:00 2001 From: Guido Petretto Date: Wed, 22 Nov 2023 14:03:41 +0100 Subject: [PATCH 4/7] Updates to MultiMDMaker and tests --- src/atomate2/vasp/flows/core.py | 73 ++++++++++++++++-- src/atomate2/vasp/jobs/md.py | 3 +- src/atomate2/vasp/sets/core.py | 2 +- .../molecular_dynamics_1/inputs/INCAR | 33 ++++++++ .../molecular_dynamics_1/inputs/KPOINTS | 4 + .../molecular_dynamics_1/inputs/POSCAR | 10 +++ .../molecular_dynamics_1/inputs/POTCAR.spec | 1 + .../molecular_dynamics_1/outputs/CONTCAR.gz | Bin 0 -> 295 bytes .../molecular_dynamics_1/outputs/INCAR.gz | Bin 0 -> 266 bytes .../outputs/INCAR.orig.gz | Bin 0 -> 271 bytes .../molecular_dynamics_1/outputs/KPOINTS.gz | Bin 0 -> 91 bytes .../outputs/KPOINTS.orig.gz | Bin 0 -> 96 bytes .../molecular_dynamics_1/outputs/OUTCAR.gz | Bin 0 -> 19378 bytes .../molecular_dynamics_1/outputs/POSCAR.gz | Bin 0 -> 133 bytes .../outputs/POSCAR.orig.gz | Bin 0 -> 138 bytes .../molecular_dynamics_1/outputs/POTCAR.spec | 1 + .../outputs/custodian.json.gz | Bin 0 -> 351 bytes .../outputs/vasprun.xml.gz | Bin 0 -> 46745 bytes .../molecular_dynamics_2/inputs/INCAR | 32 ++++++++ .../molecular_dynamics_2/inputs/KPOINTS | 4 + .../molecular_dynamics_2/inputs/POSCAR | 23 ++++++ .../molecular_dynamics_2/inputs/POTCAR.spec | 1 + .../molecular_dynamics_2/outputs/CONTCAR.gz | Bin 0 -> 302 bytes .../molecular_dynamics_2/outputs/INCAR.gz | Bin 0 -> 259 bytes .../outputs/INCAR.orig.gz | Bin 0 -> 264 bytes .../molecular_dynamics_2/outputs/KPOINTS.gz | Bin 0 -> 91 bytes .../outputs/KPOINTS.orig.gz | Bin 0 -> 96 bytes .../molecular_dynamics_2/outputs/OUTCAR.gz | Bin 0 -> 17703 bytes .../molecular_dynamics_2/outputs/POSCAR.gz | Bin 0 -> 291 bytes .../outputs/POSCAR.orig.gz | Bin 0 -> 296 bytes .../molecular_dynamics_2/outputs/POTCAR.spec | 1 + .../outputs/custodian.json.gz | Bin 0 -> 351 bytes .../outputs/vasprun.xml.gz | Bin 0 -> 31182 bytes .../molecular_dynamics_3/inputs/INCAR | 32 ++++++++ .../molecular_dynamics_3/inputs/KPOINTS | 4 + .../molecular_dynamics_3/inputs/POSCAR | 23 ++++++ .../molecular_dynamics_3/inputs/POTCAR.spec | 1 + .../molecular_dynamics_3/outputs/CONTCAR.gz | Bin 0 -> 298 bytes .../molecular_dynamics_3/outputs/INCAR.gz | Bin 0 -> 259 bytes .../outputs/INCAR.orig.gz | Bin 0 -> 264 bytes .../molecular_dynamics_3/outputs/KPOINTS.gz | Bin 0 -> 91 bytes .../outputs/KPOINTS.orig.gz | Bin 0 -> 96 bytes .../molecular_dynamics_3/outputs/OUTCAR.gz | Bin 0 -> 17805 bytes .../molecular_dynamics_3/outputs/POSCAR.gz | Bin 0 -> 293 bytes .../outputs/POSCAR.orig.gz | Bin 0 -> 298 bytes .../molecular_dynamics_3/outputs/POTCAR.spec | 1 + .../outputs/custodian.json.gz | Bin 0 -> 351 bytes .../outputs/vasprun.xml.gz | Bin 0 -> 31462 bytes tests/vasp/flows/test_core.py | 61 ++++++++++++++- tests/vasp/jobs/test_core.py | 48 ------------ tests/vasp/jobs/test_md.py | 51 ++++++++++++ 51 files changed, 352 insertions(+), 57 deletions(-) create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/INCAR create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/KPOINTS create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/POSCAR create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/POTCAR.spec create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/CONTCAR.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/INCAR.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/INCAR.orig.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/KPOINTS.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/KPOINTS.orig.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/OUTCAR.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/POSCAR.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/POSCAR.orig.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/POTCAR.spec create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/custodian.json.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/vasprun.xml.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/inputs/INCAR create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/inputs/KPOINTS create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/inputs/POSCAR create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/inputs/POTCAR.spec create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/CONTCAR.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/INCAR.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/INCAR.orig.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/KPOINTS.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/KPOINTS.orig.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/OUTCAR.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/POSCAR.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/POSCAR.orig.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/POTCAR.spec create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/custodian.json.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/vasprun.xml.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/INCAR create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/KPOINTS create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/POSCAR create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/POTCAR.spec create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/CONTCAR.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/INCAR.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/INCAR.orig.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/KPOINTS.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/KPOINTS.orig.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/OUTCAR.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/POSCAR.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/POSCAR.orig.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/POTCAR.spec create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/custodian.json.gz create mode 100644 tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/vasprun.xml.gz create mode 100644 tests/vasp/jobs/test_md.py diff --git a/src/atomate2/vasp/flows/core.py b/src/atomate2/vasp/flows/core.py index 60f71c29f4..e231b66013 100644 --- a/src/atomate2/vasp/flows/core.py +++ b/src/atomate2/vasp/flows/core.py @@ -17,7 +17,11 @@ StaticMaker, ) from atomate2.vasp.jobs.md import MDMaker, md_output -from atomate2.vasp.sets.core import HSEBSSetGenerator, NonSCFSetGenerator +from atomate2.vasp.sets.core import ( + HSEBSSetGenerator, + MDSetGenerator, + NonSCFSetGenerator, +) if TYPE_CHECKING: from pathlib import Path @@ -509,13 +513,12 @@ class MultiMDMaker(Maker): ---------- name : str Name of the flows produced by this maker. - md_maker : .BaseVaspMaker + md_makers : .BaseVaspMaker Maker to use to generate the first relaxation. """ name: str = "multi md" - md_maker: BaseVaspMaker = field(default_factory=MDMaker) - n_runs: int = 5 + md_makers: list[BaseVaspMaker] = field(default_factory=lambda: list(MDMaker())) def make( self, @@ -542,14 +545,14 @@ def make( """ md_job = None md_jobs = [] - for i in range(1, self.n_runs + 1): + for i, maker in enumerate(self.md_makers, 1): if md_job is None: md_structure = structure md_prev_dir = prev_dir else: md_structure = md_job.output.structure md_prev_dir = md_job.output.dir_name - md_job = self.md_maker.make(md_structure, prev_dir=md_prev_dir) + md_job = maker.make(md_structure, prev_dir=md_prev_dir) md_job.name += f" {i}" md_jobs.append(md_job) @@ -589,3 +592,61 @@ def restart_from_uuid(self, md_ref: str | OutputReference): prev_dir=md_ref.vasp_dir, prev_traj_ids=md_ref.full_traj_ids, ) + + @classmethod + def from_parameters( + cls, + nsteps: int, + time_step: float, + n_runs: int, + ensemble: str, + start_temp: float, + end_temp: float | None = None, + **kwargs, + ) -> MultiMDMaker: + """ + Create an instance of the Maker based on the standard parameters. + + Set values in the Flow maker, the Job Maker and the VaspInputGenerator, + using them to create the final instance of the Maker. + + Parameters + ---------- + nsteps: int + Number of time steps for simulations. The VASP `NSW` parameter. + time_step: float + The time step (in femtosecond) for the simulation. The VASP + `POTIM` parameter. + n_runs : int + Number of MD runs in the flow. + ensemble: str + Molecular dynamics ensemble to run. Options include `nvt`, `nve`, and `npt`. + start_temp: float + Starting temperature. The VASP `TEBEG` parameter. + end_temp: float or None + Final temperature. The VASP `TEEND` parameter. If None the same + as start_temp. + kwargs: + Other parameters passed + + Returns + ------- + A MultiMDMaker + """ + if end_temp is None: + end_temp = start_temp + md_makers = [] + start_temp_i = start_temp + increment = (end_temp - start_temp) / n_runs + for _ in range(n_runs): + end_temp_i = start_temp_i + increment + generator = MDSetGenerator( + nsteps=nsteps, + time_step=time_step, + ensemble=ensemble, + start_temp=start_temp_i, + end_temp=end_temp_i, + ) + md_makers.append(MDMaker(input_set_generator=generator)) + start_temp_i = end_temp_i + return cls(md_makers=md_makers, **kwargs) diff --git a/src/atomate2/vasp/jobs/md.py b/src/atomate2/vasp/jobs/md.py index e3907a94ed..db54b5581d 100644 --- a/src/atomate2/vasp/jobs/md.py +++ b/src/atomate2/vasp/jobs/md.py @@ -15,6 +15,7 @@ StdErrHandler, VaspErrorHandler, ) +from emmet.core.vasp.calculation import StoreTrajectoryOption from jobflow import Response, job from atomate2.vasp.jobs.base import BaseVaspMaker @@ -87,7 +88,7 @@ class MDMaker(BaseVaspMaker): # Store ionic steps info in a pymatgen Trajectory object instead of in the output # document. task_document_kwargs: dict = field( - default_factory=lambda: {"store_trajectory": True} + default_factory=lambda: {"store_trajectory": StoreTrajectoryOption.PARTIAL} ) diff --git a/src/atomate2/vasp/sets/core.py b/src/atomate2/vasp/sets/core.py index a405eb9fd0..bf8996edcf 100644 --- a/src/atomate2/vasp/sets/core.py +++ b/src/atomate2/vasp/sets/core.py @@ -823,7 +823,7 @@ class MDSetGenerator(VaspInputGenerator): start_temp: float = 300 end_temp: float = 300 nsteps: int = 1000 - time_step: int = 2 + time_step: float = 2 auto_ispin: bool = True def get_incar_updates( diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/INCAR b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/INCAR new file mode 100644 index 0000000000..5385f3acb2 --- /dev/null +++ b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/INCAR @@ -0,0 +1,33 @@ +ALGO = Fast +EDIFF = 1e-05 +EDIFFG = -0.02 +ENAUG = 1360 +ENCUT = 520 +GGA = Ps +IBRION = 0 +ISIF = 2 +ISMEAR = 0 +ISPIN = 2 +ISYM = 0 +KBLOCK = 100 +LAECHG = True +LASPH = True +LCHARG = False +LELF = False +LMIXTAU = True +LORBIT = 11 +LREAL = False +LVTOT = True +LWAVE = False +MAGMOM = 2*0.6 +MAXMIX = 20 +MDALGO = 2 +NELM = 500 +NELMIN = 4 +NSW = 3 +POTIM = 1 +PREC = Normal +SIGMA = 0.2 +SMASS = 0 +TEBEG = 300 +TEEND = 300.0 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/KPOINTS b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/KPOINTS new file mode 100644 index 0000000000..093abbe92b --- /dev/null +++ b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/KPOINTS @@ -0,0 +1,4 @@ +pymatgen with grid density = 100 / number of atoms +0 +Gamma +3 3 3 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/POSCAR b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/POSCAR new file mode 100644 index 0000000000..3c72d993a0 --- /dev/null +++ b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/POSCAR @@ -0,0 +1,10 @@ +Si2 +1.0 + 3.3488980000000002 0.0000000000000000 1.9334870000000000 + 1.1162989999999999 3.1573720000000001 1.9334870000000000 + 0.0000000000000000 0.0000000000000000 3.8669750000000001 +Si +2 +direct + 0.2500000000000000 0.2500000000000000 0.2500000000000000 Si + 0.0000000000000000 0.0000000000000000 0.0000000000000000 Si diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/POTCAR.spec b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/POTCAR.spec new file mode 100644 index 0000000000..e267321d2c --- /dev/null +++ b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/inputs/POTCAR.spec @@ -0,0 +1 @@ +Si diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/CONTCAR.gz new file mode 100644 index 0000000000000000000000000000000000000000..6caf0b9685dd055c221a0eb3bd75e58828e680c8 GIT binary patch literal 295 zcmV+?0oeW@iwFp6dRJut|3gnsR6{{h0L@W5PQ^eB>~o6r=tcg2dfo}%5fDXM#QlYL z^O8V_B1$Z|7_Vo>_C97B{}MwbPH>3rX&iZCiOAUAx-Ohja7wOj->ZuTPKZVsxy7Q4 z>g=>N literal 0 HcmV?d00001 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/INCAR.gz b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/INCAR.gz new file mode 100644 index 0000000000000000000000000000000000000000..12c4ad3ed3784ed45225ee4bb85ab0b30636dcc5 GIT binary patch literal 266 zcmV+l0rmbLiwFp6dRJut|4B|mK~exkkh^ZfFbqX^ensX2F=)BY)-t!V55@uZ9L_WH``gB)YfuRyTFme2Nnmy3k_vNaGhK) zB)}`no|>|R-9uhbmy}kA-Pf+a&A*^J)At1BeUJ4@nsAQ=3Q%57Ol5UI zf_BOTwLs8Xk{V|)O*FxiMli|nAVI<@8DF*0_*e1jmeR4Yp*`|YM6gn|1OJepe|MrZ z4jZ(CjCzUrmO)N=I%~L4PEXhzvFUm|&NJ-5r&Mc`^ xuvIWLFi_A}$SciFN-a{zPg6)N$YGFAXWE&$2KyN*Es002ebBnbcj literal 0 HcmV?d00001 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/KPOINTS.orig.gz b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_1/outputs/KPOINTS.orig.gz new file mode 100644 index 0000000000000000000000000000000000000000..92b96421dacfe770515f95d1c812aeabd06b55e2 GIT binary patch literal 96 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 xgKfDtqIAx6|2YU;G#6_P?5E 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 literal 0 HcmV?d00001 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/KPOINTS.orig.gz b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/KPOINTS.orig.gz new file mode 100644 index 0000000000000000000000000000000000000000..65b1aa127531b5e2a6e08d3274698d5c67a3f47c GIT binary patch literal 96 zcmV-m0H6OKiwFpHdRJut|4UF$NlsK#E^l&aX8 C1SRtT literal 0 HcmV?d00001 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/OUTCAR.gz b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/OUTCAR.gz new file mode 100644 index 0000000000000000000000000000000000000000..161b55657b2d18d017da4c1ef863b14af430d0c1 GIT binary patch literal 17703 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 literal 0 HcmV?d00001 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/POSCAR.gz b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/POSCAR.gz new file mode 100644 index 0000000000000000000000000000000000000000..08ce6d4fb20ce22d983a16edb25e76f4848128b7 GIT binary patch literal 291 zcmV+;0o?u{iwFpHdRJut|4>g;LqSpi-IBX)#4rqodrhGQZ1DXUAQRjONs4QO?2k}3 zZ09aYlQINU@Q3h`{K?y$8m`cK@4T`^WWW(rVuux;VyL(#*KfbnwyB6l8F@zExTwxf z=U4olFt0XOc@494y}0dmZ`9uIAMdZ9JB<{Q#HtfPbN8J_;#qxGPf`!#P}9ND6gkmQ zdeM4cw&D{=`2*}=| literal 0 HcmV?d00001 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/POSCAR.orig.gz b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/POSCAR.orig.gz new file mode 100644 index 0000000000000000000000000000000000000000..e8cffe8eb7e622ea838d56ca08d6767390299173 GIT binary patch literal 296 zcmV+@0oVQ?iwFpHdRJut|4>g;LqSq5Z*pm80Ns+iZNxAPhI>t+1#IyB7$6he2uX@- zgY1t`Hf-lEN|Q1KRPcxJk^ITqof@vtdhfilL}b7bRAPq}o?@uDCf9Gj)V8UJMj3fV z-?*sGPUlzroiML9S9uMybiKIkc5l?)?jP^3pF52dlEkVLL38(=M&en0R!>q7<51JV z(G)q+PW*Cv%_eOp#gj4A0{{S%*^%}D literal 0 HcmV?d00001 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/POTCAR.spec b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/POTCAR.spec new file mode 100644 index 0000000000..e267321d2c --- /dev/null +++ b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/POTCAR.spec @@ -0,0 +1 @@ +Si diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/custodian.json.gz b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_2/outputs/custodian.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..e1b6808bb386a7789f87a3c6a88da817dc043737 GIT binary patch literal 351 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 l_VVm8sd2sj(P{{^?Vy)wD+=4UK>U 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 Oud`;|#6}Jo;r{@{=-w^> literal 0 HcmV?d00001 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/INCAR b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/INCAR new file mode 100644 index 0000000000..f1fb2a1630 --- /dev/null +++ b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/INCAR @@ -0,0 +1,32 @@ +ALGO = Fast +EDIFF = 1e-05 +EDIFFG = -0.02 +ENAUG = 1360 +ENCUT = 520 +GGA = Ps +IBRION = 0 +ISIF = 2 +ISMEAR = -5 +ISPIN = 1 +ISYM = 0 +KBLOCK = 100 +LAECHG = True +LASPH = True +LCHARG = False +LELF = False +LMIXTAU = True +LORBIT = 11 +LREAL = False +LVTOT = True +LWAVE = False +MAXMIX = 20 +MDALGO = 2 +NELM = 500 +NELMIN = 4 +NSW = 3 +POTIM = 1 +PREC = Normal +SIGMA = 0.05 +SMASS = 0 +TEBEG = 300 +TEEND = 300.0 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/KPOINTS b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/KPOINTS new file mode 100644 index 0000000000..093abbe92b --- /dev/null +++ b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/KPOINTS @@ -0,0 +1,4 @@ +pymatgen with grid density = 100 / number of atoms +0 +Gamma +3 3 3 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/POSCAR b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/POSCAR new file mode 100644 index 0000000000..5428183e57 --- /dev/null +++ b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/POSCAR @@ -0,0 +1,23 @@ +Si2 +1.0 + 3.3488980000000002 0.0000000000000000 1.9334870000000000 + 1.1162989999999999 3.1573720000000001 1.9334870000000000 + 0.0000000000000000 0.0000000000000000 3.8669750000000001 +Si +2 +direct + 0.2522405717926650 0.2450634335621342 0.2492943829866818 Si + 0.9977594282073351 0.0049365648378658 0.0007056197833182 Si + + 0.0003589612200000 -0.0028134973000000 -0.0014224528000000 + -0.0003589612200000 0.0028134973000000 0.0014224528000000 + +1 + 1.0000000000000000 + -0.10996701E-01 -0.72234638E-02 -0.42099336E-02 -0.52800025E-02 + 0.2526447900000000 0.2441723500000000 0.2491699700000000 + 0.9973552100000000 0.0058276532000000 0.0008300306800000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/POTCAR.spec b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/POTCAR.spec new file mode 100644 index 0000000000..e267321d2c --- /dev/null +++ b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/inputs/POTCAR.spec @@ -0,0 +1 @@ +Si diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/CONTCAR.gz b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/CONTCAR.gz new file mode 100644 index 0000000000000000000000000000000000000000..3fa946cffb47caf9574f7b370f15eeda3d0337a4 GIT binary patch literal 298 zcmV+_0oDE=iwFpSdRJut|3gnsR6{{h0L@WJYQ#Vcy!R{m9>%nG=|1yO108N>>j?=7TtD9fhj1vZO;x3m;e;RV~e2- zVq~~A!=1+U#Oo|gt{Nu0a@TmzLkY`s{{H&>DV>f&uA+6k+Gx2ny*|2Z ww+p-x*p5A2X6|^k4!gx`gF|RH?XU~ySz;`IxbsT5!~c=+3%xfo*pUMO0B5z5?*IS* literal 0 HcmV?d00001 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/INCAR.gz b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/INCAR.gz new file mode 100644 index 0000000000000000000000000000000000000000..da0dc8207aab9e02bfb688911b6fcfaa768c38f2 GIT binary patch literal 259 zcmV+e0sQ_SiwFpRdRJut|4B|mK~exkkjsvPFbqZa{)+xUs{q67W?{gDsCl3y^s(%s zyN)WA&i{`M5?$q-#B#2UR)^isuD{K1pw9F?OL5<;dNs|uR|i!Bd7Q+G>RYk2Q)a14 z1zIE1ID=`T37%PjNk$r#4302LlbU%n@?0=o-BNdKY-o>irxaMEc91Xf>+jB%#$l6o zz^Ip;kC~Nh{}E>{8K}FxWgs6F- zB=oWDqPvbNmCpZ<4H8}DoWydjjaG-<&#u4CZ=lZfJxg)lt9mufx>pBP0(qRoit1aj zv{PoOO9fgZ(>Q}^q6wZ^fk{Rhl?;wBN|Ty-H1b?9UENZ5Y;0(ca;Fqnq;`-m^6T%; zmd0U|cEG5YoR686Z2u8wE*Yn-G{nY8wxR$V3GJuwltbRi&Um8j$>D{&NMZ%9!*wSm zc(RhS=5T^b`Y-V5%x48-$i^-6jFDOf|9t)49*~T7vJzff4as3j%dD9ik`XE;Ouk$B Opx_^Q^ST#=0RRA`p@YBx literal 0 HcmV?d00001 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/KPOINTS.gz b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/KPOINTS.gz new file mode 100644 index 0000000000000000000000000000000000000000..99ba394ea44e3ee7ac9a41dac0f3fba8309a854f GIT binary patch literal 91 zcmV-h0HpsPiwFpRdRJut|4UF$NlsK#04u1>O)N=I%~L4PEXhzvFUm|&NJ-5r&Mc`^ xuvIWLFi_A}$SciFN-a{zPg6)N$YGFAXWE&$2KyN*Es002z_Bpv_& literal 0 HcmV?d00001 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/KPOINTS.orig.gz b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/KPOINTS.orig.gz new file mode 100644 index 0000000000000000000000000000000000000000..bf0816a1f78d1195b5f5f3f4490e4b50fdedfce6 GIT binary patch literal 96 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 literal 0 HcmV?d00001 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/POSCAR.gz b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/POSCAR.gz new file mode 100644 index 0000000000000000000000000000000000000000..b57a7ece7b508eb63ea52b6608399113bda88964 GIT binary patch literal 293 zcmV+=0owi_iwFpRdRJut|4>g;LqSpi-IBXe#4r$sb5)@R&ZGVJT>uqa2|(bKq5om+ z!@jXG2_ee%^ZL_1bf3{^8m;%v6H7$K*bWNzF^$t%C{4+g?N8cPN@U2${q)sK>g?E4 z>375RZP%2iFiY2`x83K4_BMaKzkWV!P(X${dBRM;Z4e#C!mI{j!A27)9MynXQ1r5` zA2QuF1%cu94{aq$vZ+b1hiUAE`cR|vV5Yz#*&AbxGy=93ZVN?J3F$lzl%xt*#6Fta zrJ-LM`h}s}}E0$TT1Ha;pth>;Q{#RE#ASR06YY@xu*W;(gjC;(6R1M99H< rrb$+lJ#N1MtAftk*MOTcPH!TrXC4-RdOttuKQVj(boU~L)B^wj4+D=Z literal 0 HcmV?d00001 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/POSCAR.orig.gz b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/POSCAR.orig.gz new file mode 100644 index 0000000000000000000000000000000000000000..4d04e8aca15ff7b212d985722392673cde0da60f GIT binary patch literal 298 zcmV+_0oDE=iwFpSdRJut|4>g;LqSq5Z*pm80Ns+iQN%D1hI3V+2F|1X_gw%LTnRwn zl%fA&?ZdvYF$p2c_VfDFK6IbaXd12e&J#;S#@G%D_A!mqStw1(mF-X3R!U^Z$o=%y zOX}>{Q|WiZ^=;Rbr!Y&`r?=hbhW0jpyuW@vY*0XkI(foOzikj5#=@)yV!=ieDIC>+ zSy1${tsgSoH3fm;^$%?&NwTR)u!m{vh5AsV^kAmIBH0^bjWhzb7H$hgR0-)k4wR${ zSHwP=+ohpj8v2Ey(PKkblk9EL)5tU*^m3~WRqOzZaa4>Y7E}VWZSlhmUE+P(CgOSA w9Yn~%dZtNMlRa*~0IPz|+t+}bGEQ$Is%IV+e|kSZ=|3@i0d)5whSUQ905#T;3;+NC literal 0 HcmV?d00001 diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/POTCAR.spec b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/POTCAR.spec new file mode 100644 index 0000000000..e267321d2c --- /dev/null +++ b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/POTCAR.spec @@ -0,0 +1 @@ +Si diff --git a/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/custodian.json.gz b/tests/test_data/vasp/Si_multi_md/molecular_dynamics_3/outputs/custodian.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..8d4c906334e6e21ea28f6d1714638bec8bfa22e0 GIT binary patch literal 351 zcmV-l0igaLiwFpSdRJut|6_G?bZ=y7VQwyJb8l_{g_F%r10fKA?|llhXWiE7MNgi6 z0545LrodJd7&1UpHGOvn8v8>xmBS{?_c6=>yO`YY_^IDAx({4+&nJNzd~v9<)eJhB zV?t%X_Zx_zXFYbejV&$2SmZZWUO8baY&1oKz9{qA{Gq>}^-rx-(hKPnON%p7sSAd( zZ`M?DHyV8$3r;blY27C#)t&KWQw`=6auS2tpF-`OV{Or#M-v@1o(i7#X?tnrVKCbw zwPY|JEQ3T@H)sX&Gly{oIic_Yi17e6j`B4)2jlCbPRaOn6v($jMwJG9wzkn~266pz zDrNEdkxC3-!ok|1yH>J9&vj+}=Ny#X(dJx4S|)x|<=rh#w(8!&E34_E8?MqC1qnxx xgKfDtqO&PQUcNrTNSf!K{-x(J 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 A{3<_zEz&v};EJJ&J@EYK}lx69@u3(4B!I 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 hF7f}~FZV~WZ;6R_iF|(E8t!?); Date: Wed, 22 Nov 2023 14:24:53 +0100 Subject: [PATCH 5/7] fix typing --- src/atomate2/vasp/schemas/md.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/atomate2/vasp/schemas/md.py b/src/atomate2/vasp/schemas/md.py index 7806e02134..c3b6364fb9 100644 --- a/src/atomate2/vasp/schemas/md.py +++ b/src/atomate2/vasp/schemas/md.py @@ -1,7 +1,5 @@ """Schemas for MD documents.""" -from typing import List - from emmet.core.structure import StructureMetadata from pydantic import Field from pymatgen.core import Structure @@ -12,7 +10,7 @@ class MultiMDOutput(StructureMetadata): structure: Structure = Field("Final structure of the last step of the flow") vasp_dir: str = Field("Path to the last vasp folder of the flow") - traj_ids: List[str] = Field("List of uuids of the MD calculations in the flow") - full_traj_ids: List[str] = Field( + traj_ids: list[str] = Field("List of uuids of the MD calculations in the flow") + full_traj_ids: list[str] = Field( "List of uuids of the MD calculations in the flow and in previous linked flows" ) From e2ce5879ac5e7ff4f34c288a7792a78938b8c4fc Mon Sep 17 00:00:00 2001 From: Guido Petretto Date: Tue, 5 Dec 2023 14:25:13 +0100 Subject: [PATCH 6/7] move MD flow to separate module --- src/atomate2/vasp/flows/core.py | 152 +---------------------------- src/atomate2/vasp/flows/md.py | 166 ++++++++++++++++++++++++++++++++ tests/vasp/flows/test_core.py | 61 +----------- tests/vasp/flows/test_md.py | 62 ++++++++++++ 4 files changed, 230 insertions(+), 211 deletions(-) create mode 100644 src/atomate2/vasp/flows/md.py create mode 100644 tests/vasp/flows/test_md.py diff --git a/src/atomate2/vasp/flows/core.py b/src/atomate2/vasp/flows/core.py index e231b66013..3dbaec8a7f 100644 --- a/src/atomate2/vasp/flows/core.py +++ b/src/atomate2/vasp/flows/core.py @@ -7,7 +7,7 @@ from typing import TYPE_CHECKING from emmet.core.vasp.calculation import VaspObject -from jobflow import Flow, Maker, OutputReference +from jobflow import Flow, Maker from atomate2.vasp.jobs.core import ( HSEBSMaker, @@ -16,10 +16,8 @@ RelaxMaker, StaticMaker, ) -from atomate2.vasp.jobs.md import MDMaker, md_output from atomate2.vasp.sets.core import ( HSEBSSetGenerator, - MDSetGenerator, NonSCFSetGenerator, ) @@ -502,151 +500,3 @@ def make(self, structure: Structure, prev_dir: str | Path | None = None) -> Flow static_job.output.structure, prev_dir=static_job.output.dir_name ) return Flow([static_job, bs_job], bs_job.output, name=self.name) - - -@dataclass -class MultiMDMaker(Maker): - """ - Maker to perform an MD run split in several steps. - - Parameters - ---------- - name : str - Name of the flows produced by this maker. - md_makers : .BaseVaspMaker - Maker to use to generate the first relaxation. - """ - - name: str = "multi md" - md_makers: list[BaseVaspMaker] = field(default_factory=lambda: list(MDMaker())) - - def make( - self, - structure: Structure, - prev_dir: str | Path | None = None, - prev_traj_ids: list[str] | None = None, - ): - """ - Create a flow with several chained MD runs. - - Parameters - ---------- - structure : .Structure - A pymatgen structure object. - prev_dir : str or Path or None - A previous VASP calculation directory to copy output files from. - prev_traj_ids: a list of ids of job identifying previous steps of the - MD trajectory. - - Returns - ------- - Flow - A flow containing n_runs MD calculations. - """ - md_job = None - md_jobs = [] - for i, maker in enumerate(self.md_makers, 1): - if md_job is None: - md_structure = structure - md_prev_dir = prev_dir - else: - md_structure = md_job.output.structure - md_prev_dir = md_job.output.dir_name - md_job = maker.make(md_structure, prev_dir=md_prev_dir) - md_job.name += f" {i}" - md_jobs.append(md_job) - - output_job = md_output( - structure=md_jobs[-1].output.structure, - vasp_dir=md_jobs[-1].output.dir_name, - traj_ids=[j.uuid for j in md_jobs], - prev_traj_ids=prev_traj_ids, - ) - output_job.name = "molecular dynamics output" - - md_jobs.append(output_job) - - return Flow(md_jobs, output_job.output, name=self.name) - - def restart_from_uuid(self, md_ref: str | OutputReference): - """ - Create a flow from the output reference of another MultiMDMaker. - - The last output will be used as the starting point and the reference to - all the previous steps will be included in the final document. - - Parameters - ---------- - md_ref: str or OutputReference - The reference to the output of another MultiMDMaker - - Returns - ------- - A flow containing n_runs MD calculations. - """ - if isinstance(md_ref, str): - md_ref = OutputReference(md_ref) - - return self.make( - structure=md_ref.structure, - prev_dir=md_ref.vasp_dir, - prev_traj_ids=md_ref.full_traj_ids, - ) - - @classmethod - def from_parameters( - cls, - nsteps: int, - time_step: float, - n_runs: int, - ensemble: str, - start_temp: float, - end_temp: float | None = None, - **kwargs, - ) -> MultiMDMaker: - """ - Create an instance of the Maker based on the standard parameters. - - Set values in the Flow maker, the Job Maker and the VaspInputGenerator, - using them to create the final instance of the Maker. - - Parameters - ---------- - nsteps: int - Number of time steps for simulations. The VASP `NSW` parameter. - time_step: float - The time step (in femtosecond) for the simulation. The VASP - `POTIM` parameter. - n_runs : int - Number of MD runs in the flow. - ensemble: str - Molecular dynamics ensemble to run. Options include `nvt`, `nve`, and `npt`. - start_temp: float - Starting temperature. The VASP `TEBEG` parameter. - end_temp: float or None - Final temperature. The VASP `TEEND` parameter. If None the same - as start_temp. - kwargs: - Other parameters passed - - Returns - ------- - A MultiMDMaker - """ - if end_temp is None: - end_temp = start_temp - md_makers = [] - start_temp_i = start_temp - increment = (end_temp - start_temp) / n_runs - for _ in range(n_runs): - end_temp_i = start_temp_i + increment - generator = MDSetGenerator( - nsteps=nsteps, - time_step=time_step, - ensemble=ensemble, - start_temp=start_temp_i, - end_temp=end_temp_i, - ) - md_makers.append(MDMaker(input_set_generator=generator)) - start_temp_i = end_temp_i - return cls(md_makers=md_makers, **kwargs) diff --git a/src/atomate2/vasp/flows/md.py b/src/atomate2/vasp/flows/md.py new file mode 100644 index 0000000000..43bf3da3b7 --- /dev/null +++ b/src/atomate2/vasp/flows/md.py @@ -0,0 +1,166 @@ +"""Flows for running molecular dynamics simulations.""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from typing import TYPE_CHECKING + +from jobflow import Flow, Maker, OutputReference + +from atomate2.vasp.jobs.md import MDMaker, md_output +from atomate2.vasp.sets.core import MDSetGenerator + +if TYPE_CHECKING: + from pathlib import Path + + from pymatgen.core import Structure + + from atomate2.vasp.jobs.base import BaseVaspMaker + + +@dataclass +class MultiMDMaker(Maker): + """ + Maker to perform an MD run split in several steps. + + Parameters + ---------- + name : str + Name of the flows produced by this maker. + md_makers : .BaseVaspMaker + Maker to use to generate the first relaxation. + """ + + name: str = "multi md" + md_makers: list[BaseVaspMaker] = field(default_factory=lambda: list(MDMaker())) + + def make( + self, + structure: Structure, + prev_dir: str | Path | None = None, + prev_traj_ids: list[str] | None = None, + ): + """ + Create a flow with several chained MD runs. + + Parameters + ---------- + structure : .Structure + A pymatgen structure object. + prev_dir : str or Path or None + A previous VASP calculation directory to copy output files from. + prev_traj_ids: a list of ids of job identifying previous steps of the + MD trajectory. + + Returns + ------- + Flow + A flow containing n_runs MD calculations. + """ + md_job = None + md_jobs = [] + for i, maker in enumerate(self.md_makers, 1): + if md_job is None: + md_structure = structure + md_prev_dir = prev_dir + else: + md_structure = md_job.output.structure + md_prev_dir = md_job.output.dir_name + md_job = maker.make(md_structure, prev_dir=md_prev_dir) + md_job.name += f" {i}" + md_jobs.append(md_job) + + output_job = md_output( + structure=md_jobs[-1].output.structure, + vasp_dir=md_jobs[-1].output.dir_name, + traj_ids=[j.uuid for j in md_jobs], + prev_traj_ids=prev_traj_ids, + ) + output_job.name = "molecular dynamics output" + + md_jobs.append(output_job) + + return Flow(md_jobs, output_job.output, name=self.name) + + def restart_from_uuid(self, md_ref: str | OutputReference): + """ + Create a flow from the output reference of another MultiMDMaker. + + The last output will be used as the starting point and the reference to + all the previous steps will be included in the final document. + + Parameters + ---------- + md_ref: str or OutputReference + The reference to the output of another MultiMDMaker + + Returns + ------- + A flow containing n_runs MD calculations. + """ + if isinstance(md_ref, str): + md_ref = OutputReference(md_ref) + + return self.make( + structure=md_ref.structure, + prev_dir=md_ref.vasp_dir, + prev_traj_ids=md_ref.full_traj_ids, + ) + + @classmethod + def from_parameters( + cls, + nsteps: int, + time_step: float, + n_runs: int, + ensemble: str, + start_temp: float, + end_temp: float | None = None, + **kwargs, + ) -> MultiMDMaker: + """ + Create an instance of the Maker based on the standard parameters. + + Set values in the Flow maker, the Job Maker and the VaspInputGenerator, + using them to create the final instance of the Maker. + + Parameters + ---------- + nsteps: int + Number of time steps for simulations. The VASP `NSW` parameter. + time_step: float + The time step (in femtosecond) for the simulation. The VASP + `POTIM` parameter. + n_runs : int + Number of MD runs in the flow. + ensemble: str + Molecular dynamics ensemble to run. Options include `nvt`, `nve`, and `npt`. + start_temp: float + Starting temperature. The VASP `TEBEG` parameter. + end_temp: float or None + Final temperature. The VASP `TEEND` parameter. If None the same + as start_temp. + kwargs: + Other parameters passed + + Returns + ------- + A MultiMDMaker + """ + if end_temp is None: + end_temp = start_temp + md_makers = [] + start_temp_i = start_temp + increment = (end_temp - start_temp) / n_runs + for _ in range(n_runs): + end_temp_i = start_temp_i + increment + generator = MDSetGenerator( + nsteps=nsteps, + time_step=time_step, + ensemble=ensemble, + start_temp=start_temp_i, + end_temp=end_temp_i, + ) + md_makers.append(MDMaker(input_set_generator=generator)) + start_temp_i = end_temp_i + return cls(md_makers=md_makers, **kwargs) diff --git a/tests/vasp/flows/test_core.py b/tests/vasp/flows/test_core.py index 568b9f08f9..dcebd64ac0 100644 --- a/tests/vasp/flows/test_core.py +++ b/tests/vasp/flows/test_core.py @@ -1,7 +1,7 @@ import pytest from emmet.core.tasks import TaskDoc from emmet.core.vasp.calculation import VaspObject -from jobflow import Flow, run_locally +from jobflow import run_locally from pymatgen.electronic_structure.bandstructure import ( BandStructure, BandStructureSymmLine, @@ -15,13 +15,10 @@ HSEOpticsMaker, HSEUniformBandStructureMaker, LineModeBandStructureMaker, - MultiMDMaker, OpticsMaker, UniformBandStructureMaker, ) from atomate2.vasp.jobs.core import RelaxMaker -from atomate2.vasp.powerups import update_user_kpoints_settings -from atomate2.vasp.schemas.md import MultiMDOutput from atomate2.vasp.sets.core import RelaxSetGenerator @@ -399,59 +396,3 @@ def test_hse_optics(mock_vasp, clean_dir, si_structure): 0.0, 0.0, ] - - -def test_multi_md_flow(mock_vasp, clean_dir, si_structure): - from emmet.core.tasks import TaskDoc - from jobflow import run_locally - - # mapping from job name to directory containing test files - ref_paths = { - "molecular dynamics 1": "Si_multi_md/molecular_dynamics_1", - "molecular dynamics 2": "Si_multi_md/molecular_dynamics_2", - "molecular dynamics 3": "Si_multi_md/molecular_dynamics_3", - } - - # settings passed to fake_run_vasp; adjust these to check for certain INCAR settings - fake_run_vasp_kwargs = { - "molecular dynamics 1": {"incar_settings": ["NSW", "ISMEAR"]}, - "molecular dynamics 2": {"incar_settings": ["NSW", "ISMEAR"]}, - "molecular dynamics 3": {"incar_settings": ["NSW", "ISMEAR"]}, - } - - # automatically use fake VASP and write POTCAR.spec during the test - mock_vasp(ref_paths, fake_run_vasp_kwargs) - - mdflow1 = MultiMDMaker.from_parameters( - nsteps=3, time_step=1, n_runs=2, ensemble="nvt", start_temp=300 - ).make(si_structure) - mdflow2 = MultiMDMaker.from_parameters( - nsteps=3, time_step=1, n_runs=1, ensemble="nvt", start_temp=300 - ).restart_from_uuid(mdflow1.jobs[-1].output) - # set the name of the continuation MD Job, otherwise the folders for - # files will conflict - mdflow2.jobs[0].name = "molecular dynamics 3" - - flow = Flow([mdflow1, mdflow2]) - flow = update_user_kpoints_settings( - flow, {"grid_density": 100}, name_filter="molecular dynamics" - ) - - # run the flow or job and ensure that it finished running successfully - responses = run_locally(flow, create_folders=True, ensure_success=True) - - # validate the outputs - output_md_1 = responses[flow.jobs[0].jobs[0].uuid][1].output - traj = output_md_1.vasp_objects[VaspObject.TRAJECTORY] - assert len(traj.frame_properties) == 3 - assert isinstance(output_md_1, TaskDoc) - - output_recap_1 = responses[flow.jobs[0].jobs[2].uuid][1].output - assert len(output_recap_1.traj_ids) == 2 - assert len(output_recap_1.full_traj_ids) == 2 - assert isinstance(output_recap_1, MultiMDOutput) - - output_recap_2 = responses[flow.jobs[1].jobs[1].uuid][1].output - assert len(output_recap_2.traj_ids) == 1 - assert len(output_recap_2.full_traj_ids) == 3 - assert isinstance(output_recap_1, MultiMDOutput) diff --git a/tests/vasp/flows/test_md.py b/tests/vasp/flows/test_md.py new file mode 100644 index 0000000000..d9613da39f --- /dev/null +++ b/tests/vasp/flows/test_md.py @@ -0,0 +1,62 @@ +from emmet.core.vasp.calculation import VaspObject +from jobflow import Flow + +from atomate2.vasp.flows.md import MultiMDMaker +from atomate2.vasp.powerups import update_user_kpoints_settings +from atomate2.vasp.schemas.md import MultiMDOutput + + +def test_multi_md_flow(mock_vasp, clean_dir, si_structure): + from emmet.core.tasks import TaskDoc + from jobflow import run_locally + + # mapping from job name to directory containing test files + ref_paths = { + "molecular dynamics 1": "Si_multi_md/molecular_dynamics_1", + "molecular dynamics 2": "Si_multi_md/molecular_dynamics_2", + "molecular dynamics 3": "Si_multi_md/molecular_dynamics_3", + } + + # settings passed to fake_run_vasp; adjust these to check for certain INCAR settings + fake_run_vasp_kwargs = { + "molecular dynamics 1": {"incar_settings": ["NSW", "ISMEAR"]}, + "molecular dynamics 2": {"incar_settings": ["NSW", "ISMEAR"]}, + "molecular dynamics 3": {"incar_settings": ["NSW", "ISMEAR"]}, + } + + # automatically use fake VASP and write POTCAR.spec during the test + mock_vasp(ref_paths, fake_run_vasp_kwargs) + + mdflow1 = MultiMDMaker.from_parameters( + nsteps=3, time_step=1, n_runs=2, ensemble="nvt", start_temp=300 + ).make(si_structure) + mdflow2 = MultiMDMaker.from_parameters( + nsteps=3, time_step=1, n_runs=1, ensemble="nvt", start_temp=300 + ).restart_from_uuid(mdflow1.jobs[-1].output) + # set the name of the continuation MD Job, otherwise the folders for + # files will conflict + mdflow2.jobs[0].name = "molecular dynamics 3" + + flow = Flow([mdflow1, mdflow2]) + flow = update_user_kpoints_settings( + flow, {"grid_density": 100}, name_filter="molecular dynamics" + ) + + # run the flow or job and ensure that it finished running successfully + responses = run_locally(flow, create_folders=True, ensure_success=True) + + # validate the outputs + output_md_1 = responses[flow.jobs[0].jobs[0].uuid][1].output + traj = output_md_1.vasp_objects[VaspObject.TRAJECTORY] + assert len(traj.frame_properties) == 3 + assert isinstance(output_md_1, TaskDoc) + + output_recap_1 = responses[flow.jobs[0].jobs[2].uuid][1].output + assert len(output_recap_1.traj_ids) == 2 + assert len(output_recap_1.full_traj_ids) == 2 + assert isinstance(output_recap_1, MultiMDOutput) + + output_recap_2 = responses[flow.jobs[1].jobs[1].uuid][1].output + assert len(output_recap_2.traj_ids) == 1 + assert len(output_recap_2.full_traj_ids) == 3 + assert isinstance(output_recap_1, MultiMDOutput) From ff8d58de0ea439a38fb337dd905f28ba673cd3dd Mon Sep 17 00:00:00 2001 From: Guido Petretto Date: Tue, 19 Dec 2023 09:32:42 +0100 Subject: [PATCH 7/7] fix md flows and tests --- src/atomate2/vasp/flows/md.py | 6 +++--- src/atomate2/vasp/jobs/md.py | 3 --- tests/vasp/flows/test_md.py | 8 ++++++++ tests/vasp/jobs/test_md.py | 8 +++++--- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/atomate2/vasp/flows/md.py b/src/atomate2/vasp/flows/md.py index 43bf3da3b7..ad1a21c29b 100644 --- a/src/atomate2/vasp/flows/md.py +++ b/src/atomate2/vasp/flows/md.py @@ -32,14 +32,14 @@ class MultiMDMaker(Maker): """ name: str = "multi md" - md_makers: list[BaseVaspMaker] = field(default_factory=lambda: list(MDMaker())) + md_makers: list[BaseVaspMaker] = field(default_factory=lambda: [MDMaker()]) def make( self, structure: Structure, prev_dir: str | Path | None = None, prev_traj_ids: list[str] | None = None, - ): + ) -> Flow: """ Create a flow with several chained MD runs. @@ -82,7 +82,7 @@ def make( return Flow(md_jobs, output_job.output, name=self.name) - def restart_from_uuid(self, md_ref: str | OutputReference): + def restart_from_uuid(self, md_ref: str | OutputReference) -> Flow: """ Create a flow from the output reference of another MultiMDMaker. diff --git a/src/atomate2/vasp/jobs/md.py b/src/atomate2/vasp/jobs/md.py index db54b5581d..86e4d102e4 100644 --- a/src/atomate2/vasp/jobs/md.py +++ b/src/atomate2/vasp/jobs/md.py @@ -33,9 +33,6 @@ logger = logging.getLogger(__name__) -__all__ = ["MDMaker"] - - @dataclass class MDMaker(BaseVaspMaker): """ diff --git a/tests/vasp/flows/test_md.py b/tests/vasp/flows/test_md.py index d9613da39f..61478740dc 100644 --- a/tests/vasp/flows/test_md.py +++ b/tests/vasp/flows/test_md.py @@ -60,3 +60,11 @@ def test_multi_md_flow(mock_vasp, clean_dir, si_structure): assert len(output_recap_2.traj_ids) == 1 assert len(output_recap_2.full_traj_ids) == 3 assert isinstance(output_recap_1, MultiMDOutput) + + +def test_multi_md_flow_restart_from_uuid(): + # check that the correct reference is used if a string is passed + ref_id = "475bf8ab-06ec-4222-8bad-6f9f3979f2ea" + flow = MultiMDMaker().restart_from_uuid(ref_id) + + assert flow.jobs[0].function_kwargs["prev_dir"].uuid == ref_id diff --git a/tests/vasp/jobs/test_md.py b/tests/vasp/jobs/test_md.py index d625dfb5e4..324f360ace 100644 --- a/tests/vasp/jobs/test_md.py +++ b/tests/vasp/jobs/test_md.py @@ -46,6 +46,8 @@ def test_molecular_dynamics(mock_vasp, clean_dir, si_structure): assert output1.calcs_reversed[0].output.ionic_steps is None traj = output1.vasp_objects[VaspObject.TRAJECTORY] assert len(traj.frame_properties) == nsw - # simply check a frame property can be converted to an IonicStep - for frame in traj.frame_properties: - IonicStep(**frame) + # check that a frame property can be converted to an IonicStep + energies = [-11.47041923, -11.46905352, -11.46520398] + for i, frame in enumerate(traj.frame_properties): + ionic_step = IonicStep(**frame) + assert ionic_step.e_wo_entrp == pytest.approx(energies[i])