Skip to content

Commit f96c36f

Browse files
committed
Add compatibility offline mode
1 parent 19e70ae commit f96c36f

File tree

4 files changed

+89
-63
lines changed

4 files changed

+89
-63
lines changed

atomate/vasp/firetasks/lobster_tasks.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,12 @@ def run_task(self, fw_spec):
162162
c.run()
163163

164164
if os.path.exists(zpath("custodian.json")):
165-
stored_custodian_data = {"custodian": loadfn(zpath("custodian.json"))}
165+
if os.path.exists(zpath("FW_offline.json")):
166+
import json
167+
with open(zpath("custodian.json")) as f:
168+
stored_custodian_data = {"custodian": json.load(f)}
169+
else:
170+
stored_custodian_data = {"custodian": loadfn(zpath("custodian.json"))}
166171
return FWAction(stored_data=stored_custodian_data)
167172

168173

@@ -283,7 +288,7 @@ def run_task(self, fw_spec):
283288
db_file = env_chk(self.get("db_file"), fw_spec)
284289

285290
# db insertion or taskdoc dump
286-
if not db_file:
291+
if not db_file or os.path.exists(zpath("FW_offline.json")):
287292
with open("task_lobster.json", "w") as f:
288293
f.write(json.dumps(task_doc, default=DATETIME_HANDLER))
289294
else:

atomate/vasp/firetasks/parse_outputs.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,10 @@ def run_task(self, fw_spec):
132132
task_doc.update(fw_spec[self.get("fw_spec_field")])
133133

134134
# get the database connection
135-
print(fw_spec)
136135
db_file = env_chk(self.get("db_file"), fw_spec)
137136

138137
# db insertion or taskdoc dump
139-
if not db_file:
138+
if not db_file or os.path.exists(zpath("FW_offline.json")):
140139
with open("task.json", "w") as f:
141140
f.write(json.dumps(task_doc, default=DATETIME_HANDLER))
142141
else:

atomate/vasp/firetasks/run_calc.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1+
from atomate.vasp.config import HALF_KPOINTS_FIRST_RELAX
12
from monty.os.path import zpath
23
from monty.serialization import loadfn
34

4-
from atomate.vasp.config import HALF_KPOINTS_FIRST_RELAX
5-
65
"""
76
This module defines tasks that support running vasp in various ways.
87
"""
@@ -299,7 +298,12 @@ def run_task(self, fw_spec):
299298
c.run()
300299

301300
if os.path.exists(zpath("custodian.json")):
302-
stored_custodian_data = {"custodian": loadfn(zpath("custodian.json"))}
301+
if os.path.exists(zpath("FW_offline.json")):
302+
import json
303+
with open(zpath("custodian.json")) as f:
304+
stored_custodian_data = {"custodian": json.load(f)}
305+
else:
306+
stored_custodian_data = {"custodian": loadfn(zpath("custodian.json"))}
303307
return FWAction(stored_data=stored_custodian_data)
304308

305309

@@ -396,7 +400,7 @@ def _verify_inputs(self):
396400
defaults = {"ISPIN": 1, "ISMEAR": 1, "SIGMA": 0.2}
397401
for p in params_to_check:
398402
if user_incar.get(p, defaults.get(p)) != ref_incar.get(
399-
p, defaults.get(p)
403+
p, defaults.get(p)
400404
):
401405
raise ValueError(f"INCAR value of {p} is inconsistent!")
402406

