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