TFSF边界:为了引入平面波做源(没有TFSF边界的话会往两边跑 有TFSF边界的话会只往一边跑),该边界处在 E与 H 之间 并不是恰好等于 N 或者 N+1/2 之类的值;(矩阵中的维度怎么对应,源放置)
二维里面加了散射体 会朝着 左右前后 4个方向有值,二维的是在4条边上修正,
三维里面加了散射体会朝着 上下左右前后 6个方向有值,三维的是在6个面上修正,
修正值是 重新模拟一个一维的FDTD的场,在某一点中加入源(??什么源都可以么),在散射场边界的值涉及到总场时 用总场的值减去该修正值(作为散射场),在总场更新时的值涉及到散射场时,需要散射场加上该修正值(作为入射场),修正值是看哪个场分量的迭代与源相关(体会)
2022.04.01补充
二维通过总场散射场边界条件加入平面波的途径是:先由一维FDTD(激励空间)产生时域步进的平面电磁波电磁场,再将此平面电磁波电磁场“复制”到二维 总场-散射场边界,一维二维总场散射场边界时间步长 大小均取相等,复制过程仅仅用到 空间矢量投影和插值计算。
三维通过总场散射场边界条件加入平面波的途径是:先由一维FDTD(激励空间)产生时域步进的平面电磁波电磁场,再将此平面电磁波电磁场“复制”到三维 总场-散射场边界,一维三维总场散射场边界时间步长 大小均取相等,复制过程仅仅用到 空间矢量投影和插值计算。
关于 平面波源的传播 :三个分量为2维的情况????? 比如TM波–Ez Hx H y实际上Hy的场分量值非常小可以忽略 由Ez×Hx 叉乘定传播方向即为y方向,Ez(x,y)相当于只和 x y方向的值有关系 所以是一个二维的,它和Ez(x,y,z)不一样 ,(一个是三维,一个二维 好好体会 还没透)
如果为点源直接加上一个修正值即可两个分量为2维的 Ez Hx
散射场内的EZ 更新会用到 总场里的HX = 入射hx+散射hx
但是只只知道总场HX 所以需要 总场HX减去入射hx(修正值) 然后用于更新 散射场EZ
%一个用稳定常数描述系数 在【Q+1/2】处无电场 用【Q+1】与【Q】处电场平均值得到
%在【Q】处无磁场,用【Q+1/2】与【Q-1/2】处磁场平均值得到–
只在[firstX-1,firstY:1:lastY] [4,5-75]这一根线上修正
正常场的更新 边界上更新的场值 全局的 然后进行正常的迭代
for mm=2:1:SizeX-1
for nn=2:1:SizeY-1
Ez(mm, nn) = Ceze(mm, nn) * Ez(mm, nn) +...
Cezh(mm, nn) * ((Hy(mm, nn) - Hy(mm - 1, nn)) -...
(Hx(mm, nn) - Hx(mm, nn - 1)));
end
end
设置参数
置一维的电场和磁场更新系数 即修正项—分为两个区 一个是正常迭代 一个是在损耗层迭代 两者迭代参数不一样 所以可以只写一个更新方程 在不同范围内限定迭代参数
程序书写流程
- 初始化场值为0
- 为二维场值设置更新参数(先全部更新 再在四条边界上加修正值更新)
- Chxh–1 Chxe–含有时间参数[75,74]—Hx的更新
Chyh–1 Chye–含有时间参数 [74,75]—Hy的更新 - 加散射体(pec金属腔)
- 在网格区域(总场 散射场 TFSF边界)进行正常迭代
- 先进行全部区域的 HxHy迭代
- 修正Hy的左右TFSF边界 两条线
修正Hx的上下TFSF边界 两条线 - 仿真修正值 模拟 一维 理想(什么都不加)的E H演化,
- 加激励源–修正值上
- 修正Ez的左右TFSF边界 两条线
- 全区域内 正常更新Ez
- ABC mur边界条件
- 一维电场传播的波动方程(为计算区域边界节点提供递推方程) 分解为两个算子
- 程序中产生TFSF的一维场设置,注意这些放在整体更新以后
Ez1D=zeros(1,SizeX+NLOSS);%initial field value
Hy1D=zeros(1,SizeX+NLOSS);
% 沿左边缘修正 Hy
%由于左边缘的 hy 更新使用总场中的值,因此减入射场。
% 仅在 [firstX-1,firstY:1:lastY] [4,5-75] 行上正确(TFST 的左边距)
mm=firstX-1;
for nn=firstY:1:lastY
Hy(mm,nn)=Hy(mm,nn)-Chye(mm,nn)*Ez1D(mm+1);
end
% 更新一维磁场
%不同区域的参数在这里更新。 参数设置
for mm=1:SizeX+NLOSS-1
Hy1D(mm)=Chyh1D(mm)*Hy1D(mm)+Chye1D(mm)*(Ez1D(mm+1)-Ez1D(mm));
end
% 更新一维电场
for mm=2:SizeX+NLOSS-1
Ez1D(mm)=Ceze1D(mm)*Ez1D(mm)+Cezh1D(mm)*(Hy1D(mm)-Hy1D(mm-1));
end
%%
%高斯源
arg = pi * ((Cdtds1D * Time - 0) / ppw - 1.0);
arg = arg * arg;
Ez1D(1)=(1.0 - 2.0 * arg) * exp(-arg);
%沿左边缘的正确 Ez 场
%[firstX,firstY:1:lastY] [5,5-75]
mm=firstX;
for nn=firstY:1:lastY
Ez(mm,nn)=Ez(mm,nn)-Cezh(mm,nn)*Hy1D(mm-1);
end
**需要注意的点**
1. 假设Ez不是合适的传播方程的解 传播速度不严格为 作用在场的传播算子产生一个近于0 的数字,再次作用他时 误差应该更小--近于真实值
2. 吸收边界条件依赖于 内部相邻电场“将来”的值 ,所以将来场值必须在 网格边界点更新之前更新
3. 一旦场更新 过去的值就会被覆盖 所以要储存网格两端相邻节点的 “过去”值 在下一次调用时就会成为过去
4. 此方程需要 q+1 时间步上 两个内部节点的值(做更新时可以用 不需要储存) 以及 边界节点和这两个内部节点在 q q-1上的值 即3个空间位置与2个时间步上的
5. 计算域每端一个
6. 左边是硬线源,右边放损耗层,相当于模拟半无限大空间,而且左边的空间也是有限的 也传不过去