Skip to content

Commit 54810fd

Browse files
committed
fixes for trajectory
1 parent 78ecd32 commit 54810fd

File tree

3 files changed

+16
-24
lines changed

3 files changed

+16
-24
lines changed

src/pymatgen/io/jdftx/jdftxoutfileslice.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ class JDFTXOutfileSlice:
179179
jsettings_electronic: JMinSettings | None = None
180180
jsettings_lattice: JMinSettings | None = None
181181
jsettings_ionic: JMinSettings | None = None
182+
constant_lattice: bool | None = None
182183

183184
xc_func: str | None = None
184185

@@ -391,13 +392,9 @@ def _set_trajectory(self) -> Trajectory:
391392
Returns:
392393
Trajectory: pymatgen Trajectory object containing intermediate Structure's of outfile slice calculation.
393394
"""
394-
constant_lattice = False
395-
if self.jsettings_lattice is not None:
396-
if "niterations" in self.jsettings_lattice.params:
397-
constant_lattice = int(self.jsettings_lattice.params["niterations"]) == 0
398-
else:
399-
raise ValueError("Unknown issue due to partial initialization of settings objects.")
400-
self.trajectory = Trajectory.from_structures(structures=self.jstrucs, constant_lattice=constant_lattice)
395+
if self.jstrucs is not None:
396+
structures = [slc.structure for slc in self.jstrucs.slices]
397+
self.trajectory = Trajectory.from_structures(structures=structures, constant_lattice=self.constant_lattice)
401398

402399
def _set_electronic_output(self) -> None:
403400
"""Return a dictionary with all relevant electronic information.
@@ -806,6 +803,8 @@ def _set_min_settings(self, text: list[str]) -> None:
806803
self.jsettings_electronic = self._get_settings_object(text, JMinSettingsElectronic)
807804
self.jsettings_lattice = self._get_settings_object(text, JMinSettingsLattice)
808805
self.jsettings_ionic = self._get_settings_object(text, JMinSettingsIonic)
806+
if self.jsettings_lattice is not None and "niterations" in self.jsettings_lattice.params:
807+
self.constant_lattice = int(self.jsettings_lattice.params["niterations"]) != 0
809808

810809
def _set_geomopt_vars(self, text: list[str]) -> None:
811810
"""Set the geom_opt and geom_opt_type class variables.

src/pymatgen/io/jdftx/outputs.py

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ class is written.
1515

1616
import numpy as np
1717

18-
from pymatgen.core.trajectory import Trajectory
1918
from pymatgen.io.jdftx._output_utils import (
2019
_get_atom_orb_labels_dict,
2120
_get_nbands_from_bandfile_filepath,
@@ -26,6 +25,7 @@ class is written.
2625

2726
if TYPE_CHECKING:
2827
from pymatgen.core.structure import Structure
28+
from pymatgen.core.trajectory import Trajectory
2929
from pymatgen.io.jdftx.jelstep import JElSteps
3030
from pymatgen.io.jdftx.jminsettings import (
3131
JMinSettingsElectronic,
@@ -536,20 +536,16 @@ def __post_init__(self):
536536
setattr(self, var, getattr(self.slices[-1], var))
537537
self.trajectory = self._get_trajectory()
538538

539-
def _get_trajectory(self) -> Trajectory:
539+
def _get_trajectory(self) -> Trajectory | None:
540540
"""Set the trajectory attribute of the JDFTXOutfile object."""
541-
constant_lattice = True
542-
structures = []
543-
for _i, slc in enumerate(self.slices):
544-
structures += slc.jstrucs.slices
545-
if constant_lattice and (slc.jsettings_lattice is not None):
546-
if "niterations" in slc.jsettings_lattice.params:
547-
if int(slc.jsettings_lattice.params["niterations"]) > 1:
548-
constant_lattice = False
541+
traj = None
542+
for outfile_slice in self.slices:
543+
if outfile_slice is not None:
544+
if traj is None:
545+
traj = outfile_slice.trajectory
549546
else:
550-
constant_lattice = False
551-
552-
return Trajectory.from_structures(structures=structures, constant_lattice=constant_lattice)
547+
traj.extend(outfile_slice.trajectory)
548+
return traj
553549

554550
def to_dict(self) -> dict:
555551
"""

tests/io/jdftx/test_jdftxoutfileslice.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from __future__ import annotations
22

33
import math
4-
import re
54

65
import numpy as np
76
import pytest
@@ -29,9 +28,7 @@ def test_jdftxoutfileslice_trajectory():
2928
joutslice = JDFTXOutfileSlice._from_out_slice(ex_slice1)
3029
traj = joutslice.trajectory
3130
assert isinstance(traj, Trajectory)
32-
del joutslice.jsettings_lattice.params["niterations"]
33-
with pytest.raises(ValueError, match=re.escape("Unknown issue due to partial initialization of settings objects.")):
34-
joutslice._set_trajectory()
31+
assert len(traj) == len(joutslice.jstrucs)
3532

3633

3734
def test_get_broadeningvars():

0 commit comments

Comments
 (0)