====== STM像のシミュレーション ======
===== Al(111) with Octave =====
# Save this file as Al111.py.
from ase.lattice.surface import fcc111
atoms = fcc111('Al', size=(1, 1, 2))
atoms.center(vacuum=4.0, axis=2)
atoms.pbc=True
from ase.calculators.jacapo import Jacapo
calc = Jacapo(nbands = 10, kpts = (4, 4, 1), atoms = atoms)
energy = atoms.get_potential_energy()
print energy
from ase.dft.stm import STM
stm = STM(atoms)
z = 8.0
bias = 1.0
c = stm.get_averaged_current(bias, z)
x, y, h = stm.scan(bias, c, repeat=(3, 5))
print '# Created for Octave '
print '# name: x'
print '# type: matrix'
print '# rows: %d'%(len(x))
print '# columns: %d'%(len(x[0]))
for i in range(len(x)):
for j in range(len(x[0])):
print x[i][j],
print
print '# name: y'
print '# type: matrix'
print '# rows: %d'%(len(y))
print '# columns: %d'%(len(y[0]))
for i in range(len(y)):
for j in range(len(y[0])):
print y[i][j],
print
print '# name: z'
print '# type: matrix'
print '# rows: %d'%(len(h))
print '# columns: %d'%(len(h[0]))
for i in range(len(h)):
for j in range(len(h[0])):
print h[i][j],
print
$ python Al111.py > Al111.data
$ octave
>>> load Al111.data
>>> mesh(x, y, z)
>>> contour(x, y, z)
>>>
===== from ncファイル to octave =====
from ase.calculators.jacapo import read
atoms, calc = read('out.nc')
energy = atoms.get_potential_energy()
print energy
from ase.dft.stm import STM
stm = STM(atoms)
z = 8.0
bias = 1.0
c = stm.get_averaged_current(bias, z)
x, y, h = stm.scan(bias, c, repeat=(3, 5))
print '# Created for Octave '
print '# name: x'
print '# type: matrix'
print '# rows: %d'%(len(x))
print '# columns: %d'%(len(x[0]))
for i in range(len(x)):
for j in range(len(x[0])):
print x[i][j],
print
print '# name: y'
print '# type: matrix'
print '# rows: %d'%(len(y))
print '# columns: %d'%(len(y[0]))
for i in range(len(y)):
for j in range(len(y[0])):
print y[i][j],
print
print '# name: z'
print '# type: matrix'
print '# rows: %d'%(len(h))
print '# columns: %d'%(len(h[0]))
for i in range(len(h)):
for j in range(len(h[0])):
print h[i][j],
print
===== Matplotlibによる描画 =====
from ase.calculators.jacapo import read
atoms, calc = read('out.nc')
from ase.dft.stm import STM
stm = STM(atoms)
z = 8.0
bias = 1.0
c = stm.get_averaged_current(bias, z)
x, y, h = stm.scan(bias, c, repeat=(3, 5))
import matplotlib.pyplot as plt
plt.gca(aspect='equal')
plt.contourf(x, y, h, 40)
plt.hot()
plt.colorbar()
plt.savefig('2d.png')
plt.show()
===== コマンドラインからncファイルを指定 =====
import sys
argvs = sys.argv
argc = len(argvs)
if (argc < 2):
print 'Usage: # python %s filename' % argvs[0]
quit()
from ase.calculators.jacapo import read
atoms, calc = read(argvs[1])
energy = atoms.get_potential_energy()
from ase.dft.stm import STM
stm = STM(atoms)
z = 8.5
bias = 5.0
c = stm.get_averaged_current(bias, z)
x, y, h = stm.scan(bias, c, repeat=(3, 5))
import matplotlib.pyplot as plt
plt.gca(aspect='equal')
plt.contourf(x, y, h, 40)
plt.hot()
plt.colorbar()
plt.show()
注意: Matplotlibはsstg3にしかインストールされていない。
[[seminar:jacapo_sample|目次へもどる]]