====== 総合演習 ======
グラフェンを例に、より詳しい計算の演習を行う。
===== 計算の前に =====
{{ :seminar:graphene.png.001.png?400 |}}
===== プログラムの概要 =====
a0 = 2.461 # Lattice constant of Graphene
from math import sqrt
c1 = ( a0*sqrt(3.0)/2.0, a0/2.0, 0.0)
c2 = (-a0*sqrt(3.0)/2.0, a0/2.0, 0.0)
c3 = (0.0, 0.0, a0*8.0) # Height of 3D unit cell
from ase import Atom
atom1 = Atom('C', (1.0/3.0, 2.0/3.0, 0.5))
atom2 = Atom('C', (2.0/3.0, 1.0/3.0, 0.5))
from ase import Atoms
box1 = Atoms([atom1, atom2], pbc = True)
box1.set_cell([c1, c2, c3], scale_atoms = True)
from ase.calculators.jacapo import Jacapo
solver1 = Jacapo(nbands = 8, kpts = (2, 2, 1), pw = 150, dw = 150)
box1.set_calculator(solver1)
solver1.calculate()
===== 単位格子の設定 =====
b0 = 1.42 # C-C bond length
from math import sqrt
a0 = b0*sqrt(3.0)
ax = a0*sqrt(3.0)/2.0 # ax = b0*3.0/2.0
ay = a0/2.0
az = a0*8 # Height of 3D unit cell
c1 = ( ax, ay, 0.0)
c2 = (-ax, ay, 0.0)
c3 = (0.0, 0.0, az)
unit_cell = [c1, c2, c3] # Unit cell
===== 原子の位置と種類 =====
v1 = (1.0/3.0, 2.0/3.0, 0.5)
v2 = (2.0/3.0, 1.0/3.0, 0.5)
positions = [v1, v2]
from ase import Atom
list_of_atoms = []
for pos in positions:
atm = Atom('C', pos)
list_of_atoms.append(atm)
# # list_of_atoms is a list of [atom1, atom2]
===== 計算パラメーターの設定 =====
# -------------------------
# Calculational conditions
# -------------------------
kwargs = {}
kwargs['nbands'] = 8 # Number of Valence electrons
kwargs['kpts'] = (2, 2, 1) # k-point sampling in the 1st BZ
kwargs['pw'] = 150 # Energy cutoff for wave functions
kwargs['dw'] = 150 # Energy cutoff for charge density
===== 計算の実行 =====
# ---------------------------
# Common part of calculations
# ---------------------------
from ase import Atoms
box1 = Atoms(list_of_atoms, pbc = True)
box1.set_cell(unit_cell, scale_atoms = True)
from ase.calculators.jacapo import Jacapo
solver1 = Jacapo(**kwargs)
box1.set_calculator(solver1)
solver1.calculate()
===== 結果の出力 =====
# ------------------
# Output on screen
# ------------------
print box1.get_total_energy()