反射防止コーティングのシミュレーション(FDTD):1次元薄膜に関するチュートリアル
1. はじめに
光が屈折率の異なる2つの物質間の界面に当たると、一部は透過し、残りは反射する。このため、ガラス自体は透明であっても、無処理のガラス面はしばしば光沢を帯びて見えるのである。反射防止(AR)コーティングとは、このような望ましくない反射を抑制し、透過光量を増加させることを目的とした極薄い光学薄膜である。
その基本的な仕組みは??に示されている。単一の界面での反射を完全になくそうとするのではなく、空気と基板の間に薄い中間層を設けるのである。こうすることで光は空気と薄膜の界面、および薄膜と基板の界面の二箇所から反射するようになる。適切な薄膜が選ばれている場合、これら二つの反射波は振幅がほぼ等しく位相が逆であるため、破壊的干渉が生じる。その結果、全体としての反射電界は大幅に減少するのである。
位相整合:反射を打ち消すためには、2つの反射波が波長の半分分だけ位相がずれている必要があります(位相差は\(\pi\)となります)。通常は表面に垂直に入射する光を想定して設計しますが、明確さのため??では斜め入射の幾何配置も示しています。
最初の反射は空気と薄膜の界面で生じます。2回目の反射は薄膜と基板の界面から生じますが、この光波は薄膜内を往復してきたものです。もし薄膜の厚さが\(d\)であるならば、この追加の光路長は\(2d\)となります。
薄膜内部では光の伝播速度が遅くなるため、波長は屈折率分だけ短くなる。 \(n_f\)。これはつまり、余分な距離が存在することを意味する。 光路長 である \(2n_f d\)破壊的干渉が生じるためには、この距離が波長の半分に等しくなければならない:
\(2n_f d = \dfrac{\lambda_0}{2}\)
これにより
\(d = \dfrac{\lambda_0}{4n_f}\)
したがって、コーティングの厚さ \(d\) は、薄膜内での波長の1/4となるように設定される。これにより、下側に反射した波は上側の反射波と比べて位相が半波長ずれることになり、両者が互いに打ち消し合うのである。
振幅整合:位相の相殺だけでは不十分であり、2つの反射波は同程度の振幅を持つ必要がある。垂直入射条件下における吸収のない単層コーティングにおいては、コーティングの屈折率がおよそ以下の値となる場合にこの条件が満たされる:
\(n_f \approx \sqrt{n_0 n_s}\)
ここで\(n_0\)は入射媒質の屈折率、\(n_s\)は基板の屈折率を表す。空気とガラスの組み合わせにおいては、理想的な屈折率は約1.2~1.3となり、これは実際に利用可能な材料の屈折率よりも低い値である。そのため、実用されるコーティングは概ね近似的な設計に留まるか、あるいは性能向上のために多層構造が用いられる。
実際の効果は??に示されており、反射によるグレアが減少し基板がより透明に見える。この原理は太陽電池やレンズ、各種光学コーティングにおいて広く応用されている。
このチュートリアルでは、有限差分時域法(FDTD)を用いて単純な一次元反射防止コーティングのシミュレーションを行う。このモデルを実行することで、コーティングが反射および透過特性に与える影響、ならびに薄膜の厚さが反射が最小となる波長を決定する仕組みを確認できる。
2. 新規シミュレーションの作成
「新規シミュレーション」ウィンドウを開き、「FDTD例」カテゴリを選択してください(??)。次に「反射防止コーティング(薄膜干渉)」の例を選択します(??)。これにより、??に示すメインインターフェースが表示されます。
この構造は「デバイス構造」タブ内の3Dビューに表示される。このビューには反射防止コーティングシミュレーションにおけるすべての主要な構成要素が示されている。左側では緑色の矢印がFDTD光源を表しており、そこから光パルスが入射する。構造内を通る細い紫色の線がFDTD格子である。本例においてはシミュレーションが事実上一次元的であるため、格子はコーティング層および基板を貫く単一の線として現れる。
光源のすぐ右側にある紫色の平面が検出器であり、入射光および反射光の電界を記録する。この検出器はシミュレーションに影響を与えることはなく、単にグリッド上の電磁界をサンプリングするだけである。さらに右側には基板上に形成された薄い反射防止コーティングがある。水色の領域がそのコーティング層であり、はるかに厚い領域がガリウムヒ素(GaAs)基板である。本例ではガラスではなくGaAsを基板として用いており、この種のコーティングは光結合性を向上させる目的で光検出器などのデバイスに広く適用されている。
3. シミュレーションの実行
シミュレーションを保存し、構造の確認が済んだら「実行(▶)」ボタンをクリックして計算を開始します。シミュレーション実行中は、??に示す「ターミナル」タブで進行状況を確認できます。ここにはタイムステップや波長範囲、使用されているバックエンドなどの情報が表示されます。実行開始直後には Searching for OpenCL devices という記述が現れます。これらはシミュレーションの高速化に利用可能なハードウェア加速デバイスです。図例のように適切なOpenCLデバイスが検出された場合、OghmaNanoは自動的にそれを利用し、CPUではなくGPU上でシミュレーションを実行します。
シミュレーションが完了したら、??に示す出力タブに切り替えてください。ここに実行中に生成されたデータが格納されています。本チュートリアルにおける主要な出力データは、2つの検出器によって記録された信号を含むdetector_0およびdetector_1です。またdeviceを開くことで3次元幾何構造を確認でき、snapshots/ディレクトリを参照すれば電磁界が時間とともにどのように変化していくかも見ることが可能です。このシミュレーションは非常に迅速に実行される点にご注目ください。1次元問題であるため、通常は数秒程度で計算が完了します。もしこれよりもはるかに長い時間を要する場合は、前述の通りシミュレーションデータを高速なローカルドライブに保存するようご対応ください。
5. 電界のスナップショットの閲覧
[出力]タブからsnapshots/出力ディレクトリを開き、ダブルクリックしてスナップショットビューアを起動します。これにより時間の関数としてシミュレーション結果を確認できます。+ボタンを1回クリックしてデータセットを追加し、Eyを選択します。本シミュレーションでは電界がy方向に励起されるため、この成分が波の伝播状態を最も直接的に示します。その後スライダーバーを操作して時間を進め、電界の変化の様子を観察できます。??から??には代表的なスナップショット3点が示されています。
初期段階において(左側のパネル、??参照)、注入された広帯域光パルスが反射防止コーティングが施された表面に向かって伝播している様子が確認できる。この時点では電界はまだ空間的に局在化しており、注入された励起に起因する鋭い立ち上がり部分が見られる。
時間が経過するにつれて(中央パネル、??)、光パルスは薄膜および基板に到達する。パルスの一部は反射し、残りの部分は透過する。界面付近の電界分布には、部分的な反射やパルスの広帯域性に起因する微小な振動が見られるが、単一周波数における干渉パターンは現れない。
時間が経過すると(右側のパネル、??)、基板内部では前方へ伝播する透過波が支配的となり、一方で弱い反射波が光源方向へ戻っていく。適切に設計された反射防止コーティング構造においては、この反射波の強度はコーティングなしの界面における場合よりも小さくなる。この強度低減は、各界面において反射が完全に消滅するためではなく、各界面からの反射波が破壊的干渉を起こすことによって生じるのである。
6. 検出器の出力結果の確認
[出力]タブに戻ると(??参照)、Detector0という名前のフォルダが見える。この例では単一の検出器のみが使用されており、構造体の光源側に配置されて入射光および反射光を測定している。Detector0を開き、lam_E.csvというファイルを探す。このファイルには検出器における電界の周波数領域応答が記録されている。該当ファイルをダブルクリックすると、??に示すようなスペクトルがプロットされる。
光源の主波長付近(約400 nm)に強いピークが現れるはずです。このピークの強度は比較的小さく、\(10^{-3}\)から\(10^{-2}\)程度の値となります。これは、反射防止コーティングの効果により、検出器に戻る光の割合が限定的であることを示しています。この点を確認するため、デバイス構造タブに戻り、コーティングを光の伝播経路から外してください。??に示すように、コーティングをクリックした状態で左マウスボタンを押し続け、光の進行方向から遠ざけてください。もしオブジェクトが他の要素と重なって動かしにくくなった場合は、Shiftキーを押しながら矢印キーを使用して少しずつ位置を調整し、動かせる状態にしてください。
コーティングを光路から取り除いた後、シミュレーションを再実行してください。その後、Detector0に戻り、再度lam_E.csvを開きます。その結果が??に示されています。この時点で、光源波長においてはるかに大きなピークが現れているはずです。これは、コーティングが存在しない場合には、界面で反射される光の割合が大幅に増加していることを示しています。
なお、この検出器は主に光源方向から透過してくる光を測定するものである点に留意する必要がある。反射防止コーティングが存在する場合、破壊的干渉により反射光成分が減少するため検出される信号は比較的小さくなる。一方、コーティングを除去すると反射光が増加し、より多くの光が検出器方向へ戻るため、より大きなピークが観測されるのである。
この比較結果から、反射防止コーティングの機能が明確に示されている。すなわち、設計波長において反射光が減少し、より多くの入射光が基板内へ進入できるようになるのである。
7. 反射防止コーティングの有無によるスペクトルの比較(任意)
FDTDシミュレーションにおいては、構造体に変更を加える前後での結果を比較することは非常に有益である。本例では、反射防止コーティングの有無におけるデバイスの応答を比較する。この手順はチュートリアルを完了するために必須ではないが、MATLABやOctaveといったツールが利用可能な場合、コーティングの性能をより明確に把握することが可能となる。
この比較を行う理由は、検出器から得られる生の信号が光源のスペクトル形状の影響を強く受けるためです。同一の光源を用いた2種類のシミュレーション結果を比較することで、その影響がほぼ相殺され、コーティング自体の効果を明確に抽出できるのです。まず、コーティングなしの状態でシミュレーションを実行してください(前節の手順に従う)。次にDetector0フォルダを開き、lam_E.csvというファイルを新たなファイル名、例えばwithout.csvとしてコピーしてください。
次に、デバイス構造に戻り、コーティングを再び光路内に配置してシミュレーションを再実行します。実行が完了したら、再度 lam_E.csv をコピーし、今度は with.csv という名前で保存します。こうして得られた2つのデータセット、すなわちコーティングなしの構造用とコーティングありの構造用のデータが揃います。これらをMATLABまたはOctaveを用いて以下のスクリプトで直接比較することが可能です。
with_data = load('with.csv');
without_data = load('without.csv');
lam_m = without_data(:,1); % wavelength in meters
lam = lam_m * 1e9; % convert to nanometers
ref0 = without_data(:,2);
ref1 = interp1(with_data(:,1), with_data(:,2), lam_m, 'linear');
ratio = ref1 ./ ref0;
plot(lam, ratio, 'k', 'linewidth', 2);
xlabel('Wavelength (nm)');
ylabel('Relative reflection');
title('Anti-reflective coating response');
grid on;
ylim([0 1.2]);
得られたプロットが??に示されている。400 nm付近で相対反射率が明確に低下しているのが確認できるはずだ。この低下は反射防止コーティングの設計波長に対応している。この波長においては、2つの界面からの反射波が互いに打ち消し合い、結果として反射光が減少する。この波長から離れると位相条件が満たされなくなり、反射率は再び徐々に増加する。この比較により、コーティングが光学的応答にどのように影響を与えるかが定量的かつ明確に示されており、実際の薄膜設計を評価する際に最も簡便な手法となっている。
8. ご自身で試してみてください
コーティングの作用原理をより深く理解するため、厚みを変更してみてください。コーティング部分を右クリックして「オブジェクト編集」を選択し(??を参照)、Dzの値を50 nmから60 nm、さらに70 nmへと変更してください。
変更を加えた後は、シミュレーションを再実行し検出器の出力を確認してください。生データ上ではその効果が微妙にしか現れない場合もあるため、前節で説明したMATLAB/Octaveを用いた手法でスペクトルを比較すると有用です。