Skip to content

Commit b669a95

Browse files
committed
bug: fixed sort and dynamic together
Signed-off-by: Nick Papior <[email protected]>
1 parent 7e34a00 commit b669a95

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

sisl/io/vasp/car.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,15 @@ def write_geometry(self, geometry, dynamic=None, sort=False):
5050
--------
5151
geometry_sort: method used to sort atoms in geometry
5252
"""
53-
if sort:
54-
geometry = self.geometry_sort(geometry)
55-
5653
# Check that we can write to the file
5754
sile_raise_write(self)
5855

56+
if sort:
57+
geometry, idx = self.geometry_sort(geometry, ret_index=True)
58+
else:
59+
# small hack to allow dynamic
60+
idx = _a.arangei(len(geometry))
61+
5962
# LABEL
6063
self._write('sisl output\n')
6164

@@ -107,7 +110,7 @@ def todyn(fix):
107110

108111
fmt = '{:18.9f}' * 3
109112
for ia in geometry:
110-
self._write(fmt.format(*geometry.xyz[ia, :]) + todyn(dynamic[ia]))
113+
self._write(fmt.format(*geometry.xyz[ia, :]) + todyn(dynamic[idx[ia]]))
111114

112115
@sile_fh_open(True)
113116
def read_supercell(self):

sisl/io/vasp/sile.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
__all__ = ['SileVASP', 'SileCDFVASP', 'SileBinVASP']
99

1010

11-
def _geometry_sort(geometry):
11+
def _geometry_sort(geometry, ret_index=False):
1212
r""" Order atoms in geometry according to species such that all of one specie is consecutive
1313
1414
When creating VASP input files (`poscarSileVASP` for instance) the equivalent
@@ -28,6 +28,8 @@ def _geometry_sort(geometry):
2828
----------
2929
geometry : Geometry
3030
geometry to be re-ordered
31+
ret_index : bool, optional
32+
return sorted indices
3133
3234
Returns
3335
-------
@@ -43,6 +45,8 @@ def _geometry_sort(geometry):
4345

4446
assert ia == na
4547

48+
if ret_index:
49+
return geometry.sub(idx), idx
4650
return geometry.sub(idx)
4751

4852

0 commit comments

Comments
 (0)