目次

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にしかインストールされていない。

目次へもどる