CST-Python實(shí)例教程五:外部后處理
前言
在工程設(shè)計(jì)、求解計(jì)算的過(guò)程中,往往存在大量重復(fù)性的工作,這些工作不僅耗時(shí)耗力,而且容易出錯(cuò)。為了提高工作效率,減少人為錯(cuò)誤,我們希望這些重復(fù)性工作能夠被計(jì)算機(jī)自動(dòng)完成,從而讓工程師從繁重的重復(fù)性勞動(dòng)中解放出來(lái),將更多的精力投入到創(chuàng)造性的工作中。
CST Studio Suite(R) 提供了 Python 編程接口,也提供了在 Python 環(huán)境中執(zhí)行 VB 腳本的接口。并且,在 CST Studio Suite 2024 中,CST Python Libraries 的特性得到了更新。
CST Studio Suite 支持將仿真得到的數(shù)據(jù)導(dǎo)出為 HDF5 格式文件(.h5
),方便在 Python 中進(jìn)行更深入的數(shù)據(jù)分析和后處理。通過(guò) Python 的科學(xué)計(jì)算庫(kù)(如 h5py
、numpy
和 matplotlib
等),用戶可以高效地處理和可視化這些數(shù)據(jù),從而更好地理解和優(yōu)化仿真結(jié)果。我們將通過(guò)一個(gè)演示案例,將仿真結(jié)果導(dǎo)出為 HDF5 格式文件,并使用 Python 進(jìn)一步處理結(jié)果。
廣州浦信系統(tǒng)技術(shù)有限公司發(fā)布的 CST Studio Suite(R) Python Automation and Scripting 系列文章,將會(huì)為您詳細(xì)介紹使用 Jupyter Notebook 連接到 CST Studio Suite 進(jìn)行腳本控制與自動(dòng)化仿真的方方面面。
文章共分為5個(gè)部分,分別介紹以下內(nèi)容:
搭建 Python 環(huán)境
控制 CST 建模
仿真并繪制結(jié)果
仿真優(yōu)化
外部后處理
本期為第 5 篇文章,詳細(xì)介紹如何使用 Python 對(duì) CST Studio Suite 仿真結(jié)果進(jìn)行進(jìn)一步處理。
零、為什么需要使用 Python
CST Studio Suite 已經(jīng)足夠強(qiáng)大,能夠勝任絕大多數(shù)復(fù)雜系統(tǒng)的設(shè)計(jì)和仿真工作。然而,隨著智能化時(shí)代的到來(lái),我們面臨的工程挑戰(zhàn)也日益復(fù)雜。
在上一篇文章中,我們介紹了 CST Studio Suite 提供的 Python 接口,為用戶將已有的優(yōu)化程序算法相結(jié)合提供了足夠的便利,同時(shí)也為 AI 技術(shù)的引入進(jìn)行了賦能。
今天我們繼續(xù)拓展該話題,介紹使用 Python 對(duì) CST Studio Suite 的仿真結(jié)果進(jìn)行外部后處理。通過(guò)與 Python 的結(jié)合,我們可以進(jìn)一步拓展 CST Studio Suite 的應(yīng)用范圍,以應(yīng)對(duì)更加復(fù)雜的工程挑戰(zhàn)。
一、準(zhǔn)備工作
在此前的文章中,我們分享了搭建 Python 測(cè)試環(huán)境的流程,并完成了建模、求解器設(shè)置、仿真、結(jié)果繪制、仿真優(yōu)化等工作。
現(xiàn)在,我們使用前面創(chuàng)建的 T 型波導(dǎo)進(jìn)行演示。嘗試將仿真結(jié)果導(dǎo)出為 HDF5 格式文件,并使用 Python 進(jìn)一步處理結(jié)果。
要實(shí)現(xiàn)使用 Python 進(jìn)行外部后處理,整體的工作流程為:
打開(kāi)仿真結(jié)果,手動(dòng)或通過(guò)腳本將仿真結(jié)果導(dǎo)出為 HDF5 文件(即本節(jié)內(nèi)容)
使用 Python 腳本處理數(shù)據(jù)(即第二節(jié)內(nèi)容)
展示結(jié)果(即第三節(jié)內(nèi)容)
而本節(jié)的工作就是運(yùn)行仿真,得到仿真結(jié)果,并將仿真結(jié)果導(dǎo)出為 HDF5 格式文件。
運(yùn)行仿真
打開(kāi) CST Studio Suite,加載測(cè)試項(xiàng)目,并運(yùn)行仿真,等待仿真結(jié)束。
軟件內(nèi)運(yùn)行后處理
考慮將場(chǎng)監(jiān)視器e-field(f=9)
的結(jié)果數(shù)據(jù)導(dǎo)出為 HDF5 文件,這一步可以使用相應(yīng)的后處理模板,操作路徑為:
在導(dǎo)航樹(shù)中選中 2D/3DResult > E-field > e-field(f=9)[1] 結(jié)果
點(diǎn)擊 Post-Processing 選項(xiàng)卡,點(diǎn)擊 Tools > Result Templates
在彈窗中分別選擇 2D and 3D Field Results > - Export 3D Field Result
在另一個(gè)彈窗中點(diǎn)擊 Browse Result,確保選中目標(biāo)頻率的結(jié)果(即 E-field > e-field(f=9)[1] )
根據(jù)需要設(shè)置采樣步長(zhǎng) Step-size(本例設(shè)置步長(zhǎng)為 1,以獲得更好的分辨率)
確保文件類型選中 HDF5
點(diǎn)擊 OK
點(diǎn)擊 OK 之后,選中該后處理任務(wù),然后點(diǎn)擊 Evaluate,即可開(kāi)始導(dǎo)出文件。
也可以通過(guò) Python 界面直接導(dǎo)出文件,代碼如下:
ascii_export = prj_3d.ASCIIExportprj_3d.SelectTreeItem(r"2D/3D Results\E-Field\e-field (f=9) [1]")ascii_export.Reset()ascii_export.SetfileType ("hdf5")ascii_export.FileName(tmp + r"\e-field (f=9) [1].h5")ascii_export.Mode("FixedWidth")ascii_export.Step(1)ascii_export.Execute()
導(dǎo)出文件后,文件的路徑可以在信息欄中查看。
保存并關(guān)閉CST
生成結(jié)果文件后,后續(xù)的結(jié)果解讀和數(shù)據(jù)處理可以不依賴于 CST Studio Suite 了,即使關(guān)閉了 CST Studio Suite,也不影響后續(xù)操作。
至此,我們已經(jīng)完成結(jié)果數(shù)據(jù)的導(dǎo)出,可以保存工程文件并關(guān)閉 CST Studio Suite。
二、編寫結(jié)果處理腳本
得到仿真結(jié)果和導(dǎo)出的 HDF5 文件后,我們開(kāi)始考慮使用 Python 腳本處理數(shù)據(jù)??梢愿鶕?jù)工程需要,自由編寫數(shù)據(jù)處理腳本。
本例所示的腳本代碼,讀取剛才導(dǎo)出的包含了電場(chǎng)(E-Field)數(shù)據(jù)的 HDF5 文件,計(jì)算 0 和 90 度相位的場(chǎng)強(qiáng)分布,進(jìn)行簡(jiǎn)單的數(shù)據(jù)處理。
讀取 HDF5 文件
導(dǎo)入必要的庫(kù)并打開(kāi)文件
import h5pyimport numpy as npimport tempfileimport matplotlib.pyplot as plttmp = tempfile.gettempdir()file_name = tmp + r"\e-field (f=9) [1].h5"f = h5py.File(file_name, 'r')
查看文件結(jié)構(gòu)
列出文件中的所有數(shù)據(jù)集,以幫助了解文件的結(jié)構(gòu)。
list(f.keys())
簡(jiǎn)單數(shù)據(jù)處理
了解了文件的數(shù)據(jù)結(jié)構(gòu)之后,我們對(duì)該數(shù)據(jù)做一些微小的處理工作……
創(chuàng)建數(shù)組
為了進(jìn)一步處理和繪圖,我們先獲取網(wǎng)格線數(shù)據(jù),meshX
、meshY
、meshZ
分別存儲(chǔ)了 X、Y、Z 方向上網(wǎng)格線的位置信息。
dset = f['E-Field']meshX = np.asarray(f['Mesh line x'])meshY = np.asarray(f['Mesh line y'])meshZ = np.asarray(f['Mesh line z'])
分析電場(chǎng)數(shù)據(jù)
接下來(lái),讓我們進(jìn)一步了解一下電場(chǎng)數(shù)據(jù)的結(jié)構(gòu)。
dset.dtype
獲取電場(chǎng)在 X、Y、Z 方向上的實(shí)部和虛部數(shù)據(jù),并組合成復(fù)數(shù)形式:Ex
、Ey
、Ez
。
Ex = (dset['x']['re']+1j*dset['x']['im'])Ey = (dset['y']['re']+1j*dset['y']['im'])Ez = (dset['z']['re']+1j*dset['z']['im'])
計(jì)算0和90度相位結(jié)果
分別計(jì)算 0 和 90 度相位的場(chǎng)強(qiáng)絕對(duì)值。
E_0_abs = np.sqrt(Ex[:,11,:].real**2 + Ey[:,11,:].real**2 + Ez[:,11,:].real**2)E_90_abs = np.sqrt((Ex[:,11,:]*1j).real**2 + (Ey[:,11,:]*1j).real**2 + (Ez[:,11,:]*1j).real**2)
至此,我們完成了對(duì)電場(chǎng)(E-Field)數(shù)據(jù)的簡(jiǎn)單處理。
三、結(jié)果展示
最后,我們使用 matplotlib 函數(shù)進(jìn)行繪圖,分別繪制相位為 0 度和 90 度電場(chǎng)的二維切面。
title_0 = f"View of absolute field values for phase zero at y = {meshY[11]:.3f}"title_90 = f"View of absolute field values for phase 90 at y = {meshY[11]:.3f}"%matplotlib inlineplt.figure(figsize=(8,7))plt.imshow(E_0_abs, extent=[meshX[0], meshX[-1], meshZ[0], meshZ[-1]], origin='lower', cmap='jet', aspect='equal', interpolation="bicubic")plt.colorbar()plt.title(title_0)plt.figure(figsize=(8,7))plt.imshow(E_90_abs, extent=[meshX[0], meshX[-1], meshZ[0], meshZ[-1]], origin='lower', cmap='jet', aspect='equal', interpolation="bicubic")plt.colorbar()plt.title(title_90)
這里展示的是一個(gè)簡(jiǎn)單的利用 Python 進(jìn)行外部后處理的結(jié)果,用戶可以根據(jù)實(shí)際工程需要,以自定義的方式編寫腳本,使得 Python 與 CST Studio Suite 有機(jī)地結(jié)合起來(lái),促進(jìn)仿真和設(shè)計(jì)持續(xù)迭代。這種協(xié)同進(jìn)化的方式,不僅能夠提升我們的工作效率,還能為復(fù)雜工程問(wèn)題研究和計(jì)算領(lǐng)域帶來(lái)更多的可能性。
總結(jié)
在導(dǎo)出數(shù)據(jù)的過(guò)程中設(shè)置適當(dāng)?shù)?Step-size。
讀取 HDF5 文件時(shí),可以根據(jù)需要使用相對(duì)路徑或絕對(duì)路徑。
用戶可以根據(jù)實(shí)際工程需要,以自定義的方式編寫腳本。