ryujimiyaの日記

C#を使って数値解析したい

フォトニック結晶導波路の固有モードの周期構造解析用FEMによる計算(2)

前回の記事に引き続きフォトニック結晶導波路の固有モードを周期構造解析用FEMで解析してみました。

前回の記事の引用元に、チャンネルが2つあるフォトニック結晶カプラーの固有モードの計算結果が載っています。

2つのチャンネルの間は2つのロッドで隔てられている場合を計算しました。

フォトニック結晶導波路カプラー(TEモード)(photonic crystal  waveguide coupler: TE mode)

Cad図面

f:id:ryujimiya:20121129214523p:plain

計算結果

モードが2つあります。

(1)偶モード(even mode)

電界分布(β/k0 が0.4付近)

f:id:ryujimiya:20121129214645p:plain

伝搬定数(実効屈折率)の周波数特性※追記2参照

f:id:ryujimiya:20121129214614p:plain

(2)奇モード(odd mode)

電界分布(β/k0 が0.4付近)

f:id:ryujimiya:20121129215628p:plain

伝搬定数(実効屈折率)の周波数特性※追記2参照

f:id:ryujimiya:20121130002723p:plain

引用文献と比較すると遮断周波数が高周波側にずれているように思われますが、

・実効屈折率は、偶モードの方が奇モードより大きい

・高周波側では偶モードと奇モードの実効屈折率の差が小さくなる

・いずれのモードも実効屈折率は1.0より小さい

・電磁界は導波路(格子の欠陥部分)に閉じ込められている

といった特徴は確認できます。

なお、ここまでの計算で使用している有限要素は一次補間の三角形要素のため精度的には充分でないかもしれません。二次補間の三角形要素の適用は今後の課題としたいと思います。

 また、ここで作成したプログラムはDelFEM4Netのサンプルとして追加する予定です。

【追記】ソースコードを下記に公開しました。よろしければご覧ください。

DelFEM4Net Sample  wg2d_periodic_eigen:

 http://code.google.com/p/delfem4net/source/browse/#git%2FDelFEM4Net_SampleApp%2FDelFEM4Net_SampleApp%2Fwg2d_periodic_eigen

DelFEM4Net_SampleApp_20121130.zip  圧縮ファイル(ソースコード&バイナリ)

http://code.google.com/p/delfem4net/downloads/list

 

【追記2】ロッドの要素分割を変更することで実効屈折率の結果が改善されたので載せておきます。

図面

f:id:ryujimiya:20121213192640p:plain

偶モードの実効屈折率

f:id:ryujimiya:20121213192713p:plain

奇モードの実効屈折率

f:id:ryujimiya:20121213192730p:plain

修正したプログラムのソースコード

DelFEM4Net Sample  wg2d_periodic_eigen:

 http://code.google.com/p/delfem4net/source/browse/#git%2FDelFEM4Net_SampleApp%2FDelFEM4Net_SampleApp%2Fwg2d_periodic_eigen

DelFEM4Net_SampleApp_20121213.zip  圧縮ファイル(ソースコード&バイナリ)

http://code.google.com/p/delfem4net/downloads/list

 
【追記3】
伝達問題として解いたとき、上記分割では充分でなかったので分割数を変更しました。
 フォトニック結晶導波路の伝達問題(3)-複数モードの場合の検証-
 
DelFEM4Net_SampleApp/wg2d_periodic_eigen のMainLogic.csのndivForOneLatticeを4から6に変更し、さらに中央のロッドとロッドの間に頂点を追加しています。
                        // 中央の2つのロッドとロッドの間のメッシュの対称性を改善する
                        {
                            // 中央のロッドとロッドの間に頂点を追加
                            double x = rodDistance * 0.5;
                            double y = WaveguideWidth * 0.5;
                            uint id_v_center = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, baseLoopId, new CVector2D(x, y)).id_v_add;
                            System.Diagnostics.Debug.Assert(id_v_center != 0);
                        }
 計算結果は次の通りです。
偶モード

f:id:ryujimiya:20121223232112p:plain

奇モード

f:id:ryujimiya:20121223232135p:plain