FDTD Script命令学习-farfield3d/farfieldux/farfielduy

一、参考FDTD官网farfield3d命令介绍:

https://optics.ansys.com/hc/en-us/articles/360034930693-farfield3d-Script-command

 1. farfield3d命令功能:在3D模拟中将给定的功率或场轮廓监视器,或直线数据集投影到远场,将会返回电场强度|E|^2。

(1) 语法1:out=farfield(“mname”, f, na, nb, illumation, periodsa, periodsb, index, direction) ;将给定的功率或常轮廓监视器投影到远场。如果1个频率点被投影,将会返回N*M阶矩阵,其中N和M相当于na和nb投影的分辨率,即个数;如果多于1个频率点被投影,将会反馈N*M*P阶矩阵,其中P相当于被投影的频率的点数;

(2)语法2:out=farfield(dataset, f, na, nb, illumation, periodsa, periodsb, index, direction);参考语法1介绍,二者区别在于本语法是将数据集dataset中的数据返回

2.  farfield3d语法中相关参数定义说明:

(1)mname:监视器名称(mintor name),必须输入(required),属于字符串;

(2)dataset:包含电场E和磁场H的直线型数据集,必须输入(required),属于数据集;

(数据集的介绍可参考https://optics.ansys.com/hc/en-us/articles/360034409554-Datasets

(3)f:目标频率点的索引,可以是一个数字或者矢量;在R2016b (这个是matlab的版本??)中引入了多线程投影功能可以允许多个频率点的数据同时进行投影。选择性输入(optional),不输入时默认值为1,属于矢量;

(4) na/nb:投影到远场的点数,选择性输入(optional),不输入时默认值150,属于数字;

(5) illumination:用于周期性结构,对于高斯照明输入1,对于平面波照明输入2;选择性输入,不输入时默认值为1,即采用高斯照明,属于数字;

(6)periodsa/periodsb:周期性照明中采用的周期数;选择性输入(optional),不输入时默认值1,属于数字;

(7)index:进行投影的材料的折射率,选择性输入(optional),不输入时默认值为监视器中心处才材料折射率,属于数字;

(8)direction:可以为±1,选择性输入(optional),不输入时默认值为最大功率流方向,属于数字;

3. 下面的表格总结了不同监视器取向下ux, uy坐标矢量和周期输入特性与坐标轴的对应关系。

监视器取向

监视器表面法线

‘na’,’ux’,’period a’对应于

‘nb’,’uy’,’periods b’对应于

XY平面

Z

x轴

y轴

XZ平面

Y

x轴

z轴

YZ平面

X

y轴

z轴

4. FDTD官网示例:

(1)第一个示例:对名称为“monitor”的2D监视器的远场投影进行成像。在该示例中选择第二个频率点进行投影。如果监视器中只含有与一个频率的数据,第二个参数可以不用输入。

E = farfield3d("monitor",2); #2表示第二个频率点
ux = farfieldux("monitor",2); #farfieldux命令参考下面说明
uy = farfielduy("monitor",2); 
image(ux,uy,E,"","","title","polar"); #ux和uy分别为x和y轴,对E进行作图,对应的图表名称“polar”

思考:farfield("monitor",2)中2可以被识别为f的数值,其它参数均采用默认值;如果对于后面参数不再采用默认值时,前面的参数一定要进行输入,比如na=nb=1000时,输入应为farfield("monitor",2,1000,1000);

(2)第二个示例:对一个直线型数据集的远场投影进行成像。这里的数据集来自一个2D监视器。

dataset=getresult("monitor", "E"); #采用getresult命令来获取名称为monitor的监视器中数据集E的数据
dataset.addattribute("H",getattribute(getresult("monitor","H"),"H"));#采用getresult获取名称为“monitor"的监视器中的数据集H的数据,然后采用getattribute命令获取数据集中的所有属性,最后采用addattribute命令在数据集dataset中添加一个矢量属性H,包含H的所有属性;
E = farfield3d(dataset,2); 
ux = farfieldux(dataset,2); 
uy = farfielduy(dataset,2); 
image(ux,uy,E,"","","title","polar"); 

思考:在getattribute命令中未找到getattribute(getresult("monitor","H"),"H")这种语法说明,即getattribute(dataset,"a")格式。不知此处的"H"代表啥?

参考FDTD官网getattribut命令:https://optics.ansys.com/hc/en-us/articles/360034409534-getattribute-Script-command

二、参考FDTD官网farfieldux/farfielduy命令介绍:

https://optics.ansys.com/hc/en-us/articles/360034410134-farfieldux-Script-command

https://optics.ansys.com/hc/en-us/articles/360034410154-farfielduy-Script-command;

1. Farfieldux命令功能:将farfield3d中进行3D模拟获得的远场数据来赋值给ux矩阵。可以参考farfield3d文档中关于不同监视器取向ux,uy,na,nb的解释信息。

(1)语法1 out=farfieldux(“mname”, f, na, nb, index) :可以参考farfield中的说明,相关参数定义同farfield3d。获得的矩阵为N*M阶矩阵,其中N是空间索引数目,M是频率点数;

(2)语法2 out=farfieldux(dataset,f,na,nb,index): 可以参考farfield中的说明,相关参数定义同farfield3d。获得的矩阵为N*M阶矩阵,其中N是空间索引数目,M是频率点数。

2. Farfielduy命令功能:将farfield3d中进行3D模拟获得的远场数据来赋值给ux矩阵。可以参考farfield3d文档中关于不同监视器取向ux,uy,na,nb的解释信息。

(1)语法1 out=farfielduy(“mname”, f, na, nb, index) :可以参考farfield中的说明,相关参数定义同farfield3d。获得的矩阵为N*M阶矩阵,其中N是空间索引数目,M是频率点数;

(2)语法2 out=farfielduy(dataset,f,na,nb,index): 可以参考farfield中的说明,相关参数定义同farfield3d。获得的矩阵为N*M阶矩阵,其中N是空间索引数目,M是频率点数。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个基于C++的二维Z-FDTD代码示例: ```cpp #include <iostream> #include <cmath> using namespace std; const double c = 299792458.0; // 光速 const double mu0 = 4 * M_PI * 1e-7; // 真空磁导率 const double eps0 = 1 / (c * c * mu0); // 真空电容率 const int nx = 100; // x方向网格数 const int ny = 100; // y方向网格数 const double dx = 1e-3; // x方向网格间距 const double dy = 1e-3; // y方向网格间距 const double dt = dx / (2 * c); // 时间步长 const double T = 1e-8; // 模拟时长 const int nt = T / dt; // 时间步数 double Ez[nx][ny] = {0}; // 电场 double Hy[nx][ny] = {0}; // 磁场 double source(double t) { // 激励源 return exp(-(t - 5e-9) * (t - 5e-9) / (2 * 1e-9 * 1e-9)); } int main() { for (int n = 0; n < nt; ++n) { // 时间步循环 // 更新Ez for (int i = 1; i < nx - 1; ++i) { for (int j = 1; j < ny - 1; ++j) { Ez[i][j] = Ez[i][j] + (dt / eps0) * ((Hy[i][j] - Hy[i - 1][j]) / dx - (Hy[i][j] - Hy[i][j - 1]) / dy); } } // 加入激励源 Ez[nx / 2][ny / 2] = Ez[nx / 2][ny / 2] + source(n * dt); // 更新Hy for (int i = 1; i < nx - 1; ++i) { for (int j = 1; j < ny - 1; ++j) { Hy[i][j] = Hy[i][j] + (dt / mu0) * ((Ez[i][j] - Ez[i][j + 1]) / dy - (Ez[i + 1][j] - Ez[i][j]) / dx); } } } return 0; } ``` 该代码使用了Z-FDTD方法模拟了一个正方形区域内的电磁波传播情况。其中,Ez和Hy分别表示电场和磁场,通过时间步循环和Maxwell方程的离散化,不断更新它们的值,并最终输出结果。代码中的source函数表示激励源,它在模拟过程中为电场添加了一个高斯型脉冲信号。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值