Source code for ase.constraints.fix_atoms

from ase.constraints.constraint import IndexedConstraint, ints2string


[docs] class FixAtoms(IndexedConstraint): """Fix chosen atoms. Examples -------- Fix all Copper atoms: >>> from ase.build import bulk >>> atoms = bulk('Cu', 'fcc', a=3.6) >>> mask = (atoms.symbols == 'Cu') >>> c = FixAtoms(mask=mask) >>> atoms.set_constraint(c) Fix all atoms with z-coordinate less than 1.0 Angstrom: >>> c = FixAtoms(mask=atoms.positions[:, 2] < 1.0) >>> atoms.set_constraint(c) """ def get_removed_dof(self, atoms): return 3 * len(self.index) def adjust_positions(self, atoms, new): new[self.index] = atoms.positions[self.index] def adjust_forces(self, atoms, forces): forces[self.index] = 0.0 def __repr__(self): clsname = type(self).__name__ indices = ints2string(self.index) return f'{clsname}(indices={indices})' def todict(self): return {'name': 'FixAtoms', 'kwargs': {'indices': self.index.tolist()}}