内容介绍
本文分为两部分:
- 首先是 Lumerical 中如何导出数据
- 然后是 Matlab 中如何对数据进行处理
Lumerical 部分
1. 运行 Lumerical 文件计算电场分布
- calculate mode
- 如图 Lumerical 中选中某个模式后会显示电场图,但像素较低且只能导出 jpg
2. 保存 Lumerical 电场数据为 Matlab 的 mat 文件
可以采用脚本,如上图我们选择保存 mode5,脚本如下,直接在 Lumerical 中运行即可。
可以保存某个电场分量,也可以保存全部数据。
modename = 'mode5';
E = getresult(modename,'E'); # 保存全部电场数据
Ex = getresult(modename,'Ex'); # 保存x方向上的电场数据
filename="ElectricField785";
matlabsave(filename,E,Ex);
## 也可以先 copycard 到 d-card 之后保存
modename2 = 'mode_nir';
copydcard(modename,modename2);
Ex = getdata('::'+modename2,'Ex');
Matlab 部分
1. 数据读取并进行初步处理
以全部电场数据处理为例,单方向电场比较简单,可自行测试:
clear;clc;
% 读取数据
filename = 'ElectricField785.mat';
load(filename); data = E; Ex_dsave=Ex;
x = data.x;y = data.y;E = data.E;
% 重新排列
Nx = length(x);Ny = length(y);
Nz = size(E, 1) / (Nx * Ny);
Ex = reshape(E(:, 1), Nx, Ny, Nz); % x 分量
Ey = reshape(E(:, 2), Nx, Ny, Nz); % y 分量
Ez = reshape(E(:, 3), Nx, Ny, Nz); % z 分量
% 总电场
E = (Ex.^2 + Ey.^2 + Ez.^2).^0.5;
% 要绘图的数据,这里我们以 Ex 为例,其实直接导出这个分量更方便
currentE = (real(Ex)); % 处理后就和直接从 Lumerical 保存的 Ex 数据一样了
% 或者总电场
%currentE = (real(E));
2. 绘制电场图
figure;
f = pcolor(x*1e6,y*1e6,rot90(currentE,-1));
set(f,'LineStyle','none');colorbar;colormap jet;axis equal;
axis([-2 2 -1 2])
3. 进一步调整图片字体等并导出矢量图
可以直接根据建模脚本绘制截面图
碰到的问题
1. 数据重排时出错
Ex = real( reshape(E(:, 1), Ny, Nx, Nz) );
Ey = real( reshape(E(:, 2), Ny, Nx, Nz) );
Ez = real( reshape(E(:, 3), Ny, Nx, Nz) );
文章来源:https://www.toymoban.com/news/detail-669686.html
文章来源地址https://www.toymoban.com/news/detail-669686.html
到了这里,关于Lumerical Mode 的电场分布数据导出到 Matlab 进行处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!