本文演示了 Lumerical 仿真软件与 Python 联合工作的具体流程,展示了开发复杂的自动化仿真计算和高级数据处理、绘图的可行性。使用 Python API(即上一篇文章中提到的lumapi库)即可实现仿真软件与Python的交互操作。用户可以用 Python 代码实现对于 Lumerical 软件仿真的初始化设置,运行和迭代,以及数据传递和处理。
fdtd = lumapi.FDTD() #开启会话
mode = lumapi.MODE()
device = lumapi.DEVICE()
interconnect = lumapi.INTERCONNECT()
shQc = lumapi.FDTD(filename="simple_high_Q_cavity.fsp", hide = False)
如果要在FDTD中直接运行名为simple_high_Q_cavity.lsf的脚本,且不显示仿真软件的GUI/CAD,只需运行:
run_script = lumapi.FDTD(filename="simple_high_Q_cavity.lsf", hide= True)
fdtd = lumapi.FDTD()
fdtd.eval("function helloWorld(){return \"hello world\";}\nfunction addTest(a,b){return a+b;}")
print(fdtd.helloWorld())
print(fdtd.addTest(9.2,2))
fdtd = lumapi.FDTD()
script = open('C:/desktop/testScript.lsf'.'r').read()
fdtd.eval(code)
def testAddingMethodsFromConstructor(self):
app = self.appConstructor(script='testScript.lsf')
expectedMethods = {'helloWorld'}
expectedResults = ['hello world from script file']
results = []
results.append(app.helloWorld())
self.assertEqual(results, expectedResults)
app.close()
从2019a版本开始,Python API支持使用构造函数添加对象和从构造函数设置仿真对象。构造函数可以添加仿真区,并设置相关的参数,如位置、大小等等:
fdtd.addfdtd(dimension="2D", x=0.0e-9, y=0.0e-9, x_span=3.0e-6, y_span=3.0e-6)
添加监视器:
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)
如果对象的某一参数会受到其他参数影响,这时使用有顺序的字典设置,要用到OrderedDict( )函数,注意OrderedDict包只适用于Python 2,可以安装适用于Python 3的Collections包。如果参数独立,则可以直接用Python字典设置:
props = {"name": "power",
"x" : "0.0",
"y" : "0.0",
"monitor type" : "linear x"}
fdtd.addpower(properties=props)
如果要给仿真对象修改或添加某些参数,lumapi中均有相应的函数来完成,也可以通过本文“2.导入方法”中提到的方式,用一些.lsf脚本命令实现,例如添加长方体:
rectangle = fdtd.addrect(x = 2e-6, y = 0.0, z = 0.0)
rectangle.x_span = 10.0e-6
rectangle.y_span = 0.4e-6
rectangle.z_span = 0.2e-6
Python会自动删除作用域以外的变量,因此大多数时候不需要手动关闭会话。在pyCharm中,Python程序运行结束也会自动关闭会话,即所打开的仿真软件窗口在程序运行结束时会自动关闭。也有一些其他编译器,不自动关闭会话,如果想手动进行关闭,可以使用close( )函数:
fdtd.close() #关闭会话
本节简单介绍了lumapi的会话管理,可以初步实现Lumerical仿真软件与Python脚本的交互。Lumerical脚本语言可以看作是Python代码的子集,lumapi给用户提供了更为丰富的创造空间,原先.lsf脚本难以实现的功能,现在都有希望借助Python脚本实现。之后我们将讨论两种脚本之间的关联,并阐述Python与Lumerical之间数据传递的规律。
[1]https://optics.ansys.com/hc/en-us/articles/360041873053