首页/文章/ 详情

Python调用FEKO实现自动化电磁仿真计算

1年前浏览3376

作者介绍

某国家重点实验室高级工程师,长期致力于海面目标电磁特性研究,想要持续了解关于Code-CAE相关内容的,可以关注作者知乎同名账户“爱翁”,相信作者在这个领域的持续输出会对你大有裨益。感觉有帮助的话,可以去他的知乎主页专注和点赞。



本文介绍了基于Python对FEKO进行二次开发的方法,打通了时下最热门的Code语言Python与常用电磁CAE工具FEKO两打平台之间的隔阂,为Code-CAEer的持续开发提供了坚实的基础,相较于传统基于matlab平台对FEKO进行二次开发,Python最大的优势可能就在于网络资源非常丰富,这无疑为CAEer后续持续学习和开发提供了极大的便利。

有朋友看完了我知乎往期文章《利用程序让FEKO仿真工程文件自己排队算好等着你》后留言表示:这都啥时代了,还光顾着用Matlab?美帝都要卡脖子不让用了,居然还不会用Python?


图1全民是不是都在学Python?


这不,我都被这话说得热血沸腾:不就是个Python吗,谁不会啊?我有这么菜吗?

把我说得像菜花蛇一样菜——我有这么菜吗?


话说这Matlab和Python之争,也不是一天两天了,凭着开源的优势,Python的确是有后来居上的态势。

3 Matlab vs Python


不过,俺们都是成年人了,Matlab和Python是哪个更好不重要,重要的是——作为成年人,我全都要。是的,Matlab和Python的程序我都想要,我猜你肯定也是!

图4 成年人的标志之一——“我全都要”!


不过,事情可没有那么简单,无论你是去谷歌家,还是私会美丽的度娘,都会发现,这块信息,在网上真是个0啊! 谷歌家好不容易搜出一个结果,还是利用Python直接处理feko计算结果的,压根没有涉及调用FEKO计算的事。

图5 谷歌家的搜索结果


算了,人一定要靠自己,还是我自己来吧。

图6 人一定要靠自己


经过我一番摸索、请教、尝试,终于可以给你们上干货了。


首先说明运行环境:


Python 版本:3.7.6;运行环境:Anaconda (Jupyter notebook and Spyder)


无论是Jupyter notebook还是Spyder,相信总有一款适合你,反正两个都能正常运行。

大致思路:类似在Matlab里面运行dos命令的操作,在python中去复现相应的语句。这么简单?下面你看看就知道罗。具体实施有以下几个步骤:

1、添加环境变量


以win10系统为例,“此电脑”——“属性”——“高级系统设置”——“环境变量”——“系统变量”——“编辑”——“path”,再将path增加FEKO的运行路径,一般默认路径是:C:\ProgramFiles\Altair\2021\feko\bin(注意:环境变量添加后,要重启生效,不重启的人就困在这吧。其他win7系统也很容易度娘一下得到类似结果)。


图7环境变量path的添加


添加和重启后,可以利用cmd命令调出dos命令的黑窗口,输入runfeko.exe,看看反应。

图8 cmd命令调出dos命令的黑窗口,输入runfeko.exe


如果有以下显示,则为正常。我们还可以基于此,写出更为复杂的控制命令语句。

图9 dos命令的黑窗口下输入runfeko.exe的反应

 

2、将FEKO计算工程文件放置于对应的Python工作文件夹。


例如Jupyternotebook通常对应的是 C:\Users\wuyifan,Spyder通常对应的是 C:\Users\ wuyifan \.spyder-py3,而FEKO工程文件的重点是*.pre文件。


图10 *.pre文件的罗列显示

 

3、运行Python程序,将FEKO软件在后台调用计算,计算状态信息在dos命令黑窗口显示。


根据你自己计算资源和想法,Python程序的语句也可以设置不同,自行选定计算的核心等情况。常言道,真传一句话,假传万卷书。别瞎BB,talk is cheap. show me the code.

图11 别瞎BB,talk is cheap. show me the code.

这就来啦!具体典型语句如下图所示:

图12 调用FEKO计算的典型语句显示


正所谓难者不会,会者不难。看起来非常简单的几句代码,但是相信你翻遍了谷歌,度娘也没有任何直接收获。这几句确保运行的代码也的确也琢磨了不止一会呢。作个简单说明:

1) import os是导入os库的命令。其中,os就是“operating system”的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用os模块,一方面可以方便地与操作系统进行交互,另一方面页可以极大增强代码的可移植性。


2)通常,我们接着运行语句1即可开始调用FEKO进行电磁仿真计算。这里,使用os.system("wyf")是最简单的一种方法,其执行过程中会输出显示wyf命令执行的信息。


例如:print(os.system("mkdirdmz")) 输出:0


如果看到结果打印出0,表示命令执行成功;否则表示失败(再次执行该命令,输出:子目录或文件dmz已经存在。


一般来说,前面语句都不用管,就把cylinder_VV.pre这个改成你自己的FEKO工程文件即可。


np 后面的4是代表的调用的计算核心数,可以手动改成其他数目。偷懒的话,直接改成all。

3)如果你喜欢用变量呢,那么切记,要接着用语句3而不是语句2。你如果坚持要语句2试试,保证一个死。


接下来,咱们看看效果如何。直接运行语句1的计算截图如下所示。


图13 FEKO计算进程占用CPU资源的显示(直接运行语句1)


左边会弹出dos的黑窗口,运行FEKO的计算信息,而任务管理器则显示FEKO的计算进程吃满了CPU资源。那么运行语句3会怎么样?请看下图,差不多,但是CPU占用的进程变成了windows命令处理程序。

图14 windows命令处理程序进程占用CPU资源的显示


前面2个计算都是在Spyder环境下运行的,如果你喜欢Juypter notebook,那么看到的情形就是下图。占坑的又是Python进程了,这么换来换去,还真是伦敦(轮着蹲CPU的坑)啊。


图15 Python进程下的FEKO子进程占用CPU资源的显示(Jupyter notebook)


多说两句讲解的内容(完全可以不看,哈哈):


如果代码是使用了start调用,那么运行完关闭dos窗口弹出的是runfeko的信息,这时进程与dos命令无关了。相应的,python程序中统计时间的函数也就不会计入FEKO程序的计算时间部分,仅仅只计入了这几行语句的内容。

如果直接在控制的语句中写d,因为d就在r""的语句内,就没有把d对应的字符串表达出来,而是以d字符串形式,所以,调用FEKO计算会失败。如下图所示。

 

图16语句2和3的差异显示对比


类似的,如果我们还想利用Python实现类似其他的应用,例如往期文章中利用matlab调用FEKO实现海面模型自动建模功能显然都不是很容易实现。
海平面快速建模,两种方式,双倍快乐
怎么样,这回又让FEKO拜倒在你Python的石榴裙下了吧!


来源:电磁CAEer
FEKO天线布局二次开发MATLABpython理论控制Altair
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-29
最近编辑:1年前
电磁CAEer
专注于FEKO,HFSS,CST等电磁仿真...
获赞 7粉丝 29文章 19课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