Guilin Sun
Ansys Employee

 

image

A6:光在传播过程中产生位相,也就是k*r+phi0,r是从光源位置开始的。你说的两中材料,折射率不同,k就不等,所以位相变化就不同,而k与材料内波长的倒数有关。

更多的物理原理请参考物理光学,以及FDTD专著。


非常感谢老师针对以上问题的解答!但是还是有两个问题不太明白:
1.既然相位数值是按照Phi=K*r+Phi0来计算,那为什么从xz面频域监视器里面看Angle(Ex)的话,相位数值会出现负值呢?这个负值相位又是如何计算得到的?有计算公式吗?
phase1
2.还是上面的第4个问题,XZ场监视器中的相位分布范围为(-pie,pie),但沿着Z的slice相位变化为一直增大,如何把slice相位变化范围规定在(-pie,pie)?如果是用脚本的话,脚本应该怎么写?
这个问题您可能看错了,我是想得到相位在pie处跳变的结果(而unwrap函数是连续变化的,也就是不在pie处跳变),我自己写的脚本总是报错,所以还麻烦老师针对我这个仿真测试文件写一个脚本,帮我得到相位在pie处跳变的结果,谢谢了! Phase_test_Air.fsp (1.8 MB)


 

通常我们研究,两个介质界面的反射的时候,一般都研究界面的反射率或者透射率,而往往会忽视界面引入的额外相位差;因为在计算透反射率的时候考虑的是能量的比值,这是由透反射系数(复数 complex number 包含幅值和相角)的平方得到的(计算透射时还要考虑两种材料的折射率)。复数平方之后,相角就丢失了,因此透反射率是不包含相位信息的。 但是有时相位信息又很重要,尤其是最近大火的“超透镜”,本质上就是利用微纳结构在波长尺度内引入一个人为可控的额外相位差,从而调控远场的波前,那我们该如何使用FDTD分析界面引入的额外相位差呢? 尤其是在反射的情况下,如 @u201613896 提问的那样。 FDTD采用的相位定义方式和波矢方向,可以参考上面两个帖子。 重点强调的是,在source设置中设置的“Phase”是平面波的初相位 φ0 . 同时,记住,空间相位的零点在光源面上。 我们以一个简单的模型为例,光源的位置为 H_source,界面位置为 H_Sub, 反射监视器位置为 H_R。 光源处相位为 φ0,光源到界…


这个页面可供参考

 


 
gsun:

A3:光源灰色区域是非物理的结果,频域监视器不可以在那里监测此体积内的任何场。因为,我们一直建议频域监视器不要穿过光源区,也不要接触到光源区。

孙老师!针对上面的第3个问题,我有点疑惑。既然监视器不能接触或穿过光源区,那么如何计算光源的初始相位?空间位置为0时,光源面相位理论上应该是0吧?(k r,因为r=0,所以k r=0)我想应该是通过脚本,那么通过什么指令可以得到呢?麻烦孙老师帮忙解答一下!


 
S201861311:

非常感谢老师针对以上问题的解答!但是还是有两个问题不太明白:
1.既然相位数值是按照Phi=K*r+Phi0来计算,那为什么从xz面频域监视器里面看Angle(Ex)的话,相位数值会出现负值呢?这个负值相位又是如何计算得到的?有计算公式吗?
phase1
2.还是上面的第4个问题,XZ场监视器中的相位分布范围为(-pie,pie),但沿着Z的slice相位变化为一直增大,如何把slice相位变化范围规定在(-pie,pie)?如果是用脚本的话,脚本应该怎么写?
这个问题您可能看错了,我是想得到相位在pie处跳变的结果(而unwrap函数是连续变化的,也就是不在pie处跳变),我自己写的脚本总是报错,所以还麻烦老师针对我这个仿真测试文件写一个脚本,帮我得到相位在pie处跳变的结果,谢谢了! Phase_test_Air.fsp (1.8 MB)

还有这两个问题,感觉另一个人的回答有点答非所问了,再麻烦孙老师帮忙解答一下!


重点强调的是,在source设置中设置的“Phase”是平面波的初相位 φ0 . 同时,记住,空间相位的零点在光源面上。

你要是仔细看了我给出的链接,就不会觉得答非所问了,那个帖子里面包含了很多平面波相位计算的重要信息。
我在那个帖子里面 研究的是反射前后的相位差,你只考虑一个方向的,那不就是你要研究的传播的相位差吗?


 
S201861311:

空间位置为0时,光源面相位理论上应该是0吧?(k r,因为r=0,所以k r=0)我想应该是通过脚本,那么通过什么指令可以得到呢?

如果光源的初始位相是零,原则上说是这样。但是由于光源灰色区的结果是非物理的结果,所以不建议你一定要得到光源准确位置的位相。光源初始位相可以从光源里面用脚本得到。


Junyu 说的对,你需要先看看相关连接,了解一下相关问题。我在这里代表Lumerical谢谢Junyu的慷慨帮着。

A1: 因为计算位相的算法是正负Pi,所以就有负值。前面已经说了,用phix=unwrap(angle(Ex));可以得到线性变化的位相。

A2: 你使用
phix=unwrap(angle(Ex));

phi0=angle(Ex);

plot(z*1e6,phix(find(x,0),:),‘z um’, ‘linear phase’);

plot(z*1e6,phi0(find(x,0),:),‘z um’, ‘±pi phase’);

 

 

你如果想看看跳跃的地方,可以ZoomIn
image
用这个可以看前50个点的结果
?phi0(find(x,0),1:50);
result:
0.398281 0.554182 0.738981 0.923784 1.10858 1.29338 1.47816 1.66293 1.84769 2.03243 2.21716 2.40188 2.58661 2.77134 2.95608 3.14083 -2.95759 -2.77281 -2.58802 -2.40322 -2.21841 -2.03361 -1.84882 -1.66403 -1.47927 -1.29451 -1.10977 -0.925039 -0.740314 -0.55559 -0.37086 -0.186122 -0.00137023 0.183396 0.368176 0.552969 0.737769 0.922573 1.10738 1.29217 1.47695 1.66172 1.84648 2.03122 2.21595 2.40067 2.5854 2.77013 2.95487 3.13962
?transpose(phi0(find(x,0),1:50));
result:
0.398281
0.554182
0.738981
0.923784
1.10858
1.29338
1.47816
1.66293
1.84769
2.03243
2.21716
2.40188
2.58661
2.77134
2.95608
3.14083
-2.95759
-2.77281
-2.58802
-2.40322
-2.21841
-2.03361
-1.84882
-1.66403
-1.47927
-1.29451
-1.10977
-0.925039
-0.740314
-0.55559
-0.37086
-0.186122
-0.00137023
0.183396
0.368176
0.552969
0.737769
0.922573
1.10738
1.29217
1.47695
1.66172
1.84648
2.03122
2.21595
2.40067
2.5854
2.77013
2.95487
3.13962

是不是能正好找到正负pi的位置,要看所用网格师傅足够细.一般没有必要.