root / ase / test / verlet.py @ 13
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 |