新闻动态

News Center

Lumerical Python API (三) - 会话管理

发布日期:
2022-07-18

浏览次数:

本文演示了 Lumerical 仿真软件与 Python 联合工作的具体流程,展示了开发复杂的自动化仿真计算和高级数据处理、绘图的可行性。使用 Python API(即上一篇文章中提到的lumapi库)即可实现仿真软件与Python的交互操作。用户可以用 Python 代码实现对于 Lumerical 软件仿真的初始化设置,运行和迭代,以及数据传递和处理。

1. 开启会话

连接到 lumapi.py 文件是启用 Lumerical-Python API 接口的关键。首先需要导入 lumapi 库并初始化会话 (初始化会话需要 GUI lisence),详细方法参考Lumerical Python API (二) - 初始配置,之后便可以对仿真对象进行访问,相关的开启会话函数在lumapi库中均有定义:
fdtd = lumapi.FDTD()  #开启会话 mode = lumapi.MODE() device = lumapi.DEVICE() interconnect = lumapi.INTERCONNECT()
这种类似构造函数的命令中,带有以下两种可选参数:


  • hide”:可设置为“True”或“False”,默认为“False”,决定是否显示仿真软件的GUI/CAD界面;
  • filename”:默认为空,保持默认则创建一个新工程,如果提供了脚本文件,则会在新工程中运行该脚本;如果输入具体文件名则会打开相应文件名的工程。


如果要打开名为simple_high_Q_cavity.fsp的工程,只需运行:
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)
2. 导入方法
使用API接口进行编程时,可以用Python定义函数,也可以利用lumapi中的自动同步函数,从 .lsf 脚本文件中导入函数,具体方法是用eval( )函数执行脚本。例如,要导入脚本字符串中的函数,只需运行:
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))
便会输出结果“hello world”以及“11.2”。
要导入脚本文件“testScript.lsf”中的函数,只需运行:
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()
3. 仿真对象

从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


// 联系我们//




电话:15521163312(微信同号)

邮箱:wenye@mooreda.com.cn



相关推荐

Zemax | 如何在OpticStudio内对斜切端面光线进行建模
本文介绍了如何在 OpticStudio 中对具有一定角度斜切端面的接收...
【Lumerical系列】无源器件-端面耦合器3丨仿真流程
本期是Lumerical系列中无源器件专题-端面耦合器第三期。本期主要展...
Speos 视觉仿真参数最佳实践
在本文中,分享一些如何最大化Ansys Speos仿真软件仿真准确性的建...
LS-DYNA电池行业应用介绍(三)
LS-DYNA使用同一模型可以同时求解结构-热-电等多方面的多物理场问题...