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