FDTD Script 命令学习-pinch

参考FDTD官网pinch命令介绍:https://optics.ansys.com/hc/en-us/articles/360034405674-pinch-Script-command

1、pinch命令功能:

(1)第一个语法out=pinch(x):对多维度矩阵进行降低维度操作,删除原始矩阵变量中变量数为1的维度,并进行赋值;例子:y=pinch(x) 假如原始x为一个四维矩阵(1*1*1*M),前三个维度的变量数都是1,经过pinch命令后,矩阵的维度降为M*1阶矩阵,并对新的矩阵y进行赋值,对应关系如下 y(i)=x(1,1,1,i);

(2)第二个语法pinch(x,i):对多维度矩阵x进行第i个维度的删除操作,并进行赋值;

例子:y=pinch(x,2) 假如原始x为一个四维N*M*K*P阶矩阵,经过pinch(x,2)命令,将x矩阵的第二个维度(变量数为M)进行删除,并对新的矩阵y进行赋值,y矩阵为三维N*K*P阶矩阵,对应关系y(i,j,k)=x(i,1,j,k) (备注:赋值时x矩阵中被删除的第二个维度,均以1替代,即以该维度下的首个变量来进行赋值);

思考:如果N,K,P中某一个或几个为1,那么进过pinch(x,2)进行y矩阵赋值后,新矩阵y是几维矩阵?

(3)第三个语法pinch(x,i,j):该语法算是第二个语法的补充;与语法2相同点均可以对矩阵x进行第i个维度的删除操作,并进行赋值;不同点在于语法2进行赋值时对于被删除的维度上的变量默认采用第一个变量进行赋值,而语法3在赋值时对于被删除的维度上的变量可以低j个变量来进行赋值;

例子:y=pinch(x,2,4) 假如原始x为一个四维N*M*K*P阶矩阵,经过pinch(x,2,4)命令,将x矩阵的第二个维度(变量数为M)进行删除,并对新的矩阵y进行赋值,y矩阵为三维N*K*P阶矩阵,对应关系y(i,j,k)=x(i,4,j,k) (备注:赋值时x矩阵中被删除的第二个维度,均以4替代,即以该维度下的第四个变量来进行赋值);

2. pinch命令官网例子解读:

Suppose the power monitor named "field" is a 2D monitor in the XY plane set to record multiple frequency points between 200THz and 300THz. In this case, the variable Ex will be a 4D matrix, where the dimensions are length(X) by length(Y) by length(Z) by length(F). Since this is a 2D monitor in the XY plane, there will be only one Z position, which means the length of the third dimension (Z) will be 1.”

翻译:假设名称为field的功率监视器是一个在XY平面上的2D监视器,用来200THz到300THz频率间多个频率下的功率值。在该情况下,变量Ex将会是一个四维变量,维度是(x)长度*(y)长度*(z)长度*(f)长度。由于该监视器是在XY平面的2D监视器,所以只有一个Z位置值,即第三个维度Z变量数为1.

“With the pinch and find commands, we can select a particular frequency to be imaged. First, the find command is used to determine the index of the frequency value closest to 250THz. Next, the pinch command is used to select the data in Ex corresponding to that frequency. A second pinch command is used to remove the singleton Z dimension. The end result is the 2D matrix Ex(x,y) at a specific value of z and f.”

翻译:使用pinch和find命令,我可以选择特定频率下的数据来进行成像。第一,find命令用来确定频率接近250THz的频率索引值(即为在f矩阵中变量所处位置)。第二,使用pinch命令来选择250THz频率下的Ex结果。第三,第二个pinch命令用来删除单变量的Z维度。最终结果是在特定的z位置和频率250THz下的2D矩阵Ex(x,y)。

m="field";      # 监视器名称,该监视器为xy平面的2D
x=getdata(m,"x");  # 获取监视器中x的数据
y=getdata(m,"y");
z=getdata(m,"z");
f=getdata(m,"f");
Ex=getdata(m,"Ex");
fi=find(f,250e12);  # 在矩阵f中找到最接近250e12的值,并将其索引(即第几个变量)赋予fi
Ex=real(Ex);     # 取Ex的实部    
?"Size of x: "+num2str(length(x)); # 显示x矩阵的变量数
?"Size of y: "+num2str(length(y));
?"Size of z: "+num2str(length(z));
?"Size of f: "+num2str(length(f));
?"Size of Ex: "+num2str(size(Ex));
to_plot=pinch(Ex,4,fi);   # select frequency. Size will be length(x) by length(y) by length(z) 将Ex矩阵中第四个维度(f)进行删除,赋值时该维度变量取第fi个变量,该命令功能为选取出频率接近250e12时的其他维度变量并赋值给to_plot
to_plot=pinch(to_plot);   # remove singleton z dimension. Size will be length(x) by length(y) 再次采用pinch命令将单变量的维度z消除,新的to_plot矩阵维度为(x)长度*(y)长度
image(x*1e6,y*1e6,to_plot, "x (um)","y (um)","Ex at "+num2str(f(fi)/1e12)+ " THz" ); # 以x和y为轴(单位um),对变量Ex(x,y)做图;图表名称Ex at 250 THz

以上为本人对pinch命令的学习笔记,希望对大家有帮助。

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值