#author("2023-12-05T11:15:29+09:00","default:StatE","StatE")
#author("2023-12-05T11:19:50+09:00","default:StatE","StatE")
*SLABGEN [#id15fd51]
スラブの構造を作成しSTATEフォーマットで出力するフォートランプログラム群。
限られた対称性の高い結晶の表面にしか対応していないため、
必要に応じてプログラムを追加する必要があります。
複雑な表面の作成にはより一般的な結晶構造作成ソフトや結晶構造可視化ソフト(Materials studio、Avogadro、VESTAなど)を用いるのが良いでしょう。
**ソースの入手 [#iba27ba4]
STATEのユーティリティは以下に置くものとします。
 ${HOME}/STATE/tools

最新版のソースはGitLabのリポジトリから以下のようにクローンします。
 git clone https://gitlab.com/ikutaro/slabgen.git SLABGEN

クローンするのが困難、あるいは無理だった場合、[[リポジトリ>https://gitlab.com/ikutaro/slabgen]]からソースファイルをダウンロードしてユーティリティのディレクトリで以下のようにファイルを展開することで、SLABGENというディレクトリが得られます。
 gzip -c slabgen-master.tar.gz | tar xvf - ;mv slabgen-master SLABGEN
あるいは
 tar zxvf slabgen-master.tgz; mv slabgen-master SLABGEN
を実行して展開します。

** ビルド [#f7b23cec]

SLABGEN以下のディレクトリ構造は以下のようになっています。
 README   example/ src/     work/
- README
- example: 計算方法(README)と計算方法
- src: ソースファイル
- work: 計算実行用のディレクトリ(計算例を多数含む)

srcに移動しmakefileを環境に合わせて編集する。例えばgfortranを使用する場合
 FC=gfortran
 FFLAGS=-O2
 LD=gfortran
 LDFLAGS=
を指定する。
 make
を実行することでプログラムのビルドが完了します。

** 実行方法 [#o42d3dff]
プログラムのパスが通っていることを前提とします。パスが設定されていない場合、$HOME/.bashrcで
 export PATH=${PATH}:${HOME}/STATE/tools/SLABGEN/src
を追加し
 source ~/.bashrc
を実行します。なおホームディレクトリにbash_profileが存在しない場合は上記が機能しない。その場合、
~/.bash_profileを作成し、以下を記入します。
 if [ -f ~/.bashrc ]; then
         . ~/.bashrc
 fi
*** 実行例: Cu(111) [#w95421a1]
以下ではexample/以下の例を用いてプログラムの使い方を記述します。~
入力ファイル: example/cu.in:
 Cu
 6.83119688
 23
 14
 1 1
1行目:元素名~
2行目:バルク結晶の格子定数~
3行目:スラブの原子層数~
4行目:真空の原子層数(真空層の厚みを等価な原子層数の数で表現)~
5行目:表面ユニットセルの次元:プリミティブセルの場合は1 1を、p(2x2)セルの場合は2 2などと入力~
格子定数はBohr半径単位で指定します。~
fcc(111)スラブを作成する場合、以下を実行
 genslab_fcc111
入出力ファイル名を聞かれるので、入力ファイル名にはcu.inを出力ファイル名にはcu.outを指定します。
cu.outに格子ベクトル(Supercell Lattice vectors)や表面をz=0、あるいはスラブの中心をz=0にした原子位置がSTATEフォーマットで出力されるので、必要に応じてコピーして使用します。~
幾つかのプログラムではQuantum-ESPRESSO用フォーマットでも原子位置が出力可能となっています。その場合
 genslab_fcc111 -pw
と-pwというオプションを追加することでatpsというファイルが生成されます。
atpsには格子ベクトルのデータ(ibrav, celldm)、および原子位置が記述されている。
またスラブの構造を確認するために元素名に応じたxyz (およびxsf)ファイルも生成されます。今の例ではCu23.xyzとCu23.xsfが生成されるのでXCrySDenやVESTAで可視化し確認を行う。
*** 実行例: Graphene [#md444edc]
グラフェンの構造を作成する場合は以下の入力ファイルとgenslab_grを使用します。
入力ファイル: gr.in
 C
   4.658169680044d0 37.794522492515405
 5 5  
1行目:元素名~
2行目:面内格子定数、面外格子点数(真空の厚み)~
3行目:スーパセルの次元~
格子定数はBohr半径単位で指定します。
Cu(111)の例と同様、以下を実行すれば良いでしょう。
 genslab_gr
QEフォーマットの構造を生成したい場合、
 genslab_gr -pw
を実行します。
*** 実行例: Armchair graphene nanoribbon [#ye5c4928]
アームチェアグラフェンナノリボンを作成する場合、genagnrを使用します。
入力ファイル: gnr.in
 C
   4.6553909370d0   18.897261246257703
  1 5
1行目: 元素名~
2行目: グラフェンの格子定数, 真空の幅(リボンの表面と垂直方向で共通)~
3行目:ナノリボンの(スーパセルの)次元
この例では5原子炭素幅のナノリボンが生成されます。これまでの例と同様に
 genagnr
あるいは
 genagnr -pw
を実行します。さらに端を水素で終端する場合
 genagnr -h-term
と"-h-term"をオプションとして追加し実行します。現在のところ端の炭素原子あたり一つの水素原子で終端することのみを想定しています。

*** 実行例: RuO2(110) [#e3105532]
Rutile(110)表面を作成する場合、genslab_rutile110を使用します。
入力ファイル
 RuO2
 8.486574435396852D0
 5.870247573118257D0
 0.30478D0
 3
 6
 1 1
1行目: 化合物名(実際にはRutile構造の化学式はMO2と仮定してMを認識して構造のファイルを作成します)~
2行目: 格子定数 a (Bohr)~
3行目: 格子手数 c (Bohr)~
4行目: 内部パラメータ u (dimensionless)~
5行目: 層数 (MO2 trilayerを1層と考える)~
6行目: 真空に対応する層数 (MO2 trilayerを1層と考える)~
7行目: 表面スーパーセルの次元~
他のコマンドと同様
 genslab_rutile110
を実行します。Quantum-ESPRESSOフォーマットの構造を作成するには
 genslab_rutile110 -pw
を実行します。~
以上のコマンドを実行すると化学量論的(MO2)な構造、いわゆるO_bri構造が出力されます。入力ファイルの8行目に
 M_cus
というキーワードを追加するとOが不足した、いわゆるM_cus構造が、
 O_cus
というキーワードを追加するとOが過剰の、いわゆるO_cus構造が出力されます。
**その他の情報 [#m343e9cd]
以下のサイトにはVESTAを使ったスラブの作り方の例が記載されています。
-[[Creating a surface slab model using VESTA>https://ma.issp.u-tokyo.ac.jp/app-post/1668]]
-[[Building slab geometries for catalysis with VESTA>http://hjkgrp.mit.edu/content/building-slab-geometries-catalysis-vesta]]

以下のサイトではpymatgenを利用した表面と界面の作り方が記述されています。
- [[Working with Surfaces and Interfaces>https://workshop.materialsproject.org/lessons/03_heterointerfaces/Main%20Lesson/]]

[[Burai>https://nisihara.wixsite.com/burai]]を使うことでスラブを作成することもできます。スラブはユニットセルの中心に作成されているようなので、ESM計算の際には注意が必要だと思います。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS