#pyiron
Вопрос:
Я хочу изменить положение атомов, которые удовлетворяют определенному условию.
В настоящее время я могу применить перевод ко всем атомам или к одному атому, но не к нескольким выбранным атомам.
from pyiron import Project
pr = Project('test')
uc = pr.create_ase_bulk('Fe',cubic=True)
uc.set_repeat(2)
shift = [.1,.2,.3]
uc.positions
Например, я хочу перевести только атомы, координата Z которых меньше 1:
uc[uc.positions[:,2] < 1].positions = shift
uc.positions
Он не перемещает атомы и не возвращает никаких ошибок.
Однако перевод только одного атома или всех атомов работает должным образом.
uc.positions = shift
uc.positions
uc[0].position = shift
uc[0]
Ответ №1:
Это должно сработать:
uc.positions[uc.positions[:,2] < 1] = shift
В принципе , когда вы работаете с positions
и cell
т. Д., Всегда безопаснее использовать установщик/получатель атрибутов (а не установщик/получатель Atoms
). Я лично использую сеттер Atoms
только для изменения вида атомов, например uc[0] = 'Ni'
.