|
<原子の平面位置を仕分ける> 一種類の原子が下地の金属原子の上で吸着する場合を考えます。 原点からの距離 R を前頁の原子について計算し、小さい順に並べ替えます。
<単位構造> すべての吸着原子を表すための単位構造です。線形代数的には二本の直交ベクトルを取ればよいのですが、ここでは正方形の4隅に出るベクトルの組を単位構造とします。 |
<(100)面の構造>
|
|
<(100)面における(2x2)吸着構造> 再帰的にすべての点を生成することを試みます。今対象としている点が未処理(有効)であれば●をつけて次に行き、処理済みであれば何もしません。 簡略化コードは次のような感じです。Iter(0) で0番目の点から出発して●を打っていきます。
PROCEDURE Iter(currpos: INTEGER);
BEGIN
FOR i:=0 TO 3 DO
rxy.x:= proj[currpos].x + ofs*cos(th[i]);
rxy.y:= proj[currpos].y + ofs*sin(th[i]);
IF isInside(rxy) AND isMatched(nextPos) THEN
Iter(nextPos);
END;
END;
END Iter;
指定した領域内であることをisInside で確認し、nextPos番目の原子位置が有効であることをisMatched で確認します。
右図では吸着原子は下地原子の 1.4倍の大きさです。
|
<(100)面における(2x2)吸着構造>
|
|
<(111)面における(2x2)吸着構造> 上の th を 0, 60, ...,300°として Iter関数を実行すれば吸着原子が描けます。 |
<(111)面における(2x2)吸着構造>
|