<原子の平面位置を仕分ける> 一種類の原子が下地の金属原子の上で吸着する場合を考えます。 原点からの距離 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)吸着構造>
|