关于mode source 发射能量计算问题


#1

我在计算mode source的发射能量时,与探测器得到的数据(对profile监视器得到的power进行积分,所得能量)不一致。具体如下(no normalization):
结构图1


计算得到的光源能量为energy_f_source =3.15969e-037
而四个探测器的计算能量,分别为
energy_f_right = 1.83271e-023
energy_f_top = 1.1298e-022
energy_f_bottom = -1.07835e-022
energy_f_left = -2.71382e-022
四个监视器加起来为5.105241e-22,远远大于source的能量。

结构图2


计算得到的光源能量为energy_f_source = 7.94297e-021,
而四个探测器的计算能量,分别为
energy_f_right = 1.26178e-021
energy_f_top = 5.86412e-022
energy_f_bottom = -5.8752e-022
energy_f_left = -5.03893e-021
四个监视器加起来为7.474642e-21;与source的能量大大拉小了差距

结构图3


计算得到的光源能量为energy_f_source =1.64807e-020
而四个探测器的计算能量,分别为
energy_f_right = 2.25948e-021
energy_f_top = 1.41208e-021
energy_f_bottom = -1.4131e-021
energy_f_left = -1.11012e-020
四个监视器加起来为1.618586e-20,与source能量几乎相等。

请问为什么光源的发射宽度不同,会大大影响能量守恒?验证到当光源宽度穿过监视器时,能量几乎守恒。可是光源宽度为很小时,能量却如此不守恒?
其中我的光源能量计算代码为energy_f_source = 22integrate(sourcepower(f),1,f);

谢谢您的回答@gsun


#2

先不说能量守恒问题,先说你的设置问题。
此类问题应该使用模式光源,也就是说在光子晶体波导的外面你需要有不同的波导。

如果这些光子晶体是实体柱位于空气中,一般也需要一个波导来输入光源。

看起来你用的是平面波,有限尺寸的平面波会产生衍射,这就是为什么尺寸不同结果不同的缘故。

此外,你用点监视器计算当然是不对的,你看看功率密度的定义,它必须是通过一个面或者线段的量。点的话只能计算能流密度。

一般情况下能量和功率都是守恒的,应该不需要测试,而是要理解。你如果想计算能量,参见这个例子
https://kb.lumerical.com/en/index.html?solvers_optical_parsevals_theorem.html

建议你重点放在模式的激励上,可以参考这个例子
https://kb.lumerical.com/en/index.html?diffractive_optics_waveguide_pc_line_defect.html


#3

@gsun 谢谢你的回答!
其实,我用的就是模式光源(mode source前面有提到), 另外前面图中的点监视器跟本问题没有关系,实际中,正如前面图所示是用四条线profile监视器围城一个密闭区域,他们的名称分别是(right,left,top,bottom ),前面没有描述清楚,不好意思。
现在抛开结构本身,就单纯如下图所示的


其中,光源还是模式光源,y span=0.5时,计算光源的能量为energy_f_source = 8.8488e-038(这个的计算公式是从https://kb.lumerical.com/en/index.html?solvers_optical_parsevals_theorem.html参考的,即energy_f_source = 22integrate(sourcepower(f),1,f);下面的四个监视器的能量计算方法也是参考了这个页面)
而四个监视器的能量分别为
energy_f_right = 3.00636e-023
energy_f_top = 1.5812e-022
energy_f_bottom = -1.5812e-022
energy_f_left = -3.32053e-022
这四个监视器加起来远大于光源的能量。但是,如果把光源发射尺寸加大,会基本守恒。
另外,也尝试了用高斯光源,同样y span=0.5,得到光源的能量为energy_f_source = 1.11447e-021,
而四个监视器的能量分别为
energy_f_right = 2.93492e-023
energy_f_top = 1.20203e-022
energy_f_bottom = -1.20203e-022
energy_f_left = -1.70171e-023
加起来为2.867723e-22,比光源能量小很多,而加大尺寸之后也基本守恒
为什么小尺寸的光源不容易守恒?或者准确的问为什么energy_f_source = 22integrate(sourcepower(f),1,f)不能准确计算小尺寸的光源能量。
因为实际中,比较需要小尺寸的光源进行模拟…
希望得到你的解答,谢谢!


#4

我不明白你说的与点监视器跟本问题没有关系是什么意思。光源的能量是整个系统的初始能量,而你用这几个监视器只是记录了一个小区域的能量。为什么你把光源加大结果就接近正常?因为光源没有衍射了,正常传播了;当光源很小时,把光源的有效模式场截断产生严重衍射,而你的监视器有没有记录整个仿真空间的能量,结果当然差别大。

你可以添加一Profile监视器覆盖整个仿真区,用小的光源,在监视器中用对数查看强度,你看看结果如何?

光源大小不能任意设置,必须以不截断光源场为前提。


#5

@gsun 谢谢
其实我已经用profile监视器把光源围成一个闭区域,那几个点监视器是放图时忘记删除掉的,造成了误解。图中的黄色线就是profile监视器围城了区域。

验证了一下,光源过小,把有效模式场截断了,造成能量不守恒,或者说光源能量无法正确计算。
另外,之前你提到一个点,有点疑问,如下

这种情况,应该如何引入一个波导来耦合光子晶体波导?这种波导是不是一个普通的介质波导,例如硅波导?
(可能问题稍有点偏离主题)

谢谢回答!


#6

好的,原帖的问题应该是解决了,是吧?

第二个无关问题的简单回复:就是普通的波导,当然一般是与光子晶体相同的材料(从制造角度考虑,当然任何其它材料都可以),不过关键的问题是如何设置此波导以及以光子晶体的连接部分已实现最大的耦合效率。再有问题请另外发帖。