在使用数值模型时,有时会遇到数值精度不理想的问题。在某些情况下,如果没有运用好的问题分析方法,理解和解决这些问题会非常繁琐。在这篇文章中,我们想分享一个用RP Fiber Power软件进行技术支持的示例,这个案例可能会对很多人有所帮助。尽管某些技术细节是特定于这个问题的,但是您也可以从这个文章中学习一些基本的、具有更普遍适用性的技术。
问题是什么?
这个案例中的的客户是一名科学研究员,他正在研究所谓的轨道角动量模式(OAM模式)在光纤中的传播,使用我们RP Fiber Power软件的数值光束传播特性。(这种模式表现出螺旋波前;如果您在离圆心任意一段距离的范围内围绕圆心旋转,您会看到所有的相变,它是2 π的整数倍)具体地说,这个客户想知道像放大这样的附加效应是如何导致模式耦合的,也就是光功率转移到其他模式。然后他注意到一些模式耦合在没有任何物理效应的情况下发生,甚至在没有任何特殊特性的被动型光纤中传播。他遇到的困难是模拟是相当耗时的,所以做很多实验是不实际的,例如不同数值参数的设置或对模拟脚本的其他更改。他已经发现,使用数字网格的最终横向分辨率确实能显著减少数字误差,但效果并不显著,而更细的纵向分辨率根本没有帮助。所以不清楚该怎么办。
解决方案的步骤
客户求助我们的时候,我们开始介入了。因为在较长的脚本中可能会忽略一些重要的细节,所以我们首先对脚本进行了彻底的简化,删除了与问题无关的所有细节。的确,在此之后,数字问题仍然存在,但可以肯定,这个问题必须是一个非常基本的问题,而不是脚本中一些被忽略的细节的结果。这绝对值得花上10到15分钟。
我们都不喜欢做大量耗时的测试运行。因此,我们打算修改仿真,使计算时间大大缩短。在目前的情况下,基本和非常简单的措施是从根本上减少光纤的长度考虑。此外,我们在一定程度上降低了横向分辨率。结果,一次模拟运行只需要几秒钟,而不是几分钟。这让我们有机会更快地测试变化的影响,例如数字细节或包含物理效应。毫无疑问,现在所调查的数值误差已经大大降低了;仍然很容易观察到数值误差。
此外,我们需要更好的工具来评估问题的严重性和类型。这也是相对简单的。通过几行脚本代码,我们定义了一个函数,该函数在特定的轨道角动量模式下,在特定的纵向位置上计算光功率,以及一个图中很好地展示了相关模式功率的演变的图表。
我们还想知道这个问题主要是与场幅误差有关还是与相位误差有关。因此,我们为模式功率定义了修改函数,我们将光束传播结果的振幅与计算模式的光相位(通过模式求解器)相结合,反之亦然;这很快表明问题主要与光学相位有关。
接下来 ,我们用颜色图定义了一个图,显示了光纤端相位误差的空间分布:
正确的相位值是绿色,而红色和白色表示不同方向的偏差。顺便说一下,外部区域的相位误差与此无关,因为当距离中心15 μm时,模态振幅会变得非常小。
其实,不需要太多的脚本代码就可以绘制出这个漂亮而有指导意义的图表:
diagram 2, size_px = (600, 600): "Phase Errors" x: -r_max / um, r_max / um "x position (µm)", @x y: -r_max / um, r_max / um "y position (µm)", @y frame hx hy phase_error(x, y, z) := arg(bp_A%(x, y, z) / bp_A%(10 um, 0, z) * A_lm_xy_oam%(-l, m, lambda_s, x, y)) cp: color_I(0.5 10 * phase_error(x * um, y * um, L_f))
我们现在可以很快地检查情况如何改变修改数值参数,但再次发现只有更高的横向空间分辨率有帮助 ,但其实甚至没有帮助太多。在一段时间里,它看起来像一个很难解决的问题,没有一个好的解决方案。对于客户来说,仅仅使用更高的数值分辨率并不是一个实用的解决方案。
现在到了比较困难的部分,需要仔细的观察和相信我们的直觉,如下:
我们用LP模式代替轨道角动量模式做了类似的测试。在那里,数值误差要小得多;在这种情况下,几乎没有人为的耦合。这一观察证实了先前的怀疑,即问题与数值网格缺乏径向对称性有关。这个想法基本上是径向对称对于轨道角动量模是重要的(但不是LP模),而数值网格(只考虑一个平面)当然是矩形的。
我们也再次查看了相位误差的图表(见上面)。我们想知道有多少问题显然是从核心包层边界开始的。现在基本思想确定了:假定光纤是阶跃指数光纤,即从芯指数到包层指数有一个急剧的转变。当您在我们的矩形网格上描述这样一个边缘锋利的圆形结构时,当然您得到的不是一个完美的圆形,而是圆形周围或多或少明显的结构。因此,不难想象这些结构会导致相反环流的OAM模态之间的人工模态耦合。
一旦认识到以上这一点,就很容易取得进一步的进展:只需尝试一个具有更平滑的核心包层界面的折射率剖面,它在矩形网格上看起来更圆。我们只是使用了一个高阶超高斯函数(例如40,60,甚至80),它非常类似于一个矩形剖面,但有一些平滑的过渡。的确,现在的数值误差比以前小得多,即使我没有使用特别精细的网格分辨率,所以问题解决了。
分析了这么多,这个特殊问题的结论是,对于数值光束传播,不应该使用阶跃折射率剖面,而应该使用至少有一点平滑的剖面:如果仅用数值网格中的几个点就可以对从芯层到包层的过渡进行采样,这就足够了。这样的折射率曲线更加真实,因为在光纤拉伸过程中的扩散无论如何都不允许理想的急剧转变。
总结
以下是我们分析这个案例的简短总结。当您处理这些数字问题时,可以考虑以下几点:
首先删除所有可能与问题无关的细节。这就避免了在各个方面排查而花费大量时间的风险。
试着在一个需要更少计算时间的情况下重现这个数值问题。这样,您可以在一个小时内尝试更多的事情。
花一点时间来创建问题分析的有用工具——例如,显示关键的数字或一些有指导意义的图表。这样,您就可以更容易地使用下面的测试运行。
试着利用你的物理直觉,而不是把这个问题当成纯粹的数学问题来考虑。这可能会建议进行额外的测试,排除某些解释,确认其他解释,这样您就会越来越接近问题的核心。这可能是最困难的地方,但我们经常发现这是取得进步的关键一步。