Saya ingin mengubah posisi atom yang memenuhi kondisi tertentu.

Saat ini, saya dapat menerapkan terjemahan ke semua atom atau satu atom tetapi tidak beberapa atom yang dipilih.

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

Misalnya, saya hanya ingin menerjemahkan atom yang koordinat Z-nya kurang dari 1:

uc[uc.positions[:,2] < 1].positions += shift
uc.positions

Baik itu memindahkan atom atau mengembalikan kesalahan apa pun.

Namun, menerjemahkan hanya satu atom atau semua atom bekerja dengan baik.

uc.positions += shift
uc.positions
uc[0].position += shift
uc[0]
1
Phoenix 12 Mei 2021, 13:27

1 menjawab

Jawaban Terbaik

Yang ini harus bekerja:

uc.positions[uc.positions[:,2] < 1] += shift

Pada prinsipnya ketika Anda bekerja dengan positions, cell dll., selalu lebih aman untuk menggunakan penyetel/pengambil atribut (dan bukan penyetel/pengambil Atoms). Saya pribadi menggunakan penyetel Atoms hanya untuk mengubah spesies atom, mis. uc[0] = 'Ni'.

0
sams-studio 12 Mei 2021, 11:48