如何使用结构掩蔽仅修改选定的原子?
How to use masking with structures to modify only selected atoms?
我想修改满足特定条件的原子的位置。
目前,我可以将翻译应用于所有原子或一个原子,但不能应用于多个选定原子。
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
既不移动原子也不returns任何错误。
但是,仅翻译一个原子或所有原子都可以正常工作。
uc.positions += shift
uc.positions
uc[0].position += shift
uc[0]
这个应该有效:
uc.positions[uc.positions[:,2] < 1] += shift
原则上,当您使用 positions
、cell
等时,使用属性的 setter/getter 总是更安全(而不是 setter/getter Atoms
)。我个人使用 Atoms
的 setter 只是为了改变原子种类,例如uc[0] = 'Ni'
.
我想修改满足特定条件的原子的位置。
目前,我可以将翻译应用于所有原子或一个原子,但不能应用于多个选定原子。
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
既不移动原子也不returns任何错误。
但是,仅翻译一个原子或所有原子都可以正常工作。
uc.positions += shift
uc.positions
uc[0].position += shift
uc[0]
这个应该有效:
uc.positions[uc.positions[:,2] < 1] += shift
原则上,当您使用 positions
、cell
等时,使用属性的 setter/getter 总是更安全(而不是 setter/getter Atoms
)。我个人使用 Atoms
的 setter 只是为了改变原子种类,例如uc[0] = 'Ni'
.