3Dでの回折広がりの計算


#1

絶対反射率(=光強度/光源強度)の計算(3Dでの回折広がり)について質問です。

添付の画像のように、垂直反射で青色を強め合う、細い多層膜構造の回折広がり(zx平面内)を計算しているのですが、3Dでは絶対反射率の合計(スペクトル)が100%を超えてしまいます。2Dでは青色が90%程度の絶対反射率となり、正しく計算できているのですが、3Dにしたところ、上記のような症状となってしまいました。

%E5%9B%B31

具体的には、以下のように計算を行っています。光源はTFSF光源で、モニターは上面(“top”)、下面(“bottom”)、右面(“right”)、左面(“left”)の4面で定義しています。

#####初期設定
##ポインティング・ベクトルの積分で使用する定数
B=3;
C=-B/2+(1-(-1)^B)/4;
F=C+B-1;
G=C+B;

##半円(0~180°)を1°間隔で181点に分割
phi=linspace(0,180,181);
iphi=length(phi);
zero=linspace(0,0,181);

##グラフ描画では3°間隔
phi2=linspace(0,180,61);
iphi2=length(phi2);

##変数の定義
E=matrix(iphi,3);
E2TE=matrix(iphi,41);
E2TM=matrix(iphi,41);
avE2=matrix(iphi,41);
absE2=matrix(iphi,41);
angE2=matrix(61,41);
avE2sp=matrix(41);

#####以下が計算部分
fpoints=41;

wlstt=380e-9;
wlstp=780e-9;
sources;
select(“source”);
set(“wavelength start”,wlstt);
set(“wavelength stop”,wlstp);

monitors;
setglobalmonitor(“use linear wavelength spacing”,1);
setglobalmonitor(“use source limits”,1);
setglobalmonitor(“frequency points”,fpoints);

for(ipl=1:2) { #ipl=1->TE ipl=2->TM
switchtolayout;

sources;
select(“source”);

if(ipl==1) {
set(“polarization angle”,0);
?“TE”;
}

if(ipl==2) {
set(“polarization angle”,90);
?“TM”;
}

run(3); #parallel computing

##半円上の点を定義
x=cos(phipi/180);
z=sin(phi
pi/180);

for(ii=1:fpoints) {

E=farfieldexact(“top”,x,zero,z,ii)-farfieldexact(“bottom”,x,zero,z,ii)+farfieldexact(“right”,x,zero,z,ii)-farfieldexact(“left”,x,zero,z,ii);

if(ipl==1) { ###TEmode
E2TE(1:iphi,ii)=real(E(1:iphi,1)*conj(E(1:iphi,1))
+E(1:iphi,2)*conj(E(1:iphi,2))
+E(1:iphi,3)*conj(E(1:iphi,3)));
avE2(1:iphi,ii)=avE2(1:iphi,ii)+E2TE(1:iphi,ii);
}

if(ipl==2) { ###TMmode
E2TM(1:iphi,ii)=real(E(1:iphi,1)*conj(E(1:iphi,1))
+E(1:iphi,2)*conj(E(1:iphi,2))
+E(1:iphi,3)*conj(E(1:iphi,3)));
avE2(1:iphi,ii)=avE2(1:iphi,ii)+E2TM(1:iphi,ii);
}

pointing vector

f=getdata(“top”,“f”); ###光源の周波数読み込み
sp=sourcepower(f); ###光源強度
L=sqrt(eps0/mu0)/2; ###ポインティング・ベクトルの係数

absE2(1:iphi,ii)=100LavE2(1:iphi,ii)/2/sp(ii); ##絶対反射率に換算(%表示)、2は2偏光の平均。

} ## ii loop

} ## ipl loop

##ポインティング・ベクトルの積分(1°間隔から3°間隔へ変換)
ds=pi/180;
for(i=2:iphi2-1){
for(ii=C:F){
angE2(i,1:fpoints)=angE2(i,1:fpoints)+dsabsE2((i-1)B+1+ii,1:fpoints);
}
}
for(ii=1:G){
angE2(1,1:fpoints)=angE2(1,1:fpoints)+ds
absE2(ii,1:fpoints);###-90°
angE2(iphi2,1:fpoints)=angE2(iphi2,1:fpoints)+ds
absE2(iphi-ii+1,1:fpoints);###90°
}

spectrum

for(i=1:iphi2){
avE2sp(1:fpoints)=avE2sp(1:fpoints)+angE2(i,1:fpoints);
}

3Dで絶対反射率がおかしくなるのは恐らく、光源強度(sourcepower)は面積分しているのに対し、光強度は線積分しているためだと考えています。
そこで、光強度に奥行きの長さ分をかけるなど、色々と試してみましたが、どれも上手くいきませんでした。どこを修正すればよろしいでしょうか?

長々と失礼しました。どなたかご教示頂けないでしょうか。


#2

シミュレーション・ファイルが共有されていないため、問題の原因を教えにくいです。
おそらく光源強度が関連していと思われます。

次のリンクをご確認ください。

https://kb.lumerical.com/en/ref_sim_obj_tfsf_cross_section_and_normalization.html

https://kb.lumerical.com/en/ref_sim_obj_tfsf_power_normalization.html

また次のページ:


#3

シミュレーションファイルは送れないため(容量過多)、代わりにプログラムファイルを添付致します。
よろしくお願い致します。

multilayer.lsf (11.8 KB)


#4

ご回答ありがとうございます。
参考にさせて頂きます。

シミュレーションファイルを送ろうとしましたが、10000KB以上のデータは送れないようです。