FDTD数据导出到Matlab作图

FDTD数据导出到Matlab作图

Sunfove 693 2021-12-11

  FDTD计算得到的电场分布,但是FDTD通过另存为jpg或者截屏所得到的图片分辨率很低,得到的图片往往不能直接使用。因此,可以通过脚本输入到Maltab,然后再利用Matlab处理图片并输出。

1. FDTD原始结果

  这里我们选用三角纳米片的电场分布仿真结果进行举例。图1是FDTD直接输出的结果(截图)。
图1 FDTD结果

2. FDTD结果导出到Matlab

  FDTD数据导入到Matlab主要参考Lumerical官网的介绍文档matlabsave
  可以通过如下脚本实现电场的读取:

E=getresult("z=0","E");
E2=getelectric("z=0");
E1=sqrt(E2);
matlabsave("tri120.mat",E,E1);

其中E得到的是一个struct结果:

  包含以下字段的 struct:

                    E: [48841×3 double]
    Lumerical_dataset: [1×1 struct]
                    f: 4.2827e+14
               lambda: 7.0000e-07
                    x: [221×1 double]
                    y: [221×1 double]
                    z: 0

struct中E是一个包含三个x, y, z三个方向的电场分布,是矢量信息,而通过getelectric并开根号得到的是电场的标量数值。值得一说的是,对结构体struct中内容的调用可以采用E.x等命令进行直接读取。
值得注意的是,FDTD和Matlab采用的矩阵规则不同,输出后的结果需要进行非共轭转置,才能够和FDTD的结果进行对应。
x,y, E 等的信息除了利用getdata或getresult获取以外,也可以通过右键单击,将结果输出到脚本,可以得到相同的效果。
图2 导出x, y 信息

3. Matlab作图

将电场结果,x,y,z数据导出到matlab中之后,作图可以有多种方案,contour,contourf,pcolor等均可以实现,pcolor更为方便。图3 pcolor处理结果contourf和pcolor的语句如下:

% [C,h] = contourf(E,M)    %counterf, M越大,越精细
h = pcolor(x,y,E)        %pcolor

如图3为pcolor输出的结果。作图后,仍需进行如下调整:

set(h,'LineStyle','none');     %线型设置为无
colorbar                       %色标
colormap jet                   %色标模式选用jet
shading interp		% 插值

参考:2D image plots
   matlabsave


# FDTD