2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 利用matlab程序自动生成feko近场云图及matlab程序实现自动化feko运行

利用matlab程序自动生成feko近场云图及matlab程序实现自动化feko运行

时间:2020-03-21 17:51:14

相关推荐

利用matlab程序自动生成feko近场云图及matlab程序实现自动化feko运行

Feko是一款非常实用的电磁仿真软件,目前许多研究的验证及数据的制作都需要借助Feko来实现。但是对于刚入门的同学来说,feko的数据获取比较麻烦,需要在每一次运行结束后手动调节参数再执行下一个运行程序,利用matlab可以实现自动化处理手动feko运行的难点。好了,废话不多说,加接下来我们看看具体的操作流程吧!:)

1)首先建立好需要运行的feko模型并且在近场求解配置中勾选*.efe和*.hfe文件如下图所示。

注意:一定要勾选*.efe和*.hfe文件,不然后面可视化处理的时候没有数据。

2)将需要自动化运行的所有模型保存在一个文件夹中。

3)利用matlab编写一键运行的程序

此代码中需要更改两个位置。1:cd('D:\feko和matlab运行\测试数据集'),需要将文件路径更改为你存放feko模型的文件夹的路径。2:feko_path = '"D:\Program Files\Altair\\feko\bin\runfeko",找到你电脑的feko安装路径对应的bin\runfeko。

% FEKO软件的程序控制与序列程序%% 要求本m文件与FEKO工程文件在同一路径下,然后在matlab中基于该路径运行m文件。clear allclose alltic % 测试程序运行时间开始% clccd('D:\feko和matlab运行\测试数据集');%切换到FEKO工程文件所在路径,这个一定要对应的替换哈!!!A = dir(fullfile('','*.pre')); %读取文件夹下所有的*.pre文件。A = dir(fullfile('','*.pre')); A = dir(fullfile('','*.fek'))feko_path = '"D:\Program Files\Altair\\feko\bin\runfeko"';%指定FEKO的安装路径,注意引号的使用,先是单引号,再加上双引号。这是处理路径存在空格的情况%% 对文件夹内的*.pre文件进行循环操作for kk=1:length(A)filename=A(kk).name;%%以下的并行计算与否以及并行核数的设置,下面默认的是调用本地全部核数,如果是希望2个核,即改np all为 np 2% d = strcat([feko_path,32,filename]) d = strcat([feko_path,32,filename,' -np all --parallel-authenticate localonly']) % -np 4 d = strcat([feko_path,32,filename,' -np all']) dos(d); kk%% 下面是两个FEKO文件路径设置示例,作为参考%dos(['D:\Program Files\Altair\\feko\bin\runfeko', filename]);%dos(['runfeko ',filename,' -np all --parallel-authenticate localonly']);endt = toc % 测试程序运行时间结尾,用于查看程序运行时间。

此程序生成的近场结果同样也在放置模型的文件夹里。如下图所示:

4)将生成的数据转化为txt文件为后续matlab做云图准备

clear allclc%导入efe数据处理为txt,cd('D:\feko和matlab运行\测试数据集'); % 设置当前目录 movefile('*.efe', 'D:\feko和matlab运行\测试数据');% 把11.txt剪切到文件夹1中movefile('*.hfe', 'D:\feko和matlab运行\测试数据');% 把11.txt剪切到文件夹1中 cd('D:\feko和matlab运行\测试数据');%切换到FEKO工程文件所在路径,这个一定要对应的替换哈!!file = dir('*.hfe');for i=1:length(file)fileName = file(i).name;newName = [fileName(1:end-4) '_h.txt'] %新文件名,扩展名为matmovefile(['./' fileName],['./' newName]); %移入新扩展名的文件中end%相对路劲的设置p1 = mfilename('fullpath'); %例如’D:\matlab_code\....'i_num=findstr(p1,'\'); %找出p1路径下的\字符串所在的排序数,例如对于上面那句,readpath=p1(1:i_num(end));movefile('*.txt', 'D:\feko和matlab运行\测试数据\磁场数据');% 把11.txt剪切到文件夹1中cd('D:\feko和matlab运行\测试数据');%切换到FEKO工程文件所在路径,这个一定要对应的替换哈!!file = dir('*.efe');for i=1:length(file)fileName = file(i).name;newName = [fileName(1:end-4) '_e.txt'] %新文件名,扩展名为matmovefile(['./' fileName],['./' newName]); %移入新扩展名的文件中endp1 = mfilename('fullpath'); %例如’D:\matlab_code\....'i_num=findstr(p1,'\'); %找出p1路径下的\字符串所在的排序数,例如对于上面那句,readpath=p1(1:i_num(end));movefile('*.txt', 'D:\feko和matlab运行\测试数据\电场数据');% 把11.txt剪切到文件夹1中

生成指定的文件夹目录,因为此处我求解了两个区域的电磁场所以每个模型有两个文件。

5)利用matlab绘制电磁场云图

% x=[-30:1:30];% y=[0:1:100];file = dir('*.txt');j=1;for i=1:length(file)fileName = file(i).name;%newName = [fileName(1:end-4) '_h.txt'] %新文件名,扩展名为mat%movefile(['./' fileName],['./' newName]); %移入新扩展名的文件中d=textread(file(j).name,'','headerlines',18);x=d(:,1);y=d(:,2);x_R=d(:,4);x_I=d(:,5);y_R=d(:,6);y_I=d(:,7);z_R=d(:,8);z_I=d(:,9);f=log(sqrt(x_R.^2+x_I.^2+y_R.^2+y_I.^2+z_R.^2+z_I.^2));% X1=linspace(min(x),max(x),1000);% Y1=linspace(min(y),max(y),1000);X1=min(x):0.1:max(x);Y1=min(y):0.1:max(y);[X,Y,Z]=griddata(x,y,f,X1',Y1,'v4');% contourf(X,Y,Z,'LineStyle','none');contourf(X,Y,Z,20);saveas(gcf,[ 'D:\feko和matlab运行\测试数据\test_y\', num2str(i),' .jpg']);i% saveas(h,', num2str(i),' '.jpg');j=j+2end

比较matlab生成云图和feko云图

matlab生成

feko生成

大功告成啦,接下来可以利用程序一键生成大量电磁场云图数据,大家快来试试吧!喜欢此文请点赞收藏,谢谢!

彩蛋:

我们看看feko的.out文件中电磁场是以幅值相位的方式来表示如下图所示:

然而在matlab程序生成的txt文件中我们可以看出电磁场为实部虚部表示如下图:

所以在利用matlab做云图的时候是将实部虚部同时平方再开方处理的:

d=textread(file(j).name,'','headerlines',18);x=d(:,1);y=d(:,2);x_R=d(:,4);x_I=d(:,5);y_R=d(:,6);y_I=d(:,7);z_R=d(:,8);z_I=d(:,9);f=log(sqrt(x_R.^2+x_I.^2+y_R.^2+y_I.^2+z_R.^2+z_I.^2));

当时在写作图程序时犯了不少错误:(

此文参考了某乎大神文章,特此引用利用程序让FEKO仿真工程文件自己排队算好等着你(操作说明) - 知乎 ()

非常感谢爱翁大神!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。