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