root / ase / test / CO2_Au111.py @ 4
Historique | Voir | Annoter | Télécharger (1019 octet)
| 1 | 1 | tkerber | from math import sqrt, pi |
|---|---|---|---|
| 2 | 1 | tkerber | from ase import Atoms |
| 3 | 1 | tkerber | from ase.calculators.emt import EMT |
| 4 | 1 | tkerber | from ase.constraints import FixBondLengths |
| 5 | 1 | tkerber | from ase.optimize import BFGS, QuasiNewton |
| 6 | 1 | tkerber | from ase.neb import SingleCalculatorNEB |
| 7 | 1 | tkerber | from ase.lattice.surface import fcc111, add_adsorbate |
| 8 | 1 | tkerber | from math import sqrt, cos, sin |
| 9 | 1 | tkerber | |
| 10 | 1 | tkerber | |
| 11 | 1 | tkerber | zpos = cos(134.3/2.0*pi/180.0)*1.197 |
| 12 | 1 | tkerber | xpos = sin(134.3/2.0*pi/180.0)*1.19 |
| 13 | 1 | tkerber | co2 = Atoms('COO', positions=[(-xpos+1.2,0,-zpos), |
| 14 | 1 | tkerber | (-xpos+1.2,-1.1,-zpos), |
| 15 | 1 | tkerber | (-xpos+1.2,1.1,-zpos)]) |
| 16 | 1 | tkerber | |
| 17 | 1 | tkerber | slab = fcc111('Au', size=(2, 2, 4), vacuum=2*5, orthogonal=True) |
| 18 | 1 | tkerber | slab.center() |
| 19 | 1 | tkerber | add_adsorbate(slab,co2,1.5,'bridge') |
| 20 | 1 | tkerber | slab.set_pbc((True,True,False)) |
| 21 | 1 | tkerber | d0 = co2.get_distance(-3, -2) |
| 22 | 1 | tkerber | d1 = co2.get_distance(-3, -1) |
| 23 | 1 | tkerber | |
| 24 | 1 | tkerber | calc = EMT() |
| 25 | 1 | tkerber | slab.set_calculator(calc) |
| 26 | 1 | tkerber | constraint = FixBondLengths([[-3,-2],[-3,-1]]) |
| 27 | 1 | tkerber | slab.set_constraint(constraint) |
| 28 | 1 | tkerber | dyn = BFGS(slab, trajectory='relax.traj')
|
| 29 | 1 | tkerber | dyn.run(fmax=0.05)
|
| 30 | 1 | tkerber | assert abs(co2.get_distance(-3, -2) - d0) < 1e-14 |
| 31 | 1 | tkerber | assert abs(co2.get_distance(-3, -1) - d1) < 1e-14 |