回折の起こる逆格子点の選択

結晶格子と逆格子

結晶格子と逆格子は互いにフーリエ変換・逆フーリエ変換の関係にある。ベクトルで記述するとそれぞれの関係を簡潔に書くことができる。 単位胞の繰り返し周期を表し結晶格子の底となるベクトルをabcとする。 これらに対する逆格子の底となるベクトルは次のように定義する。

注意 ここでの逆格子ベクトルの定義は結晶学のものである。通常,物理一般ではこれを2π倍したものを逆格子ベクトルとする。

ここでVは単位胞の体積であり,×はベクトルの外積を,が内積を示す。例えば外積b × cの結果はbc平面に垂直にaのある方を向き,大きさがbc面の面積のベクトルになる。そのため,a ⋅ (b × c)は単位胞の体積となる。つまり,a*b*c*はそれぞれbc平面(A面),ca平面(B面),ab平面(C面)に垂直であり,大きさはそれぞれA面の間隔の逆数,B面の間隔の逆数,C面の間隔の逆数になっている。

このようにa*b*c*を定義すると以下の関係が満たされる。

a*b*c*は逆空間を張るベクトルとなっており,逆空間中の任意の点を指すベクトルguvwを実数としてg = u a* + v b* + w c*と表すことができる。uvwが整数の時(それぞれhklとしよう)はgは逆格子点を指すが,散乱ベクトルsがそのようなgと一致するとき,すなわち逆格子点を指す(s = h a* + k b* + l c*)ときにラウエ条件が満たされ,回折が起こる。この時,結晶格子のミラー指数hklの面(h k l)に対し,幾何学的にsは垂直であり,その大きさは(h k l)の面間隔の逆数に等しい。

格子点の座標

散乱ベクトルが逆格子点を指すときに回折が起こるので,逆格子点の座標を知る必要がある。 与えられているのは格子定数abcαβγであるので,これを元に実空間と逆空間の3次元中の格子点の座標を計算して求める。具体的にはベクトルabcの指す座標(ベクトルの成分表示)を求め,逆格子の底となるベクトルa*b*c*の座標(成分表示)を計算することとなる。

単位胞のa軸をX軸と平行に,b軸をXY平面と平行に,c軸がZ軸の正の方向になるようにとる。 このように置くと,格子ベクトルの成分は格子定数のabcαβγから

となる。逆格子ベクトルの成分は上にある定義に従って計算する。

座標の回転

一般的に知られる剛体の方位を与えるオイラー角は

  1. 剛体とその内部座標(x, y, z)z軸まわりに角度α回転させ,(x′,y′,z′)とする
  2. (x′,y′,z′)x軸まわりに角度β回転させ,(x″,y″,z″)とする。
  3. (x″,y″,z″)z軸まわりに角度γ回転させ,(X, Y, Z)となる。

で示されるαβγで与えられる。座標と回転の与え方の関係からintrinsic rotationと呼ぶ(z − x′−z rotation)。

今回のプログラムでは,これと同等のものとして外側の固定した座標軸回りに回転させるextrinsic rotationで座標の回転を扱っている。

  1. Z軸まわりに角度ϕ回転させる。
  2. X軸まわりに角度χ回転させる。
  3. Z軸まわりに角度ψ回転させる。

こちらはZ − X − Z rotationである。剛体の方位が等しいときはオイラー角とϕ = γ, χ = β, ψ = αの関係である。

P(x, y, z)Z軸まわりに角度ϕ回転させ,P'(x', y', z')とする回転は

次に点P′(x′,y′,z′)X軸まわりに角度χ回転させ,P″(x″,y″,z″)とする回転は

と表現できる。もう一度Z軸まわりに角度ψ回転させることで任意の方向へ回転することができる。この演算により,任意の方向を向いた単位胞のabcの成分を求めることができる。

ベクトルの内積・外積に関しては

のときに

と計算できる(プログラムでは外積しか使用していないが)。

以上の式で結晶に任意の回転を与えたときの逆空間ベクトルのa*b*c*の成分を計算できる。

回折条件の判定

回折が起こると判定するための計算式の導出を以下に記す。

回折が起こる幾何学的な条件は逆格子点がEwald球の表面と重なることである。
故にx0=<0.0でしか回折は起こらないことは分かるので,以降はx0=<0.0の範囲で考える。
さて,点O, P, Qが乗る平面上で考える。

Figure: Mosaicity ω, Distance between RLPoint and center of ES

Figure: Mosaicity ω, Distance between RLPoint and center of ES

ωだけ広がった逆格子点(点?)とEwald球の表面が交差するときに回折が起こる。 これはつまりPに近い点をQ1,遠い点をQ2としたときに

PQ1 =< R =< PQ2

となれば良い。距離を求めるのに2乗の和を取ってから平方根を取るのは計算量が増えるので2乗を取るだけで済ませば良い。

PQ12 =< R2 =< PQ22
PQ12 - R2 =< 0
PQ22 - R2 >= 0

実際はQ1とQ2のどちらが近いかを調べる必要はなく,

(PQ12 - R2) (PQ22 - R2) =< 0

これを判定条件とする。

三角形の余弦定理(a2 = b2 + c2 - 2bc cos A)から

PQ2 = OP2 + OQ2 - 2* OP * OQ * cos(ξ)
PQ12 = OP2 + OQ12 - 2* OP * OQ1 * cos(ξ-ω/2)
PQ22 = OP2 + OQ22 - 2* OP * OQ2 * cos(ξ+ω/2)

PQ12 = R2 + r2 - 2 * R * r * cos(ξ-ω/2)
PQ22 = R2 + r2 - 2 * R * r * cos(ξ+ω/2)

PQ12 - R2 = R2 + r2 - 2 * R * r * cos(ξ-ω/2) - R2
= r2 - 2 * R * r * (cos(ξ) * cos(ω/2) + sin(ξ) * sin(ω/2))
= r2 - 2 * R * (r * cos(ξ) * cos(ω/2) + r * sqrt(1-cos2(ξ)) * sin(ω/2))
= r2 - 2 * R * (r * cos(ξ) * cos(ω/2) + sqrt(r2 - r2 * cos2(ξ)) * sin(ω/2))
= r2 - 2 * R * (abs(x0) * cos(ω/2) + sqrt(r2 - x02) * sin(ω/2))
= r2 - 2 * R * (abs(x0) * cos(ω/2) + sqrt(y02 + z02) * sin(ω/2))

PQ22 - R2 = R2 + r2 - 2 * R * r * cos(ξ+ω/2) - R2
= r2 - 2 * R * (abs(x0) * cos(ω/2) - sqrt(y02 + z02) * sin(ω/2))

判定条件を満たす逆格子点(h, k, l)にはflagを立てておくようにプログラムする。