Lumerical---教程说明及个人感悟
Author: JiJi \textrm{Author: JiJi} Author: JiJi
Created Time: 15.02.2023 \textrm{Created Time: 15.02.2023} Created Time: 15.02.2023
Modified Time: 21.11.2024 \textrm{Modified Time: 21.11.2024} Modified Time: 21.11.2024
引言
本教程为 Lumerical \textrm{Lumerical} Lumerical 光学系列仿真教程,旨在由简入深地向大家介绍如何使用 Lumerical \textrm{Lumerical} Lumerical 进行正确的光学仿真。
本文作为 Lumerical \textrm{Lumerical} Lumerical 光学系列仿真教程的第一篇文章,也就是综述部分,会对该仿真系列教程的主要内容进行介绍,在正式学习各个教程前,希望诸位可以仔细地阅读。
正文
1 学习路径
1.2 节中的学习目录是作者给出的最佳学习路径。目的是由浅入深,循序渐进地向大家介绍如何进行 Lumerical \textrm{Lumerical} Lumerical 仿真。推荐大家按照作者给出目录顺序来进行学习,从而可以体系化地掌握光学仿真的相关内容,事半功倍。
1.1 学习路径两大模块
学习路径下的内容主要分为两大模块:
- 基础
- 进阶
1.2 光学仿真基础三个组成部分
基础部分为三大部分:
- 常识(光学常识以及 Lumerical \textrm{Lumerical} Lumerical 常识)
- 仿真
- 脚本
1.3 光学基础进阶三个组成部分
进阶分为三大部分:
- API \textrm{API} API
- 不常被人使用的技能
- 仿真案例
2 学习目录
2.1 说明
标题后方的数字表示当前小节中教程的数量。
2.2 Lumerical 仿真基础(44)
本节我们会介绍 Lumerical \textrm{Lumerical} Lumerical 仿真相关的基础知识。
2.2.1 问答(1)
在学习
Lumerical
\textrm{Lumerical}
Lumerical 前,有些小伙伴可能对该软件有一些听闻,甚至有一些问题,在
2.2.1
\textrm{2.2.1}
2.2.1 中作者汇总了部分问题,并对这部分问题进行了回答。对于
2.2.1
\textrm{2.2.1}
2.2.1 中未包含的问题,读者可以在本文评论区下留言给作者,作者后续会添加进问答中。
Lumerical 基础问题解答
2.2.2 文件类(2)
第一步,首先我们应该了解
Lumerical
\textrm{Lumerical}
Lumerical 中所涉及的仿真文件类型有哪些,以及它们的作用是什么,这部分的相关知识将在以下教程中给出。
Lumerical 各文件后缀的含义
如何查看 S 参数文件
2.2.3 仿真结构构建及常用仿真操作 (10)
无论是绝缘体上硅还是绝缘体上氮化硅的结构,通常,波导都需要被放置在一种基底物质上,下文将对这一问题进行说明。
波导相当于纤芯,包层相当于保护层,因此,大多数时候,波导会被放置在包层中,如何设置包层详见下文。
在下文中,我们会简单说明如何创建一个 90 90 90 度的弯曲波导,其他结构的创建也可以类比下文中的操作。
进行仿真获取模式时,某些时候我们需要观察模式与波导位置之间的关系,此时可以采用下文中的设置。
在某些情况下,我们为了更好地观察到显示的 mesh \textrm{mesh} mesh 结构,需要手动关闭 CAD \textrm{CAD} CAD 窗口中默认的 Lumerical grid \textrm{Lumerical grid} Lumerical grid。
CAD 窗口关闭 grid 从而更好地显示 mesh grid
某些时候, Lumerical \textrm{Lumerical} Lumerical 的嵌入式绘图显示尺寸较小,在我们观察光场细节时极为不利,此时,我们可以采用下文中的操作解决这一问题。
在书写 Lumerical Script \textrm{Lumerical Script} Lumerical Script 时,我们可能需要进行交互式打印,可以采取下面的方式。
运行完成 Lumerical Script \textrm{Lumerical Script} Lumerical Script 或者运行完成仿真后,变量的值会被存放在 Script Workspace \textrm{Script Workspace} Script Workspace 中,我们可以使用如下方式进行查看。
运行仿真时,可以采用下面的方法手动终止程序运行。
运行完成仿真并获取到仿真结果后,我们可以采用下文中的方法导出数据并清理文件中的数据缓存,从而节省文件占用计算机的空间。
2.2.4 材料类(2)
内置材料在 1310 nm 波长下的折射率
查看用户可以自己添加的所有材料类型(完结)
2.2.5 光源(1)
对于无源器件的仿真,我们通常需要手动添加仿真光源来实现仿真,下文中我们将进行光源的相关介绍。
2.2.6 监视器(3)
频率域功率监视器是 Lumerical \textrm{Lumerical} Lumerical 仿真中最常用的监视器类型,它的用法可以参考下文。
frequency domain power monitor 频率域功率监视器
2.2.7 Mode 仿真(8)
Mode 工程下三种可供使用的求解器简介
如何在 Mode 仿真寻找模式
Straight Si waveguide simulation 硅直波导仿真
override color opacity from material database 重写材料库中材料的透明度
Simulation mesh settings 仿真网格设定(完结)
override mesh order from material database 重写材料库中材料对应的网格次序
Mode 模式分析错误设定波长值
FDE 求解器工作流程
2.2.8 FDTD 仿真(14)
在进行 FDTD \textrm{FDTD} FDTD 仿真时,我们也需要进行网格设定, FDTD \textrm{FDTD} FDTD 中存在多种不同的网格类型,具体可以参考下文,这部分内容仅作了解即可。
关于 FDTD \textrm{FDTD} FDTD 网格尺寸及网格细化的设置可以参考下文。
进行完整的 FDTD \textrm{FDTD} FDTD 仿真,我们需要构建仿真结构与仿真区域,对于它们的尺寸,应该遵循下文进行设定。
仿真结构尺寸设置的补充说明可以参考下文。
我们已经介绍了很多关于 mesh \textrm{mesh} mesh 尺寸的设置问题,对于 mesh 的最小尺寸,可以参考下文
这里我们给出一个 mesh \textrm{mesh} mesh 尺寸的实例,详见下文
想要获取正确的仿真结果, FDTD \textrm{FDTD} FDTD 的边界条件设置也十分重要,下文中我们对边界条件进行总结。
金属型边界条件的详细说明可以查看下文。
完美吸收型边界条件的详细说明可以参考下文。
对于完美吸收型边界条件,有时候我们需要设置将仿真结构穿过边界条件区域,具体原因可以阅读下文。
设置边界条件时应注意的事项可以参考下文。
对于 FDTD \textrm{FDTD} FDTD 仿真,除了使用监视器对光进行测量以外,还可以通过添加 Ports \textrm{Ports} Ports 来实现。
在 Ports \textrm{Ports} Ports 仿真中我们可以设定参与仿真的模式数量,可以参考下文。
端口参数设置之 Number of field profile samples
在进行 S 参数扫描时,当考虑到材料的色散特性时,我们可以如下文一样选择计算群延迟。
2.2.9 奇技淫巧(3)
这里是 Lumerical \textrm{Lumerical} Lumerical 仿真中一些不常被使用到的内容,以及不特别重要的内容,属于数量掌握仿真后额外的学习内容。读者可以自行选择是否进行学习。
标签页切换
Visualizer 绘图窗口中显示 legends
通常,注意到上述所有问题时,我们无需进行收敛收敛性测试,这部分作为选择性了解内容,读者可以自行理解。
Lumerical Convergence test (收敛性测试)
2.3 进阶仿真(38)
提及 Lumerical \textrm{Lumerical} Lumerical 的进阶仿真操作,我们就不得不提到 Lumerical Script \textrm{Lumerical Script} Lumerical Script。
2.3.1 基础语句(4)
for语句
Lumerical 数据类型
FDTD 工程文件中无法使用 precision 函数
保留有效数字位
2.3.2 常见语句错误(4)
Error: line 0: syntax error
Error: <文件目录> line x:syntax error
自定义函数命名规范
Self Define Functions 自定义函数返回多个返回值
2.3.3 结构创建示例(5)
使用脚本设置围绕物体的 mesh \textrm{mesh} mesh 会使器件结构的构建更为便捷,同时能够具有良好的迁移性,比如当我们改变器件结构尺寸后,运行代码可以立刻实现设定,从而避免冗杂的重复性操作。
之前,我们在 2.2.3 2.2.3 2.2.3 中介绍了手动创建一个 90 90 90 度的弯曲波导,下面我们介绍如何通过代码实现这一操作,所有类似的结构设定我们都可以用代码组合实现,从而使得结构构建具有良好的一致性和可迁移性,在人生中之后的类似仿真中将极大程度地节约我们的时间。
Lumerical Script ------ 使用 Script 创建一个90度弯曲波导
Lumerical \textrm{Lumerical} Lumerical 仿真中,锥形波导耦合器件是一个非常常见的模式过渡器件,下文我们将介绍如何使用代码对其结构进行构建。
Lumerical Script ------ Draw taper waveguide(绘制锥形波导结构)
对于一些复杂的结构,手动构建结构将变得十分困难,比如下面的二维带孔结构,此时,使用代码构建就成了很好的选择。
Lumerical Script ------ Draw 2D object with hole(画二维带孔的图形)
对于一些三维不常见的结构,使用代码构建也会十分便捷。
Lumerical Script ------ Draw a three-dimensional quadrangular pyramid(绘制一个三维的四棱台)
使用代码构建仿真结构是作者推荐的方式,因为此种方式一劳永逸,一次构建终身使用。之后作者本人的代码如果可以分享会构建一个开源库分享给读者。
2.3.4 仿真结果获取(1)
Lumerical \textrm{Lumerical} Lumerical 仿真结束后,通常我们需要使用内置的 Visualizer \textrm{Visualizer} Visualizer 对数据进行可视化,即我们常说的绘图处理。传统方法我们可以通过鼠标点击实现,下文中我们介绍如何使用代码获取绘图相关数据,为进一步绘图做准备
2.3.5 导出数据(4)
在 文件清理与系统存储空间释放 一文中我们介绍了如何保存仿真后的文件并清除项目文件的缓存,对于保存的数据文件,我们可以用下面的方法将其再次读入 Lumerical \textrm{Lumerical} Lumerical 中进行操作。
使用 savedata() 和 loaddata() 函数输入输出仿真数据
有些时候,我们需要对仿真后的数据进行数据处理,此时可以使用 write() \textrm{write()} write() 函数将数据导出为 Python \textrm{Python} Python 可以执行的 .txt \textrm{.txt} .txt 文件。
对于大尺寸的仿真结构,通常我们需要将其拆分成细小的结构通过 INTERCONNECT \textrm{INTERCONNECT} INTERCONNECT 对它们进行仿真。
Lumerical \textrm{Lumerical} Lumerical 中自带的绘图包并不成熟,导出数据为 .txt \textrm{.txt} .txt 文件后,我们可以使用下文中的方法通过 Python \textrm{Python} Python 对数据进行绘制。
使用 Python 处理 Lumerical 导出的 .txt 文件(完结)
2.3.6 算法(3)
对于处理仿真数据通常的做法是将仿真数据导出后用其他编译器进行处理。而对于一些简单的数据处理,我们在 Lumerical \textrm{Lumerical} Lumerical 中写入一些简单的算法。本小节中我们将介绍几个常用的算法。
查找数组中对应值的所有索引值
查找最接近给定透射率值的波长值
根据索引值删除数组中的元素
2.4 仿真实例(7)
直波导仿真及技巧
弯曲波导分析
光纤模式仿真
频率扫描 FDE Frequency sweep
光束重叠率计算
FDE Solver 的 enabled 选项是不开放的
衰逝波导耦合器对比两个模式有效折射率不相等的问题
2.5 Lumerical INTERCONNECT(8)
Interconnect 模块的工作流程
Add object from object library 从对象库中添加内置器件
Simulate Ring Resonator in INTERCONNECT
Creating parameterized straight waveguide in INTERCONNECT 创建参数化的器件
Create Mode Waveguide Element (模式波导仿真的数据用于 INTERCONNECT 中)
INTERCONNECT 添加自定义器件到 Custom 文件夹下
INTERCONNECT 使用脚本导入 Element Library 的器件
INTERCONNECT 使用脚本创建一个完整的 SCRIPTED 器件示例
2.6 仿真经验(2)
定向耦合器中心波长位置与耦合长度之间的关系
波导尺寸与有效折射率之间的关系
个人感悟
在学习中,想要完全搞明白一个东西是好事情,但是还应该秉持抓大放小的原则。比如对于实际仿真,有时,我们并不能够完全理解某些高级参数的含义,此时最好的做法就是不去管它们,使用默认值即可。用最笨、最安全、最可靠的方法。宁可牺牲电力让计算机去缓慢地执行也不要自己去 “炫技”。因为,我们做仿真的最终目标是工程化,我们需要的是得到正确的结果,而不是给自己制造麻烦。当然,对于计算机算力充沛且心有余力的小伙伴,深度钻研是值得鼓励的。
作者本人在学习 Lumerical \textrm{Lumerical} Lumerical 仿真时花费了大量的时间,前期后后历时两年之久。至今,仍有一些细节的东西说不清,道不明。但是并不影响目前的仿真设计。截止目前作者也总算是可以做出一些好的设计了。因此,作者希望大家不要总想着一开始就上特别复杂的项目,上述教程涵盖了作者本人遇到的绝大多数问题,包含了作者能够想到的近乎所有的基础问题。只要读者能够认真学习上述所有教程,就一定能学有所获。
作者的话
虽然教程中的内容以及结构并不复杂,但是关于光学仿真时需要注意的各个事项均已提及到。对于更为复杂的教程,读者只需按部就班,稍作扩展即可。
本教程是作者本人呕心沥血历时两年完成的,希望大家尊重版权,尊重作者个人的劳动成果。谢谢大家。
各位订阅专栏的朋友,在阅读学习过程中遇到任何问题,均可以在对应专栏文章下方评论区留言给博主,博主看到后都会一一回答。如果在阅读中觉得哪些部分博主没有说清楚,讲透彻的读者也可以留言 ,作者会及时补充完善。
教程中未能涉及的复杂仿真案例,读者也可以留言给博主,博主看到后会抽时间单独出一个教程进行补充。
欢迎读者朋友们动动发财的小手点点赞,谢谢大家。
第二次校订完成时间,2024.12.03,作者本人感叹,生产队的牛都不敢这么累。