Si(111)スラブ模型

3×3の大きさの(111)面を6層(3二重層)重ねたスラブ模型1)ListOfAtomsオブジェクトをつくる。

from math import sqrt
from Numeric import array
############################################
dh = 1.48        # Si-H  bond length
b  = 2.35        # Si-Si bond length
############################################
c = b*4/sqrt(3)  # lattice constant of cubic cell
a = c/sqrt(2)    # side of triangle in (111) plane 
d = b + b/3      # separation of double layers along [111] direction
############################################
NV = 6 # NV-double layer spacing for vacuum 
NL = 3 # Slab contains NL double layers
N = 3  # NxN super structure
############################################
######### unit cell (super cell) setting ##########
u1 = a*sqrt(3)/2*N
u2 = a/2*N
u3 = d*(NL + NV)
a1 = (u1, u2, 0)
a2 = (u1, -u2, 0)
a3 = (0, 0, u3)
###################################################
###################################################
from ASE import Atom
atoms = []
for iLayer in range(NL*2):
  iHLayer = iLayer%2
  iDLayer = iLayer/2
  iShifts = ((iLayer + 1)/2)%3
  for iX in range(N):
    for iY in range(N):
      xPos = (iX + iShifts/3.)/N
      yPos = (iY + iShifts/3.)/N
      zPos = ((1 + iDLayer)*d + iHLayer*b/3)/u3
      atoms.append(Atom('Si', (xPos, yPos, zPos), tag = 1))
# ----------------------------------------------------------
###################################################
from ASE import ListOfAtoms
slab = ListOfAtoms(atoms)
slab.SetUnitCell([a1, a2, a3])
###################################################

できたら最後に

from ASE.IO.xyz import WriteXYZ
WriteXYZ('slab_model.xyz', atoms = slab)

を付け加えてxyzフォーマットファイルを作成し、Jmol/iMolでできを確認せよ。

以下のようにして、スラブの表面と裏面のダングリングボンドを水素で終端できる。

# ----------------------------------------------------------
for iX in range(N):
  for iY in range(N):
    xPos = (iX*1.)/N
    yPos = (iY*1.)/N
    zPos = (d - dh)/u3
    atoms.append(Atom('H', (xPos, yPos, zPos)))
for iX in range(N):
  for iY in range(N):
    xPos = (iX + (NL%3)/3.)/N
    yPos = (iY + (NL%3)/3.)/N
    zPos = (NL*d + b/3 + dh)/u3
    atoms.append(Atom('H', (xPos, yPos, zPos)))
1)
板状の構造模型