from ase_ext import Atoms from ase_ext.calculators.emt import EMT from ase_ext.constraints import FixBondLength from ase_ext.io import PickleTrajectory from ase_ext.optimize import BFGS a = 3.6 b = a / 2 cu = Atoms('Cu2Ag', positions=[(0, 0, 0), (b, b, 0), (a, a, b)], calculator=EMT()) e0 = cu.get_potential_energy() print(e0) d0 = cu.get_distance(0, 1) cu.set_constraint(FixBondLength(0, 1)) t = PickleTrajectory('cu2ag.traj', 'w', cu) qn = BFGS(cu) qn.attach(t.write) def f(): print(cu.get_distance(0, 1)) qn.attach(f) qn.run(fmax=0.01) assert abs(cu.get_distance(0, 1) - d0) < 1e-14
from ase_ext import Atoms from ase_ext.calculators.emt import EMT from ase_ext.optimize import QuasiNewton n2 = Atoms('N2', positions=[(0, 0, 0), (0, 0, 1.1)], calculator=EMT()) QuasiNewton(n2).run(0.01) print(n2.get_distance(0, 1), n2.get_potential_energy())
from ase_ext import Atom, Atoms m = Atoms('H2') a = m[0] b = Atom('H') for c in [a, b]: assert c.x == 0 c.z = 24.0 assert c.position[2] == 24.0 assert c.symbol == 'H' c.number = 92 assert c.symbol == 'U' c.symbol = 'Fe' assert c.number == 26 c.tag = 42 assert c.tag == 42 c.momentum = (1,2,3) assert m[0].tag == 42 momenta = m.get_momenta() m = Atoms('LiH') for a in m: print(a.symbol) for a in m: if a.symbol == 'H': a.z = 0.75 assert m.get_distance(0, 1) == 0.75 a = m.pop() m += a del m[:1] print(m)
from math import sqrt, pi from ase_ext import Atoms from ase_ext.calculators.emt import EMT from ase_ext.constraints import FixBondLengths from ase_ext.optimize import BFGS, QuasiNewton from ase_ext.neb import SingleCalculatorNEB from ase_ext.lattice.surface import fcc111, add_adsorbate from math import sqrt, cos, sin zpos = cos(134.3 / 2.0 * pi / 180.0) * 1.197 xpos = sin(134.3 / 2.0 * pi / 180.0) * 1.19 co2 = Atoms('COO', positions=[(-xpos + 1.2, 0, -zpos), (-xpos + 1.2, -1.1, -zpos), (-xpos + 1.2, 1.1, -zpos)]) slab = fcc111('Au', size=(2, 2, 4), vacuum=2 * 5, orthogonal=True) slab.center() add_adsorbate(slab, co2, 1.5, 'bridge') slab.set_pbc((True, True, False)) d0 = co2.get_distance(-3, -2) d1 = co2.get_distance(-3, -1) calc = EMT() slab.set_calculator(calc) constraint = FixBondLengths([[-3, -2], [-3, -1]]) slab.set_constraint(constraint) dyn = BFGS(slab, trajectory='relax.traj') dyn.run(fmax=0.05) assert abs(co2.get_distance(-3, -2) - d0) < 1e-14 assert abs(co2.get_distance(-3, -1) - d1) < 1e-14