コード例 #1
0
ファイル: Pt_stress_cellopt.py プロジェクト: puckvg/ase-copy
f.write(Pt_u3)
f.close()
params = {}
params['pair_style'] = 'eam'
params['pair_coeff'] = ['1 1 {}'.format(pot_fn)]
calc = LAMMPS(specorder=['Pt'], files=[pot_fn], **params)

rng = np.random.RandomState(17)

atoms = bulk('Pt') * (2, 2, 2)
atoms.rattle(stdev=0.1)
atoms.cell += 2 * rng.rand(3, 3)
atoms.calc = calc

assert_allclose(atoms.get_stress(),
                calc.calculate_numerical_stress(atoms),
                atol=1e-4,
                rtol=1e-4)

opt = BFGS(ExpCellFilter(atoms), trajectory='opt.traj')
for i, _ in enumerate(opt.irun(fmax=0.05)):
    pass

cell1_ref = np.array([[0.16298762, 3.89912471, 3.92825365],
                      [4.21007577, 0.63362427, 5.04668170],
                      [4.42895706, 3.29171414, 0.44623618]])

assert_allclose(np.asarray(atoms.cell), cell1_ref, atol=1e-4, rtol=1e-4)
assert_allclose(atoms.get_stress(),
                calc.calculate_numerical_stress(atoms),
                atol=1e-4,
コード例 #2
0
from ase.constraints import ExpCellFilter
from ase.optimize import BFGS

# (For now) reuse eam file stuff from other lammps test:
pot_fn = 'Pt_u3.eam'
f = open(pot_fn, 'w')
f.write(Pt_u3)
f.close()
params = {}
params['pair_style'] = 'eam'
params['pair_coeff'] = ['1 1 {}'.format(pot_fn)]
calc = LAMMPS(specorder=['Pt'], files=[pot_fn], **params)

rng = np.random.RandomState(17)

atoms = bulk('Pt') * (2, 2, 2)
atoms.rattle(stdev=0.1)
atoms.cell += 2 * rng.rand(3, 3)
atoms.calc = calc

stress1 = atoms.get_stress()
stress = calc.calculate_numerical_stress(atoms, d=1e-3)
err = np.abs(stress1 - stress).max()
assert err < 1e-4, 'Stress not as accurate as expected: {}'.format(err)

opt = BFGS(ExpCellFilter(atoms), trajectory='opt.traj')
for i, _ in enumerate(opt.irun(fmax=0.05)):
    pass

assert i < 80, 'Expected 59 iterations, got many more: {}'.format(i)