序文
前回の記事では、特定のオブジェクト(構造)のジオメトリを構築する方法を紹介しました。この記事では、シミュレーション領域FDTDを構築する方法について説明します。この記事の冒頭から後の分析部分まで、フォローアップの説明のために、同じシミュレーションオブジェクトに基づいてFDTD、光源、モニター、およびその他のシミュレーションモデルを追加します。
1つ、FDTD
インスタンス
まず、次のコードを使用して、オブジェクト(構造)のシミュレーションモデルを構築します。
um=1e-6;
nm=1e-9;
addrect;
set("name","SiO2");
set("material","SiO2 (Glass) - Palik");
set("x",0);
set("y",0);
set("x span",1*um);
set("y span",1*um);
set("z max",100*nm);
set("z min",-1*um);
addrect;
set("name","Si");
set("material","Si (Silicon) - Palik");
set("x",0);
set("y",0);
set("x span",1*um);
set("y span",1*um);
set("z max",300*nm);
set("z min",100*nm);
addrect;
set("name","etch");
set("material","etch");
set("x",0);
set("y",0);
set("x span",100*nm);
set("y span",1*um);
set("z max",300*nm);
set("z min",100*nm);
これは次のようになります。
これは、シリコンと二酸化ケイ素でできたグレーティング構造です。次に、グレーティングを通過するときの光波の回折を分析するためのFDTDシミュレーション領域を構築します。
自動精度
コードは次のように表示されます。
addfdtd;
set("dimension",2);#三维仿真区域
set("x",0);
set("y",0);
set("z min",-10*nm);
set("z max",2*um);
set("x span",0.2*um);
set("y span",0.4*um);
set("x min bc","periodic");#设置x方向周期边界条件
set("y min bc","periodic");#设置y方向周期边界条件
set("Mesh type","auto non-uniform");#仿真网格为自动精度
set("Mesh accuracy",3);#高精度
このコードでは、前の記事に多くのコンテンツが含まれているため、ここでは繰り返しません。FDTD自体に関連するいくつかの部分に焦点を当てます。set
( "dimension"、2):シミュレーション空間の次元。 "dimension"パラメーターには通常1と2の2つの値があります。ここで、1はシミュレーション領域が2次元領域であることを示します。 .2は、シミュレートされた3次元領域を表します。ここでは2に設定されています。これは、3次元領域
set( "x min bc"、 "periodic")をシミュレートしていることを意味します。実際のシミュレーション領域(次元)に従って設定された境界条件には、 "x maxbc"があります。 、 "x min bc" ""、 "y max bc"および他の多くの境界、使用可能な境界条件を次の表に示します。
境界条件 | 説明 |
---|---|
PML | 完全一致レイヤー |
金属 | 金属境界 |
定期的 | 期間境界 |
対称 | 対称境界 |
反対称 | 非対称境界 |
ブロッホ | 斜め入射に適しています |
PMC | 理想的な磁性導体 |
さまざまな境界の使用に関する詳細な手順と条件については、Lumericalの公式Webサイトおよび関連するフォーラムを参照してください。
set( "メッシュタイプ"、 "自動不均一"):メッシュタイプ。「自動不均一」、「カスタム不均一」、「均一」の3つのオプションがあります。通常、デフォルトは「自動非均一」です。均一 ""、グリッドタイプを変更する必要がない場合は、このコードを記述する必要はありません。ここでは、デフォルトの自動精度
セット(「メッシュ精度」、3)が使用されます。自動メッシュ精度は、「自動不均一」モードで設定されます。1から8までの合計8つのレベルがあり、数が増えると精度が向上します。通常、デフォルト値は2です。高すぎることはお勧めしません。CPUに大きな負担がかかりやすくなります。ここでは高精度シミュレーションに属する3に設定します
カスタム精度
システムによって自動的に計算されたグリッドを使用することに加えて、カスタム精度のグリッドを使用することもできます。コードは次のとおりです。
addfdtd;
set("dimension",2);#三维仿真区域
set("x",0);
set("y",0);
set("z min",-10*nm);
set("z max",2*um);
set("x span",0.2*um);
set("y span",0.4*um);
set("x min bc","periodic");#设置x方向周期边界条件
set("y min bc","periodic");#设置y方向周期边界条件
set("Mesh type","uniform");#仿真网格为自定义精度
setnamed("FDTD","dx",20*nm);#x方向网格精度为20*nm
setnamed("FDTD","dy",20*nm);#y方向网格精度为20*nm
setnamed("FDTD","dz",10*nm);#z方向网格精度为10*nm
ここで設定する「dx」、「dy」、および「dz」パラメーターは、カスタムグリッド精度(最小グリッドサイズ)です。
シミュレーションを実行する
一般的に、シミュレーション環境が構築された後、シミュレーションを実行するために必要なコマンド「run」は1つだけです。ただし、複数のシミュレーションを実行する必要がある場合があります。実際の例を次に示します。
len=10;
phase=matrix(5,len);
#建立并保存仿真文件
for (i=1:len)
{
#修改仿真文件的参量
setnamed("etch","x span",i*2*nm);
#保存文件
save("sim_"+num2str(i));
addjob(currentfilename);
}
#运行仿真
runjobs;
#读取仿真结果
for(i=1:len){
load("sim_"+num2str(i));
#以下是分析部分,可根据自己需要修改
Ey=getdata("T","Ey");
pha=angle(Ey);
phase(:,i)=pinch(pha);
}
ここのコードは、現在のフォルダーにシミュレーションファイルを直接生成することに注意してください。シミュレーションファイルの数が多いと、他のファイルの検索に影響を与えやすくなりますが、現時点では、スキャンを使用してシミュレーションしたいデータを取得することをお勧めします。シミュレーションのスキャンと実行のその他の例については、公式Webサイトの関連ドキュメントを参照してください。