root / ase / test / verlet.py @ 4
Historique | Voir | Annoter | Télécharger (868 octet)
| 1 | 1 | tkerber | import numpy as np |
|---|---|---|---|
| 2 | 1 | tkerber | from ase import Atoms |
| 3 | 1 | tkerber | from ase.units import fs |
| 4 | 1 | tkerber | from ase.calculators.test import TestPotential |
| 5 | 1 | tkerber | from ase.calculators.emt import EMT |
| 6 | 1 | tkerber | from ase.md import VelocityVerlet |
| 7 | 1 | tkerber | from ase.io import PickleTrajectory, read |
| 8 | 1 | tkerber | from ase.optimize import QuasiNewton |
| 9 | 1 | tkerber | |
| 10 | 1 | tkerber | np.seterr(all='raise')
|
| 11 | 1 | tkerber | a = Atoms('4X',
|
| 12 | 1 | tkerber | masses=[1, 2, 3, 4], |
| 13 | 1 | tkerber | positions=[(0, 0, 0), |
| 14 | 1 | tkerber | (1, 0, 0), |
| 15 | 1 | tkerber | (0, 1, 0), |
| 16 | 1 | tkerber | (0.1, 0.2, 0.7)], |
| 17 | 1 | tkerber | calculator=TestPotential()) |
| 18 | 1 | tkerber | print a.get_forces()
|
| 19 | 1 | tkerber | md = VelocityVerlet(a, dt=0.5 * fs, logfile='-', loginterval=500) |
| 20 | 1 | tkerber | traj = PickleTrajectory('4N.traj', 'w', a) |
| 21 | 1 | tkerber | md.attach(traj.write, 100)
|
| 22 | 1 | tkerber | e0 = a.get_total_energy() |
| 23 | 1 | tkerber | md.run(steps=10000)
|
| 24 | 1 | tkerber | del traj
|
| 25 | 1 | tkerber | assert abs(read('4N.traj').get_total_energy() - e0) < 0.0001 |
| 26 | 1 | tkerber | |
| 27 | 1 | tkerber | qn = QuasiNewton(a) |
| 28 | 1 | tkerber | qn.run(0.001)
|
| 29 | 1 | tkerber | assert abs(a.get_potential_energy() - 1.0) < 0.000002 |