示例#1
0
#view(initial)

# create final
final = initial.copy()
final.set_calculator(EMT())
final.set_constraint(constraint)
final[-2].position = final[-1].position
final[-1].x = d
final[-1].y = d / sqrt(3)
dyn = Optimizer(final)
dyn.run(fmax=0.1)
#view(final)

# create 2 intermediate step neb
neb = SingleCalculatorNEB([initial, final])
neb.refine(2)
neb.set_calculators(EMT())
assert neb.n() == 4

dyn = Optimizer(neb, maxstep=0.04, trajectory='mep_2coarse.traj')
dyn.run(fmax=0.1)
#dyn.run(fmax=39.1)

# read from the trajectory
neb = SingleCalculatorNEB('mep_2coarse.traj@-4:')

# refine in the important region
neb.refine(2, 1, 3)
neb.set_calculators(EMT())
dyn = Optimizer(neb, maxstep=0.04, trajectory='mep_2fine.traj')
dyn.run(fmax=0.1)
示例#2
0
#view(initial)

# create final
final = initial.copy()
final.set_calculator(EMT())
final.set_constraint(constraint)
final[-2].position = final[-1].position
final[-1].x = d
final[-1].y = d / sqrt(3)
dyn = Optimizer(final)
dyn.run(fmax=0.1)
#view(final)

# create 2 intermediate step neb
neb = SingleCalculatorNEB([initial, final])
neb.refine(2)
neb.set_calculators(EMT())
assert neb.n() == 4

dyn = Optimizer(neb, maxstep=0.04, trajectory='mep_2coarse.traj')
dyn.run(fmax=0.1)
#dyn.run(fmax=39.1)

# read from the trajectory
neb = SingleCalculatorNEB('mep_2coarse.traj@-4:')

# refine in the important region
neb.refine(2, 1, 3)
neb.set_calculators(EMT())
dyn = Optimizer(neb, maxstep=0.04, trajectory='mep_2fine.traj')
dyn.run(fmax=0.1)
示例#3
0
def test_COCu111_2():
    Optimizer = BFGS

    # Distance between Cu atoms on a (111) surface:
    a = 3.6
    d = a / sqrt(2)
    fcc111 = Atoms(symbols='Cu',
                   cell=[(d, 0, 0), (d / 2, d * sqrt(3) / 2, 0),
                         (d / 2, d * sqrt(3) / 6, -a / sqrt(3))],
                   pbc=True)
    initial = fcc111 * (2, 2, 4)
    initial.set_cell([2 * d, d * sqrt(3), 1])
    initial.set_pbc((1, 1, 0))
    initial.calc = EMT()
    Z = initial.get_positions()[:, 2]
    indices = [i for i, z in enumerate(Z) if z < Z.mean()]
    constraint = FixAtoms(indices=indices)
    initial.set_constraint(constraint)

    print('Relax initial image')
    dyn = Optimizer(initial)
    dyn.run(fmax=0.05)
    Z = initial.get_positions()[:, 2]
    print(Z[0] - Z[1])
    print(Z[1] - Z[2])
    print(Z[2] - Z[3])

    b = 1.2
    h = 1.5
    initial += Atom('C', (d / 2, -b / 2, h))
    initial += Atom('O', (d / 2, +b / 2, h))
    dyn = Optimizer(initial)
    dyn.run(fmax=0.05)
    # view(initial)

    print('Relax final image')
    final = initial.copy()
    final.calc = EMT()
    final.set_constraint(constraint)
    final[-2].position = final[-1].position
    final[-1].x = d
    final[-1].y = d / sqrt(3)
    dyn = Optimizer(final)
    dyn.run(fmax=0.1)
    # view(final)

    print('Create neb with 2 intermediate steps')
    neb = SingleCalculatorNEB([initial, final])
    neb.refine(2)
    assert neb.n() == 4

    print('Optimize neb using a single calculator')
    neb.set_calculators(EMT())
    # print('0001', id(neb.images[0]), id(neb.images[0].calc.atoms))
    dyn = Optimizer(neb, maxstep=0.04, trajectory='mep_2coarse.traj')
    dyn.run(fmax=0.1)
    # dyn.run(fmax=39.1)

    print('Optimize neb using a many calculators')
    neb = SingleCalculatorNEB([initial, final])
    neb.refine(2)
    neb.set_calculators([EMT() for i in range(neb.n())])
    dyn = Optimizer(neb, maxstep=0.04, trajectory='mep_2coarse.traj')
    dyn.run(fmax=0.1)
    # dyn.run(fmax=39.1)

    # read from the trajectory
    neb = SingleCalculatorNEB('mep_2coarse.traj', index='-4:')

    # refine in the important region
    neb.refine(2, 1, 3)
    neb.set_calculators(EMT())
    print('Optimize refined neb using a single calculator')
    dyn = Optimizer(neb, maxstep=0.04, trajectory='mep_2fine.traj')
    dyn.run(fmax=0.1)
    assert len(neb.images) == 8