利用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\2021\feko\bin\runfeko",找到你电脑的feko安装路径对应的bin\runfeko。

% FEKO软件的程序控制与序列程序
%% 要求本m文件与FEKO工程文件在同一路径下,然后在matlab中基于该路径运行m文件。
clear all
close all
tic % 测试程序运行时间开始
% clc
cd('D:\feko和matlab运行\测试数据集');%切换到FEKO工程文件所在路径,这个一定要对应的替换哈!!!
A = dir(fullfile('','*.pre'));  %读取文件夹下所有的*.pre文件。A = dir(fullfile('','*.pre'));  A = dir(fullfile('','*.fek'))
feko_path = '"D:\Program Files\Altair\2021\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\2021\feko\bin\runfeko', filename]);
%dos(['runfeko ',filename,' -np all --parallel-authenticate localonly']);
end
t = toc % 测试程序运行时间结尾,用于查看程序运行时间。

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

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

clear all
clc
%导入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']   %新文件名,扩展名为mat
    movefile(['./' 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']   %新文件名,扩展名为mat
    movefile(['./' 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中

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

 

 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+2
end

比较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仿真工程文件自己排队算好等着你(操作说明) - 知乎 (zhihu.com)

非常感谢爱翁大神!!!

  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值