資源中心

News Center

Lumerical Python API (三) - 會話管理

發(fā)布日期:
2023-12-06

瀏覽次數(shù):

本文演示了 Lumerical 仿真軟件與 Python 聯(lián)合工作的具體流程,展示了開發(fā)復(fù)雜的自動化仿真計算和高級數(shù)據(jù)處理、繪圖的可行性。使用 Python API(即上一篇文章中提到的lumapi庫)即可實(shí)現(xiàn)仿真軟件與Python的交互操作。用戶可以用 Python 代碼實(shí)現(xiàn)對于 Lumerical 軟件仿真的初始化設(shè)置,運(yùn)行和迭代,以及數(shù)據(jù)傳遞和處理。

1. 開啟會話

連接到 lumapi.py 文件是啟用 Lumerical-Python API 接口的關(guān)鍵。首先需要導(dǎo)入 lumapi 庫并初始化會話 (初始化會話需要 GUI lisence),詳細(xì)方法參考Lumerical Python API (二) - 初始配置,之后便可以對仿真對象進(jìn)行訪問,相關(guān)的開啟會話函數(shù)在lumapi庫中均有定義:

fdtd?=?lumapi.FDTD()??#開啟會話
mode?=?lumapi.MODE()
device?=?lumapi.DEVICE()
interconnect?=?lumapi.INTERCONNECT()

這種類似構(gòu)造函數(shù)的命令中,帶有以下兩種可選參數(shù):

  • hide”:可設(shè)置為“True”或“False”,默認(rèn)為“False”,決定是否顯示仿真軟件的GUI/CAD界面;

  • filename”:默認(rèn)為空,保持默認(rèn)則創(chuàng)建一個新工程,如果提供了腳本文件,則會在新工程中運(yùn)行該腳本;如果輸入具體文件名則會打開相應(yīng)文件名的工程。

如果要打開名為simple_high_Q_cavity.fsp的工程,只需運(yùn)行:

shQc?=?lumapi.FDTD(filename='simple_high_Q_cavity.fsp',?hide?=?False)

如果要在FDTD中直接運(yùn)行名為simple_high_Q_cavity.lsf的腳本,且不顯示仿真軟件的GUI/CAD,只需運(yùn)行:

run_script?=?lumapi.FDTD(filename='simple_high_Q_cavity.lsf',?hide=?True)

2. 導(dǎo)入方法

使用API接口進(jìn)行編程時,可以用Python定義函數(shù),也可以利用lumapi中的自動同步函數(shù),從 .lsf 腳本文件中導(dǎo)入函數(shù),具體方法是用eval( )函數(shù)執(zhí)行腳本。例如,要導(dǎo)入腳本字符串中的函數(shù),只需運(yùn)行:

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))

便會輸出結(jié)果“hello world”以及“11.2”。要導(dǎo)入腳本文件“testScript.lsf”中的函數(shù),只需運(yùn)行:

fdtd?=?lumapi.FDTD()
script?=?open('C:/desktop/testScript.lsf'.'r').read()
fdtd.eval(code)

腳本也可以在構(gòu)造函數(shù)中作為參數(shù)來定義方法:

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支持使用構(gòu)造函數(shù)添加對象和從構(gòu)造函數(shù)設(shè)置仿真對象。構(gòu)造函數(shù)可以添加仿真區(qū),并設(shè)置相關(guān)的參數(shù),如位置、大小等等:

fdtd.addfdtd(dimension='2D',?x=0.0e-9,?y=0.0e-9,?x_span=3.0e-6,?y_span=3.0e-6)

添加監(jiān)視器:

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)

如果對象的某一參數(shù)會受到其他參數(shù)影響,這時使用有順序的字典設(shè)置,要用到OrderedDict( )函數(shù),注意OrderedDict包只適用于Python 2,可以安裝適用于Python 3的Collections包。如果參數(shù)獨(dú)立,則可以直接用Python字典設(shè)置:

props?=?{'name':?'power',
?????????'x'?:?'0.0',
?????????'y'?:?'0.0',
??????????'monitor?type'?:?'linear?x'}
fdtd.addpower(properties=props)

如果要給仿真對象修改或添加某些參數(shù),lumapi中均有相應(yīng)的函數(shù)來完成,也可以通過本文“2.導(dǎo)入方法”中提到的方式,用一些.lsf腳本命令實(shí)現(xiàn),例如添加長方體:

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會自動刪除作用域以外的變量,因此大多數(shù)時候不需要手動關(guān)閉會話。在pyCharm中,Python程序運(yùn)行結(jié)束也會自動關(guān)閉會話,即所打開的仿真軟件窗口在程序運(yùn)行結(jié)束時會自動關(guān)閉。也有一些其他編譯器,不自動關(guān)閉會話,如果想手動進(jìn)行關(guān)閉,可以使用close( )函數(shù):

fdtd.close()??#關(guān)閉會話

本節(jié)簡單介紹了lumapi的會話管理,可以初步實(shí)現(xiàn)Lumerical仿真軟件與Python腳本的交互。Lumerical腳本語言可以看作是Python代碼的子集,lumapi給用戶提供了更為豐富的創(chuàng)造空間,原先.lsf腳本難以實(shí)現(xiàn)的功能,現(xiàn)在都有希望借助Python腳本實(shí)現(xiàn)。之后我們將討論兩種腳本之間的關(guān)聯(lián),并闡述Python與Lumerical之間數(shù)據(jù)傳遞的規(guī)律。

參考:

[1]https://optics.ansys.com/hc/en-us/articles/360041873053

Lumerical Python API (三) - 會話管理


相關(guān)推薦

Lumerical 薄膜鈮酸鋰電光相位調(diào)制器
在這個示例中,我們基于Mercante等人的工作[1]模擬了一種薄膜鈮酸...
Lumerical 單行載流子光電探測器仿真方法
綜述在本例中,我們將研究混合硅基光電探測器的各項性能。單行載流子(uni...
使用 Lumerical 對鐵電波導(dǎo)調(diào)制器進(jìn)行仿真應(yīng)用
01說明在本例中,我們仿真了使用BaTiO2的鐵電波導(dǎo)調(diào)制器,BaTiO...
Lumerical 單光子雪崩二極管仿真
01說明二次光子在單光子雪崩探測器(SPAD)的雪崩過程中被發(fā)射,它們對...