資源中心

News Center

Lumerical Python API (五) - 數據傳遞

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

瀏覽次數:

用Python API啟動Lumerical的仿真軟件時,建立了兩者環(huán)境之間的聯系,彼此的工作空間不共享,而是在變量傳遞過程中創(chuàng)建一個相同的副本,根據getv( )和put( )函數中定義的轉換類型來進行前傳和后傳。2020a R4版本將典型傳輸速率提高至約為300MBs,并將傳輸數據所需的內存開銷減少[1],提高了數據傳輸的效率,但當數據量傳輸量非常大的時候,數據傳遞的規(guī)律仍顯得很重要。

Lumerical和Python中的數據類型對應如下:

LumericalPython
Stringstring
Realfloat
Complexnp.array
Matrixnp.array
Cell arraylist
Structdictionary
Datasetdictionary

仿真過程中,經常會從監(jiān)視器中提取各種數據類型的結果,并進一步進行傳遞、數據處理、作圖等操作。接下來針對大家使用Python API進行仿真或提取結果時,常涉及到的數據類型進行總結:

1. 原始數據(Raw Data)

從運行過的仿真工程中的監(jiān)視器結果中,可以直接訪問原始數據,這些數據在 Lumerical中以矩陣的形式存在,將其傳遞到Python環(huán)境時,將作為numpy數組返回。矩陣各維度的長度將與相關參數的長度一致,與監(jiān)視器在各個維度上的監(jiān)測點個數有關。

屬性:數據集中實際數據,例如,電場分量Ex、Ey、Ez是場分布監(jiān)視器的屬性。

參數:數據集的相關位置向量。例如,位置x、y、z和頻率f可以是場剖面監(jiān)視器的參數。

用getdata( )函數可以獲取監(jiān)視器的原始數據,注意與getresult( )區(qū)分,得到數據后可以用Python的squeeze( )函數,或者Lumerical的pinch( )函數來刪除單個元素的維度,調整結果矩陣的形式。

以下是一個簡單的Python API控制Lumerical FDTD進行仿真,并提取數據回到Python的例子:

with?lumapi.FDTD()?as?fdtd:
????fdtd.addfdtd(dimension='2D',?x=0.0e-9,?y=0.0e-9,?x_span=3.0e-6,?y_span=1.0e-6)
????fdtd.addgaussian(name?=?'source',?x=0.,?y=-0.4e-6,?injection_axis='y',?waist_radius_w0=0.2e-6,?wavelength_start=0.5e-6,?wavelength_stop=0.6e-6)
????fdtd.addring(?x=0.0e-9,?y=0.0e-9,?z=0.0e-9,?inner_radius=0.1e-6,?outer_radius=0.2e-6,?index=2.0)
????fdtd.addmesh(dx=10.0e-9,?dy=10.0e-9,?x=0.,?y=0.,?x_span=0.4e-6,?y_span=0.4e-6)
????fdtd.addtime(name='time',?x=0.0e-9,?y=0.0e-9)
????fdtd.addprofile(name='profile',?x=0.,?x_span=3.0e-6,?y=0.)?

????#?Dict?ordering?is?not?guaranteed,?so?if?there?properties?dependant?on?other?properties?an?ordered?dict?is?necessary
????#?In?this?case?'override?global?monitor?settings'?must?be?true?before?'frequency?points'?can?be?set????
????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)??
????fdtd.save('fdtd_file.fsp')
????fdtd.run()

????#Return?raw?E?field?data
????Ex?=?fdtd.getdata('profile','Ex')
????f?=?fdtd.getdata('profile','f')
????x?=?fdtd.getdata('profile','x')
????y?=?fdtd.getdata('profile','y')
????
print('Frequency?field?profile?data?Ex?is?type',?type(Ex),'?with?shape',?str(Ex.shape?))
print('Frequency?field?profile?data?f?is?type',?type(f),?'with?shape',?str(f.shape?))
print('Frequency?field?profile?data?x?is?type',?type(x),?'with?shape',?str(x.shape?))
print('Frequency?field?profile?data?y?is?type',?type(y),?'with?shape',?str(y.shape?))

Python程序設置了光源、環(huán)形結構、網格、監(jiān)視器等,最終返回相應結果的維度,如下圖所示,可以直接用Python對數據進行進一步處理、出圖。

Lumerical Python API (五) - 數據傳遞
2. 數據集(Datasets)

數據集是互相相關的結果,打包在Lumerical中,可以輕松地可視化或訪問,主要包含三種直線數據集:

Lumerical Python API (五) - 數據傳遞

其中,Nx, Ny, Nz為坐標向量的長度,Np為參數長度。正如本節(jié)之前提到的,如果數據集中參數的維度比較小,例如二維或一維,那么很多個維度的長度將為1,這時就需要使用Lumerical的pinch( )函數來刪掉多余的單元素維度。非結構化空間數據集情況類似,但包含了網格點的連通性屬性,作為空間屬性,廣泛用于有限元求解器CHARGE、HEAT、FEEM和DGTD。

傳遞給python環(huán)境的空間數據集將被轉換為字典,字典中的鍵(keys)與各種屬性和參數相關聯。由于屬性是矩陣,它們將轉換為numpy數組。此外,它們將有一個特殊的元數據標簽'Lumerical_dataset',當執(zhí)行往返傳遞時,可以保留它們的結構。使用 getresult( )方法獲取返回的數據集:

with?lumapi.FDTD('fdtd_file.fsp')?as?fdtd:???
????#返回兩種維度不同的數據集
????T,?time?=?fdtd.getresult('power',?'T'),?fdtd.getresult('time','E')
????#創(chuàng)建一個非結構化數據集
????fdtd.eval('x?=?[0;1;2];y?=?[0;sqrt(3);0];z?=?[0;0;0];C?=?[1,3,2];ds?=?unstructureddataset(x,y,z,C);')
????ds?=?fdtd.getv('ds')
????
print('Transmission?result?T?is?type',?type(T),'?with?keys',?str(T.keys())?)
print('Time?monitor?result?E?is?type',?type(time),'?with?keys',?str(time.keys())?)
print('Unstructured?dataset?is?type',?type(ds),'?with?keys',?str(ds.keys())?)

返回結果:

Lumerical Python API (五) - 數據傳遞

參考:

[1]https://optics.ansys.com/hc/en-us/articles/360041401434-Passing-Data-Python-API

Lumerical Python API (五) - 數據傳遞


相關推薦

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