笔记参考 LINK
1.会话管理
fdtd = lumapi.FDTD
打开新的FDTD Solutions界面
可以一次创建同一产品和不同产品的多个会话,例如:
mode1 = lumapi.MODE()
mode2 = lumapi.MODE()
device = lumapi.DEVICE()
每个产品的构造函数都支持以下命名的可选参数:
- hide(默认为 False):在启动时显示或隐藏 Lumerical GUI/CAD 环境
- 文件名filename(默认为空):如果为空则启动新应用程序,如果提供 lsf 文件将运行脚本。 如果提供了项目文件名; 如果可以在路径中找到它,它将尝试加载项目。
eval()函数:相当于把一段包含脚本信息的字符串文本或者.lsf文件识别出来,然后打开fdtd窗口运行该段脚本。
在管理会话时发现pycharm运行脚本完成后Lumerical窗口会自动关闭,导致存图等操作不方便。可以用:
import time
while 1:
time.sleep(10)
让窗口一直悬停开启或者:
if input() == '1':
exit()
控制程序结束。
使用构造函数添加模拟对象:
fdtd.addfdtd(dimension="2D", x=0.0e-9, y=0.0e-9, x_span=3.0e-6, y_span=1.0e-6)
其他一些常用函数:
from collections import OrderedDict
props = OrderedDict([("name", "power"),("override global monitor settings", True),("x", 0.),("y", 0.4e-6),
("monitor type", "linear x"),("frequency points", 10.0)])
fdtd.addpower(properties=props)
文档字符串:有关环境中lumapi方法的信息,支持Lumerical会话对象的Python文档字符串,可以使用Python内置函数help来查看文档字符串:
help(f.addfdtd)
2.数据传递
使用Python API驱动Lumerical时,环境建立了联系但是二者不共享工作区。getdata()可以返回参数以及单个场数据,比如Ex;getresult()可以直接返回数据集
Python和Lumerical数据对照:
Lumerical | Python |
---|---|
String | string |
Real | float |
Complex | np.array |
Matrix | np.array |
Cell array | list |
Struct | dictionary |
Dataset | dictionary |
后续遇到相关问题再详细讨论
3.进行光子逆向设计
该领域的简要介绍可以参考:
LINK
这是对文章的中文解读 LINK
掌握一些基本术语:梯度下降优化(gradient descent optimization);品质因数(figure of merit),也缩写成FOM;局部最小值(local minima);成本函数(the cost function)。
伴随法(Adjoint method)
在Lumerical中,伴随方法被打包成lumopt模块。Lumopt有两种不同方式——形状优化和拓扑优化。
形状优化可以直接定义要变化的几何参数,以及参数的界限。这允许用户从一个好的初始起点开始设计并对其进行改进;但是,定义几何形状需要一些工作,并且可以通过此参数化实现的解决方案集可能会受到限制。像这样的显式参数化意味着可轻松执行可制造性的设计规则。
拓扑逆向设计要求用户简单地定义可优化的封装和所涉及的材料。 结果,参数只是该区域的体素,允许实现非常不直观的形状。 通常会实现莫名其妙的形状和出色的性能,但由于出现的小特征,这些结构往往更难用光刻法制造。 我们采取了多种措施来确保它们的可制造性,包括平滑函数和惩罚项以减少小特征。
后续第一阶段的Lumerical Python API开发围绕lumopt进行。