ステップエディタ:OghmaNanoにおける周期的なオブジェクト配置
1. はじめに
多くのフォトニック・電子デバイス構造は本質的に周期構造を有している。DFB(分布帰還型)回折格子では、正確な間隔で配置された隆起部やスロットの配列が必要となる。フォトニック結晶は、誘電体要素からなる規則的な格子構造によって形成される。プラズモニックメタ表面は、波長未満の間隔で繰り返される共鳴器要素から構成される。こうした構造を個々のオブジェクトごとに作成するのは現実的ではないため、OghmaNanoではステップエディタが用意されており、単一のオブジェクトを基にして3次元空間内の指定位置に自動的にそのコピーを生成する。
このシステムの重要な特性として、生成されるすべてのコピーが元のオブジェクトと同一の光学的・電気的特性を有する点が挙げられる。これらのコピーは独立したオブジェクトではなく、元のオブジェクトから材料設定や層の特性、光学定数をそのまま継承した完全な複製群である。このため、元のオブジェクトのみを編集するだけで周期構造全体を容易に変更することが可能となる。
ステップエディタには、複雑さが段階的に増す3つのモードが用意されている。単純な均一配列を生成するための基本ステップモード、基本格子ベクトルによって構造が定義される結晶モード、そして任意の点配置を実現するためのLuaスクリプトモードである。
2. ステップエディタへのアクセス方法
ステップエディタにアクセスするには、まずOghmaNanoのメインシミュレーションウィンドウ(??)を開きます。複製したいオブジェクトを右クリックしてコンテキストメニューから「Edit object」を選択すると、??に示すオブジェクトエディタが起動します。
オブジェクトエディタ内で「ステップ」という行を探してください。この行には現在設定されているステップパラメータ、すなわちコピー間の平行移動量(dx、dy、dz)および各方向におけるコピー数(nx、ny、nz)が表示されています。「ステップ」行の右端にある「…編集」ボタンをクリックすると、ステップエディタのウィンドウが開きます。
3. 基本ステップモード
ステップエディタはデフォルトで基本ステップモードで起動され、??に示す通りである。このモードは1次元、2次元、または3次元のオブジェクト配列を作成するための最も簡単な方法である。単一のステップベクトル(dx、dy、dz)を指定することで、各軸方向にオブジェクトを何回も配置する。各フィールドの内容は以下の通りである:
- ステップベクトル dx、dy、dz — 各方向における連続するコピー間の移動量です。
- 配置するオブジェクトの個数:x軸方向、y軸方向、z軸方向におけるコピーの数。
例えば、z軸方向に209 nm間隔で10個の要素からなる1次元回折格子を作成する場合、dzに209 nm、nzに10を設定し、dxとdyはゼロのままにします。これが??に示されている構成であり、単純なDFB回折格子の周期に対応します。
add_point() を用いて任意の (x, y, z) 座標に点を配置します。更新ボタンをクリックすると3Dビューが更新されます。4. ブラベー格子モード
非直交的または非均一な周期構造を作成する場合、ステップエディタのツールバーにある「Crystal」ボタンをクリックしてクリスタルモードに切り替えてください(??)。このモードでは、結晶学においてブラベー格子を記述する際に用いられる形式と同様に、3つの原始格子ベクトルa1、a2、a3を用いて周期的配置を定義します。
各オブジェクトの位置は次の式により算出される:
\[ \mathbf{r}_{ijk} = \mathbf{r}_0 + i\,\mathbf{a}_1 + j\,\mathbf{a}_2 + k\,\mathbf{a}_3 \]
ここでi、j、kはそれぞれ0からnx−1、ny−1、nz−1までの整数インデックスであり、r₀は原点である。a1、a2、a3を適切に選定することで、単純立方格子、面心立方格子、体心立方格子、六方格子、あるいは任意の非直交的な配置を含むあらゆるブラベー格子を構築することが可能となる。
5. Luaスクリプトモード
完全に任意な点分布、すなわち螺旋構造や準結晶、あるいは単純な格子として表現できないあらゆる幾何形状を生成する場合、ステップエディタにはLuaスクリプト用のインターフェースが用意されており、これはLuaスクリプトボタン(??)をクリックすることで利用可能となる。
この文脈においては、2つの組み込み関数が利用可能である:
clear_points()— これまでに定義されたすべての点を削除します。add_point(x, y, z)— オブジェクトのコピーを、メートル単位で指定された位置 (x, y, z) に配置する。
これらの呼び出しの間には任意のLuaコードを記述可能であり、ループ処理や条件分岐、三角関数、さらにはmath.random()を利用した乱数生成も行えます。スクリプトの編集後、更新ボタンをクリックすることで点分布が再生成され、3Dビューも更新されます。
簡単な例として、z軸方向上に等間隔でオブジェクトを配置し、各位置にわずかなランダムなばらつきを加える方法を以下に示す。これは回折格子構造における製造上の不規則性をモデル化する際に有用である。
clear_points()
N = 14
lambda = 240e-9
roughness = 4e-9 -- set to 0, 1e-9, 2e-9, 5e-9, etc.
z = 0.0
for n = 1, N do
for i = 1, 10 do
add_point(0.0, 0.0, z + (math.random() * 2.0 - 1.0) * roughness)
z = z + lambda
end
end
6. 例:六方格子
クリスタルモードの実用的な例として、フォトニック結晶や六方配列したナノピラーアレイの作成が挙げられる。格子エディタの設定内容は??に、生成された3次元構造は??に示されている。
主要な値は a2_x = a/2 = 1.5 µm、および a2_y = a√3/2 = 2.598 µmであり、これらにより a1とa2の間に60°の角度が生じ、六方対称性が形成される。面外方向のベクトルであるa3は、単純にz軸方向における層間の繰り返し距離となる。
7. 例:Luaスクリプトを用いた二重螺旋構造の生成
Luaスクリプトモードで作成可能な、より視覚的に複雑な例としては二重螺旋構造が挙げられる。これは共通の軸を中心に巻き付く2本の螺旋状ストランドから成る。このような幾何構造はブラベー格子として表現できず、スクリプトインターフェースが不可欠となる。??にLuaコードが、??に生成された構造が示されている。
この構造を生成するためのLuaスクリプト全体は以下の通りである:
clear_points()
N = 200
radius = 1.5e-6
pitch = 3e-6
turns = 6
for i = 1, N do
t = (i / N) * turns * 2 * math.pi
-- first helix strand
x1 = radius * math.cos(t)
y1 = radius * math.sin(t)
z1 = (i / N) * turns * pitch
add_point(x1, y1, z1)
-- second helix strand offset by pi (opposite side)
x2 = radius * math.cos(t + math.pi)
y2 = radius * math.sin(t + math.pi)
add_point(x2, y2, z1)
end
各螺旋ストランドは、パラメータtを0から2π×回転数まで変化させることで描画される。x座標およびy座標は指定された半径の円上を動き、z座標は指定されたピッチに従ってtに対して線形に増加する。2番目のストランドはπラジアンだけ位相がずれており、これにより各点において螺旋軸の反対側に配置されるため、特徴的な交互配置の二重螺旋構造が形成される。
8. まとめ
OghmaNanoのステップエディタには、3次元空間内でオブジェクトを周期的に配置するための3つの手法が用意されている。基本ステップモードでは単一の変位ベクトルを用いて単純な均一配列を生成できる。クリスタルモードでは3つの基本ベクトルa1、a2、a3を指定することで任意のブラベー格子を構築でき、六方格子や立方格子、あるいは非直交なカスタム配列も実現可能だ。Luaスクリプトモードではあらゆる幾何学的制約が取り除かれ、任意の数式から算出される座標にオブジェクトを配置できる。前述の二重螺旋構造の例がこれを示している。いずれのモードにおいても生成されるオブジェクトのコピーはすべて元のオブジェクトと同一の光学的・電気的特性を有するため、単一のオブジェクトを編集するだけで全体の周期構造を容易に変更できる。