如何利用Python批處理CST的仿真模型并提取關注的結果?
作者 | Ma Bin
如果對于一個CST仿真模型,我們需要不斷的嘗試各種參數(shù)組合,以比較不同參數(shù)組合下的計算結果,那么我們應該怎么做呢?
方法一:一次一次的打開模型,修改參數(shù)并且啟動仿真,然后保存每一次的結果?
方法二:進行一些參數(shù)掃描,甚至是迭代的進行多個參數(shù)的掃描?
顯然,方法二適用于每次只變1-3個參數(shù),如果每次需要改變的參數(shù)很多,并且參數(shù)的變化沒有規(guī)律,那么這種嵌套的掃參方式會計算一些無用的參數(shù)組合結果,不僅浪費時間還多占用內(nèi)存。
如果只需進行3次或者5次的參數(shù)組合,那其實直接用方法一,就是最高效最簡單的辦法。但是如果參數(shù)的組合數(shù)上升到50次甚至500次,那我們就需要尋求另一種方法了,這也是這篇文章中我想跟大家介紹的利用Python進行批處理的方法。
方法三:利用Python進行批處理
我們以一個CST自帶的喇叭天線為例,這里的監(jiān)視器做了刪減,只保留了三個頻點的遠場監(jiān)視器,我們關心的是天線的遠場性能和S參數(shù)。
在這個喇叭天線模型中,有很多參數(shù)。我們創(chuàng)建一個Excel,命名為Parameter List,然后輸入三組天線的參數(shù),這里我們只改變其中三個參數(shù)。需要注意的是,參數(shù)的修改必須是合理的,否則會造成3D建模報錯,進而會導致Python代碼運行不成功,無法達到批處理的效果。
在CST中,我們還需要設置兩個后處理模板,一個是導出遠場方向圖,另一個是導出S參數(shù)。這里的結果導出,可以根據(jù)需要隨意調(diào)整。
在Python腳本中,有以下幾個重要的組成部分。
導入必要的庫,包括CST的庫:這里主要是導入DesignEnviroment,它可以控制CST的打開和關閉;其他的庫比如xlrd、numpy、matplotlib等等視需要而定;
讀取參數(shù)列表:從Excel中讀取我們需要的參數(shù)組合;
For循環(huán):遍歷Excel中所有的行,每個循環(huán)中嵌套CST的打開、修改模型、仿真、導出數(shù)據(jù)最后關閉CST等一系列操作。
CST控制:完成指定CST仿真工程的打開和關閉,按照Excel中的參數(shù)修改模型的parameter list,選擇求解器并啟動仿真。其中,將Excel中的參數(shù)傳遞給CST,并控制CST的parameter list進行參數(shù)修改,主要參照下面的代碼;
數(shù)據(jù)導出:CST中設置的后處理模板,會將需要的結果保存到所在工程文件夾下的Export文件夾中,需要通過Python將每次循環(huán)計算的結果抓取并存放到指定output文件夾中。
數(shù)據(jù)繪圖:利用Python可以對每次計算的結果進行繪圖,在批處理完成之后,可以對每種參數(shù)組合的主要結果進行預覽。這一步可有可無,按需取舍。
運行Python代碼,如下圖,可以顯示Number of Antenna和 Parameter name等等信息,還可以顯示目前的進度。當然這里也可以顯示CST模型的網(wǎng)格數(shù)量,端口數(shù)量等等用戶關心的信息,只需要加代碼即可。
隨后,在指定的output文件夾內(nèi),可以看到導出的數(shù)據(jù),這里的數(shù)據(jù)都自動加了前綴以便區(qū)分。值得說明的是,在本例中我們關心的是每個喇叭天線的S參數(shù)和遠場性能,所以這里就只抓取了這些結果。如果需要場源文件、電場數(shù)據(jù)等等,都可以通過后處理+Python的方式抓取并保存。
最后,將每個天線的主要性能都用Python繪制出來,方便查看。
也可以將同類的數(shù)據(jù)都繪制在一起,更方便對比。當然,這個比較靈活,根據(jù)需要修改代碼即可。
最后做個總結,以前CST軟件的二次開發(fā)多以VBA語言為主,近年來,細心的讀者已經(jīng)發(fā)現(xiàn)我們開放了很多Python的接口,因為Python的開源性、可擴展性以及可讀性使得它更容易被電磁工程師接受和上手。
在本例中,我們展示了利用Python批處理CST的仿真工程,并抓取我們所關心的結果。當我們需要進行大量的重復性仿真時,我們可以嘗試編寫一段python腳本幫助我們,正所謂磨刀不誤砍柴工嘛。