1. 定义字段配置文件
该脚本计算源注入平面上的电场和磁场。脚本文件中的默认设置将创建径向偏振波束,但您可以修改脚本中“pol”变量的值以指定方位偏振波束。
# scriptfile:usr_custom_source.lsf
# define position vectors
x=linspace(-5e-6,5e-6,401);
y=linspace(-5e-6,5e-6,401);
z=0; #this is z z-normal source
X=meshgridx(x,y);
Y=meshgridx(x,y);
lambda0=0.5e-6;
f=c/lambda0;
w=2*pi*f;
k=2*pi/lambda0;
#calculate k-space field profiles
NA=0.2;
kx=linspace(-k,k,200);
ky=linspace(-k,k,200);
Kx=meshgridx(kx,ky);
Ky=meshgridy(kx,ky);
phi=atan2(Ky,Kx);
theta=real(acos(sqrt(1-Kx^2/k^2-Ky^2/k^2)));
envelope=exp(-0.5*(Kx^2+Ky^2)/(NA*k)^2);
Exk=cos(phi)*cos(theta)*envelope;
Eyk=sin(phi)*cos(theta)*envelope;
Ezk=sin(theta)*envelope;
Ex=-1i*czt(Exk,kx,ky,x,y);
Ey=-1i*czt(Eyk,kx,ky,x,y);
Ez=-1i*czt(Ezk,kx,ky,x,y);
Hxk=-sqrt(eps0/mu0)*sin(phi)*envelope;
Hyk=sqrt(eps0/mu0)*cos(phi)*envelope;
Hx=-1i*czt(Hxk,kx,ky,x,y);
Hy=-1i*czt(Hyk,kx,ky,x,y);
Hz=0*Ex;
# sacle fild so E^2=1
E2=abs(Ex)^2+abs(Ey)^2+abs(Ez)^2;
scaleFactor=sqrt(max(E2));
Ex=Ex/scaleFactor;
Ey=Ey/scaleFactor;
Ez=Ez/scaleFactor;
Hx=Hx/scaleFactor;
Hy=Hy/scaleFactor;
Hz=Hz/scaleFactor;
# package field data into the EM fields dataset
EM=rectilineardataset("EM fields",x,y,z);
EM.addparameter("lambda",c/f,"f",f);
EM.addattribute("E",Ex,Ey,Ez);
EM.addattribute("H",Hx,Hy,Hz);
# save dataset to .mat file
matlabsave("import_data.mat",EM);
2. 将源添加到模拟中
然后,该脚本将数据打包到数据集(import_data.mat)中,并使用 importdataset 函数将该数据加载到 Import 源中。数据也会保存到 .mat 文件中,稍后可以通过编辑其属性并按“导入源”按钮将该文件加载到导入源中,如下所示。
3. 使用监视器测量轮廓
作为最终测试,我们可以运行仿真,并将源前方监视器记录的场剖面图与原始 EM 数据集进行比较。运行仿真后,脚本将绘制两个字段配置文件。
测量的场剖面与我们最初指定的非常相似。
求解器将尝试注入指定的任何字段,但必须认识到指定非物理字段可能会导致仿真错误。例如,可能存在功率归一化问题、源反向反射或指定注入场与实际注入场之间的差异。