@@ -407,8 +411,8 @@ def _verify_inputs(self):
407411
os.path.join(self["ref_dir"], "inputs", "KPOINTS")
408412
)
409413
if (
410-
user_kpoints.style != ref_kpoints.style
411-
or user_kpoints.num_kpts != ref_kpoints.num_kpts
414+
user_kpoints.style != ref_kpoints.style
415+
or user_kpoints.num_kpts != ref_kpoints.num_kpts
412416
):
413417
raise ValueError(
414418
"KPOINT files are inconsistent! Paths are:\n{}\n{} with kpoints {} and {}".format(
@@ -426,8 +430,8 @@ def _verify_inputs(self):
426430
os.path.join(self["ref_dir"], "inputs", "POSCAR")
427431
)
428432
if (
429-
user_poscar.natoms != ref_poscar.natoms
430-
or user_poscar.site_symbols != ref_poscar.site_symbols
433+
user_poscar.natoms != ref_poscar.natoms
434+
or user_poscar.site_symbols != ref_poscar.site_symbols
431435
):
432436
raise ValueError(
433437
"POSCAR files are inconsistent! Paths are:\n{}\n{}".format(

atomate/vasp/workflows/base/lobster.py

Lines changed: 69 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,19 @@
2626

2727

2828
def get_wf_lobster(
29-
structure: Structure,
30-
calculation_type: str = "standard",
31-
delete_all_wavecars: bool = True,
32-
user_lobsterin_settings: dict = None,
33-
user_incar_settings: dict = None,
34-
user_kpoints_settings: dict = None,
35-
user_supplied_basis: dict = None,
36-
isym: int = 0,
37-
c: dict = None,
38-
additional_outputs: List[str] = None,
39-
additional_optimization: bool = False,
40-
user_incar_settings_optimization: dict = None,
41-
user_kpoints_settings_optimization: dict = None,
29+
structure: Structure,
30+
calculation_type: str = "standard",
31+
delete_all_wavecars: bool = True,
32+
user_lobsterin_settings: dict = None,
33+
user_incar_settings: dict = None,
34+
user_kpoints_settings: dict = None,
35+
user_supplied_basis: dict = None,
36+
isym: int = 0,
37+
c: dict = None,
38+
additional_outputs: List[str] = None,
39+
additional_optimization: bool = False,
40+
user_incar_settings_optimization: dict = None,
41+
user_kpoints_settings_optimization: dict = None,
4242
) -> Workflow:
4343
"""
4444
Creates a workflow for a static Vasp calculation followed by a Lobster calculation.
@@ -82,16 +82,22 @@ def get_wf_lobster(
8282
if additional_optimization:
8383

8484
# add an additional optimization firework
85-
optmize_fw = OptimizeFW(structure, override_default_vasp_params={"user_potcar_functional": "PBE_54",
86-
"user_potcar_settings": {"W": "W_sv"},
87-
"user_kpoints_settings": user_kpoints_settings_optimization,
88-
"user_incar_settings": user_incar_settings_optimization},
89-
vasp_cmd=vasp_cmd,
90-
db_file=db_file,
91-
)
85+
optmize_fw = OptimizeFW(
86+
structure,
87+
override_default_vasp_params={
88+
"user_potcar_functional": "PBE_54",
89+
"user_potcar_settings": {"W": "W_sv"},
90+
"user_kpoints_settings": user_kpoints_settings_optimization,
91+
"user_incar_settings": user_incar_settings_optimization,
92+
},
93+
vasp_cmd=vasp_cmd,
94+
db_file=db_file,
95+
)
9296
fws.append(optmize_fw)
9397
user_incar_settings_here = lobster_set.incar.as_dict()
94-
user_incar_settings_here.update({"ISTART": None, "LAECHG": None, "LCHARG": None, "LVHAR": None})
98+
user_incar_settings_here.update(
99+
{"ISTART": None, "LAECHG": None, "LCHARG": None, "LVHAR": None}
100+
)
95101
if user_incar_settings is not None:
96102
user_incar_settings_here.update(user_incar_settings)
97103
user_kpoints_settings_here = lobster_set.kpoints.as_dict()
@@ -100,12 +106,15 @@ def get_wf_lobster(
100106
staticfw = StaticFW(
101107
structure=structure,
102108
vasp_input_set=lobster_set,
103-
vasp_input_set_params={"user_incar_settings": user_incar_settings_here, "user_potcar_functional": "PBE_54",
104-
"user_potcar_settings": {"W": "W_sv"},
105-
"user_kpoints_settings": user_kpoints_settings_here},
109+
vasp_input_set_params={
110+
"user_incar_settings": user_incar_settings_here,
111+
"user_potcar_functional": "PBE_54",
112+
"user_potcar_settings": {"W": "W_sv"},
113+
"user_kpoints_settings": user_kpoints_settings_here,
114+
},
106115
vasp_cmd=vasp_cmd,
107116
db_file=db_file,
108-
parents=optmize_fw
117+
parents=optmize_fw,
109118
)
110119

111120
else:
@@ -139,20 +148,20 @@ def get_wf_lobster(
139148

140149

141150
def get_wf_lobster_test_basis(
142-
structure: Structure,
143-
calculation_type: str = "standard",
144-
delete_all_wavecars: bool = True,
145-
c: dict = None,
146-
address_max_basis: Optional[str] = None,
147-
address_min_basis: Optional[str] = None,
148-
user_lobsterin_settings: dict = None,
149-
user_incar_settings: dict = None,
150-
user_kpoints_settings: dict = None,
151-
isym: int = 0,
152-
additional_outputs: List[str] = None,
153-
additional_optimization: bool = False,
154-
user_incar_settings_optimization: dict = None,
155-
user_kpoints_settings_optimization: dict = None,
151+
structure: Structure,
152+
calculation_type: str = "standard",
153+
delete_all_wavecars: bool = True,
154+
c: dict = None,
155+
address_max_basis: Optional[str] = None,
156+
address_min_basis: Optional[str] = None,
157+
user_lobsterin_settings: dict = None,
158+
user_incar_settings: dict = None,
159+
user_kpoints_settings: dict = None,
160+
isym: int = 0,
161+
additional_outputs: List[str] = None,
162+
additional_optimization: bool = False,
163+
user_incar_settings_optimization: dict = None,
164+
user_kpoints_settings_optimization: dict = None,
156165
) -> Workflow:
157166
"""
158167
creates workflow where all possible basis functions for one compound are tested
@@ -196,13 +205,17 @@ def get_wf_lobster_test_basis(
196205

197206
fws = []
198207
if additional_optimization:
199-
optmize_fw = OptimizeFW(structure, override_default_vasp_params={"user_potcar_functional": "PBE_54",
200-
"user_potcar_settings": {"W": "W_sv"},
201-
"user_kpoints_settings": user_kpoints_settings_optimization,
202-
"user_incar_settings": user_incar_settings_optimization},
203-
vasp_cmd=vasp_cmd,
204-
db_file=db_file,
205-
)
208+
optmize_fw = OptimizeFW(
209+
structure,
210+
override_default_vasp_params={
211+
"user_potcar_functional": "PBE_54",
212+
"user_potcar_settings": {"W": "W_sv"},
213+
"user_kpoints_settings": user_kpoints_settings_optimization,
214+
"user_incar_settings": user_incar_settings_optimization,
215+
},
216+
vasp_cmd=vasp_cmd,
217+
db_file=db_file,
218+
)
206219
fws.append(optmize_fw)
207220

208221
# get the basis from dict_max_basis
@@ -235,21 +248,26 @@ def get_wf_lobster_test_basis(
235248
if additional_optimization:
236249

237250
user_incar_settings_here = inputset.incar.as_dict()
238-
user_incar_settings_here.update({"ISTART": None, "LAECHG": None, "LCHARG": None, "LVHAR": None})
251+
user_incar_settings_here.update(
252+
{"ISTART": None, "LAECHG": None, "LCHARG": None, "LVHAR": None}
253+
)
239254
if user_incar_settings is not None:
240255
user_incar_settings_here.update(user_incar_settings)
241256
user_kpoints_settings_here = inputset.kpoints.as_dict()
242257
if user_kpoints_settings is not None:
243258
user_kpoints_settings_here.update(user_kpoints_settings)
244259
staticfw = StaticFW(
245260
structure=structure,
246-
vasp_input_set_params={"user_incar_settings": user_incar_settings_here, "user_potcar_functional": "PBE_54",
247-
"user_potcar_settings": {"W": "W_sv"},
248-
"user_kpoints_settings": user_kpoints_settings_here},
261+
vasp_input_set_params={
262+
"user_incar_settings": user_incar_settings_here,
263+
"user_potcar_functional": "PBE_54",
264+
"user_potcar_settings": {"W": "W_sv"},
265+
"user_kpoints_settings": user_kpoints_settings_here,
266+
},
249267
vasp_cmd=vasp_cmd,
250268
db_file=db_file,
251269
name="static",
252-
parents=optmize_fw
270+
parents=optmize_fw,
253271
)
254272
else:
255273
staticfw = StaticFW(

0 commit comments

Comments
 (0)