Skip to content

Commit a24649e

Browse files
Fix prev_dir behavior in input set generator of MPGGAStaticMaker (#996)
* Fix `prev_dir` behavior in `MPGGAStaticMaker` * Set `inherit_incar=False` throughout MP jobs. * Add a test * add assert maker.input_set_generator.inherit_incar is False to all MP job tests --------- Co-authored-by: Janosh Riebesell <janosh.riebesell@gmail.com>
1 parent 9600cef commit a24649e

File tree

2 files changed

+49
-16
lines changed

2 files changed

+49
-16
lines changed

src/atomate2/vasp/jobs/mp.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ class MPGGARelaxMaker(BaseVaspMaker):
5555

5656
name: str = "MP GGA relax"
5757
input_set_generator: VaspInputGenerator = field(
58-
default_factory=lambda: MPRelaxSet(force_gamma=True, auto_metal_kpoints=True)
58+
default_factory=lambda: MPRelaxSet(
59+
force_gamma=True, auto_metal_kpoints=True, inherit_incar=False
60+
)
5961
)
6062

6163

@@ -90,7 +92,9 @@ class MPGGAStaticMaker(BaseVaspMaker):
9092

9193
name: str = "MP GGA static"
9294
input_set_generator: VaspInputGenerator = field(
93-
default_factory=lambda: MPStaticSet(force_gamma=True, auto_metal_kpoints=True)
95+
default_factory=lambda: MPStaticSet(
96+
force_gamma=True, auto_metal_kpoints=True, inherit_incar=False
97+
)
9498
)
9599

96100

@@ -127,6 +131,7 @@ class MPPreRelaxMaker(BaseVaspMaker):
127131
input_set_generator: VaspInputGenerator = field(
128132
default_factory=lambda: MPScanRelaxSet(
129133
auto_ismear=False,
134+
inherit_incar=False,
130135
user_incar_settings={
131136
"EDIFFG": -0.05,
132137
"GGA": "PS",
@@ -172,6 +177,7 @@ class MPMetaGGARelaxMaker(BaseVaspMaker):
172177
input_set_generator: VaspInputGenerator = field(
173178
default_factory=lambda: MPScanRelaxSet(
174179
auto_ismear=False,
180+
inherit_incar=False,
175181
user_incar_settings={
176182
"GGA": None, # unset GGA, shouldn't be set anyway but best be sure
177183
"LCHARG": True,

tests/vasp/jobs/test_mp.py

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
from collections.abc import Callable
2+
from pathlib import Path
3+
14
import pytest
25
from emmet.core.tasks import TaskDoc
36
from jobflow import run_locally
@@ -6,6 +9,7 @@
69

710
from atomate2.vasp.jobs.mp import (
811
MPGGARelaxMaker,
12+
MPGGAStaticMaker,
913
MPMetaGGARelaxMaker,
1014
MPMetaGGAStaticMaker,
1115
MPPreRelaxMaker,
@@ -32,6 +36,7 @@ def test_mp_pre_relax_maker_default_values():
3236
for key, expected in expected_incar.items():
3337
actual = maker.input_set_generator.config_dict["INCAR"][key]
3438
assert actual == expected, f"{key=}, {actual=}, {expected=}"
39+
assert maker.input_set_generator.inherit_incar is False
3540

3641

3742
def test_mp_meta_gga_relax_maker_default_values():
@@ -41,9 +46,12 @@ def test_mp_meta_gga_relax_maker_default_values():
4146
for key, expected in expected_incar.items():
4247
actual = maker.input_set_generator.config_dict["INCAR"][key]
4348
assert actual == expected, f"{key=}, {actual=}, {expected=}"
49+
assert maker.input_set_generator.inherit_incar is False
4450

4551

46-
def test_mp_meta_gga_static_maker(mock_vasp, clean_dir, vasp_test_dir):
52+
def test_mp_meta_gga_static_maker(
53+
mock_vasp: Callable, clean_dir: None, vasp_test_dir: Path
54+
):
4755
# map from job name to directory containing reference input/output files
4856
ref_paths = {
4957
"MP meta-GGA static": "Si_mp_meta_gga_relax/r2scan_final_static",
@@ -57,11 +65,11 @@ def test_mp_meta_gga_static_maker(mock_vasp, clean_dir, vasp_test_dir):
5765

5866
mock_vasp(ref_paths, fake_run_vasp_kwargs)
5967

60-
job = MPMetaGGAStaticMaker(
61-
input_set_generator=MPScanRelaxSet(
62-
bandgap=0.8249, user_incar_settings={"LWAVE": True, "LCHARG": True}
63-
)
64-
).make(si_struct)
68+
input_set_gen = MPScanRelaxSet(
69+
bandgap=0.8249, user_incar_settings={"LWAVE": True, "LCHARG": True}
70+
)
71+
maker = MPMetaGGAStaticMaker(input_set_generator=input_set_gen)
72+
job = maker.make(si_struct)
6573

6674
# ensure flow runs successfully
6775
responses = run_locally(job, create_folders=True, ensure_success=True)
@@ -70,9 +78,12 @@ def test_mp_meta_gga_static_maker(mock_vasp, clean_dir, vasp_test_dir):
7078
task_doc = responses[job.uuid][1].output
7179
assert isinstance(task_doc, TaskDoc)
7280
assert task_doc.output.energy == pytest.approx(-46.8613738)
81+
assert maker.input_set_generator.inherit_incar is False
7382

7483

75-
def test_mp_meta_gga_relax_maker(mock_vasp, clean_dir, vasp_test_dir):
84+
def test_mp_meta_gga_relax_maker(
85+
mock_vasp: Callable, clean_dir: None, vasp_test_dir: Path
86+
):
7687
# map from job name to directory containing reference input/output files
7788
ref_paths = {
7889
"MP meta-GGA relax": "Si_mp_meta_gga_relax/r2scan_relax",
@@ -88,11 +99,11 @@ def test_mp_meta_gga_relax_maker(mock_vasp, clean_dir, vasp_test_dir):
8899

89100
mock_vasp(ref_paths, fake_run_vasp_kwargs)
90101

91-
job = MPMetaGGARelaxMaker(
92-
input_set_generator=MPScanRelaxSet(
93-
bandgap=0.4786, user_incar_settings={"LWAVE": True, "LCHARG": True}
94-
)
95-
).make(si_struct)
102+
input_set_gen = MPScanRelaxSet(
103+
bandgap=0.4786, user_incar_settings={"LWAVE": True, "LCHARG": True}
104+
)
105+
maker = MPMetaGGARelaxMaker(input_set_generator=input_set_gen)
106+
job = maker.make(si_struct)
96107

97108
# ensure flow runs successfully
98109
responses = run_locally(job, create_folders=True, ensure_success=True)
@@ -101,9 +112,10 @@ def test_mp_meta_gga_relax_maker(mock_vasp, clean_dir, vasp_test_dir):
101112
task_doc = responses[job.uuid][1].output
102113
assert isinstance(task_doc, TaskDoc)
103114
assert task_doc.output.energy == pytest.approx(-46.86703814)
115+
assert maker.input_set_generator.inherit_incar is False
104116

105117

106-
def test_mp_gga_relax_maker(mock_vasp, clean_dir, vasp_test_dir):
118+
def test_mp_gga_relax_maker(mock_vasp: Callable, clean_dir: None, vasp_test_dir: Path):
107119
# map from job name to directory containing reference input/output files
108120
ref_paths = {
109121
"MP GGA relax": "Si_mp_gga_relax/GGA_Relax_1",
@@ -117,7 +129,8 @@ def test_mp_gga_relax_maker(mock_vasp, clean_dir, vasp_test_dir):
117129

118130
mock_vasp(ref_paths, fake_run_vasp_kwargs)
119131

120-
job = MPGGARelaxMaker().make(si_struct)
132+
maker = MPGGARelaxMaker()
133+
job = maker.make(si_struct)
121134

122135
# ensure flow runs successfully
123136
responses = run_locally(job, create_folders=True, ensure_success=True)
@@ -126,3 +139,17 @@ def test_mp_gga_relax_maker(mock_vasp, clean_dir, vasp_test_dir):
126139
task_doc = responses[job.uuid][1].output
127140
assert isinstance(task_doc, TaskDoc)
128141
assert task_doc.output.energy == pytest.approx(-10.84140641)
142+
assert maker.input_set_generator.inherit_incar is False
143+
144+
145+
# TODO ideally should have a set of ref files and a full test for an MP static calc
146+
def test_mp_gga_static_maker_prev_dir(vasp_test_dir: Path):
147+
prev_dir = f"{vasp_test_dir}/Si_hse_band_structure/hse_static/outputs"
148+
structure = Structure.from_file(f"{prev_dir}/POSCAR.gz")
149+
150+
maker = MPGGAStaticMaker()
151+
input_set = maker.input_set_generator.get_input_set(
152+
structure=structure, potcar_spec=True, prev_dir=prev_dir
153+
)
154+
assert input_set.incar["ENCUT"] == 520
155+
assert maker.input_set_generator.inherit_incar is False

0 commit comments

Comments
 (0)