/*-------------------------------------------------
The Iteration Formulae of E Component
at the absorbing boundary condition
*/
# include "E_ABc_Iter.h"
void E_Down_Iter(MODULE *pModule, double ****Ex, double ****Ey)
{
int i,j;
int NExx,NExy,NExz;
int NEyx,NEyy,NEyz;
double tmp,er,vel;
NExx=Nx; NExy=Ny+1; NExz=Nz+1;
NEyx=Nx+1; NEyy=Ny; NEyz=Nz+1;
er=pModule->pPermit[0];
vel=C/sqrt(er);
tmp=(vel*dt-dhz)/(vel*dt+dhz);
/* Iteration Formulae of Ex Points */
switch(pModule->nSurf[1])
{
case 0: /* It means that Down Plane is electric wall */
for(i=0;i<NExx;i++)
{
for(j=1;j<NExy-1;j++)
{
Ex[1][i][j][0]=0.0;
}
}
break;
default: /* G.Mur. First Order */
for(i=0; i<NExx; i++)
{
for(j=1;j<NExy-1; j++)
{
Ex[1][i][j][0]=Ex[0][i][j][1]+tmp*(Ex[1][i][j][1]-Ex[0][i][j][0]);
}
}
break;
}
/* -------------------------------------------- */
/* Iteration Formulae of Ey Points */
switch(pModule->nSurf[1])
{
case 0: /* It means that Down Plane is electric wall */
for(i=1;i<NEyx-1;i++)
{
for(j=0;j<NEyy;j++)
{
Ey[1][i][j][0]=0.0;
}
}
break;
default: /* G.Mur. First Order */
for(i=1; i<NEyx-1; i++)
{
for(j=0;j<NEyy; j++)
{
Ey[1][i][j][0]=Ey[0][i][j][1]+tmp*(Ey[1][i][j][1]-Ey[0][i][j][0]);
}
}
break;
}
}
void E_Up_Iter(MODULE *pModule, double ****Ex, double ****Ey)
{
int i,j,N_k_End;
int NExx,NExy,NExz;
int NEyx,NEyy,NEyz;
double tmp,er,vel;
NExx=Nx; NExy=Ny+1; NExz=Nz+1;
NEyx=Nx+1; NEyy=Ny; NEyz=Nz+1;
er=pModule->pPermit[pModule->nLayerNum-1];
vel=C/sqrt(er);
tmp=(vel*dt-dhz)/(vel*dt+dhz);
N_k_End=pModule->pLayer[pModule->nLayerNum-1].z_end;
/* Iteration Formulae of Ex Points */
switch(pModule->nSurf[0])
{
case 0: /* It means that Down Plane is electric wall */
for(i=0;i<NExx;i++)
{
for(j=1;j<NExy-1;j++)
{
Ex[1][i][j][N_k_End]=0.0;
}
}
break;
default: /* G.Mur. First Order */
for(i=0; i<NExx; i++)
{
for(j=1;j<NExy-1; j++)
{
Ex[1][i][j][N_k_End]=Ex[0][i][j][N_k_End-1]+
tmp*(Ex[1][i][j][N_k_End-1]-Ex[0][i][j][N_k_End]);
}
}
break;
}
/* -------------------------------------------- */
/* Iteration Formulae of Ey Points */
switch(pModule->nSurf[0])
{
case 0: /* It means that Down Plane is electric wall */
for(i=1;i<NEyx-1;i++)
{
for(j=0;j<NEyy;j++)
{
Ey[1][i][j][N_k_End]=0.0;
}
}
break;
default: /* G.Mur. First Order */
for(i=1; i<NEyx-1; i++)
{
for(j=0;j<NEyy; j++)
{
Ey[1][i][j][N_k_End]=Ey[0][i][j][N_k_End-1]+
tmp*(Ey[1][i][j][N_k_End-1]-Ey[0][i][j][N_k_End]);
}
}
break;
}
}
void E_Front_Iter(MODULE *pModule, double ****Ey, double ****Ez)
{
int l,k,j,tmp_k;
int NEyx,NEyy,NEyz;
int NEzx,NEzy,NEzz;
double tmp,er,et,vel;
NEyx=Nx+1; NEyy=Ny; NEyz=Nz+1;
NEzx=Nx+1; NEzy=Ny+1; NEzz=Nz;
/* Iteration Formulae of Ey Points */
for(l=0;l<pModule->nLayerNum; l++)
{
er=pModule->pPermit[l];
vel=C/sqrt(er);
tmp=(vel*dt-dhx)/(vel*dt+dhx);
for(k=pModule->pLayer[l].z_start+1; k<pModule->pLayer[l].z_end; k++)
{
for(j=0;j<NEyy;j++)
{
Ey[1][NEyx-1][j][k]=Ey[0][NEyx-2][j][k]+
tmp*(Ey[1][NEyx-2][j][k]-Ey[0][NEyx-1][j][k]);
}
}
}
/* -------------------------------------------- */
for(l=0;l<pModule->nLayerNum-1; l++)
{
et=0.5*(pModule->pPermit[l]+pModule->pPermit[l+1]);
vel=C/sqrt(et);
tmp=(vel*dt-dhx)/(vel*dt+dhx);
tmp_k=pModule->pLayer[l+1].z_start;
for(j=0;j<NEyy;j++)
{
Ey[1][NEyx-1][j][tmp_k]=Ey[0][NEyx-2][j][tmp_k]+
tmp*(Ey[1][NEyx-2][j][tmp_k]-Ey[0][NEyx-1][j][tmp_k]);
}
}
/* Iteration Formulae of Ez Points */
for(l=0; l<pModule->nLayerNum; l++)
{
er=pModule->pPermit[l];
vel=C/sqrt(er);
tmp=(vel*dt-dhx)/(vel*dt+dhx);
for(k=pModule->pLayer[l].z_start; k<pModule->pLayer[l].z_end;k++)
{
for(j=1;j<NEzy-1;j++)
{
Ez[1][NEzx-1][j][k]=Ez[0][NEzx-2][j][k]+
tmp*(Ez[1][NEzx-2][j][k]-Ez[0][NEzx-1][j][k]);
}
}
}
}
void E_Back_Iter(MODULE *pModule, double ****Ey, double ****Ez)
{
int j,k,l,tmp_k;
int NEyx,NEyy,NEyz;
int NEzx,NEzy,NEzz;
double tmp,er,et,vel;
NEyx=Nx+1; NEyy=Ny; NEyz=Nz+1;
NEzx=Nx+1; NEzy=Ny+1; NEzz=Nz;
/* Iteration Formulae of Ey Points */
for(l=0;l<pModule->nLayerNum; l++)
{
er=pModule->pPermit[l];
vel=C/sqrt(er);
tmp=(vel*dt-dhx)/(vel*dt+dhx);
for(k=pModule->pLayer[l].z_start+1; k<pModule->pLayer[l].z_end; k++)
{
for(j=0;j<NEyy;j++)
{
Ey[1][0][j][k]=Ey[0][1][j][k]+
tmp*(Ey[1][1][j][k]-Ey[0][0][j][k]);
}
}
}
/* -------------------------------------------- */
for(l=0;l<pModule->nLayerNum-1; l++)
{
et=0.5*(pModule->pPermit[l]+pModule->pPermit[l+1]);
vel=C/sqrt(et);
tmp=(vel*dt-dhx)/(vel*dt+dhx);
tmp_k=pModule->pLayer[l+1].z_start;
for(j=0;j<NEyy;j++)
{
Ey[1][0][j][tmp_k]=Ey[0][1][j][tmp_k]+
tmp*(Ey[1][1][j][tmp_k]-Ey[0][0][j][tmp_k]);
}
}
/* Iteration Formulae of Ez Points */
for(l=0; l<pModule->nLayerNum; l++)
{
er=pModule->pPermit[l];
vel=C/sqrt(er);
tmp=(vel*dt-dhx)/(vel*dt+dhx);
for(k=pModule->pLayer[l].z_start; k<pModule->pLayer[l].z_end;k++)
{
for(j=1;j<NEzy-1;j++)
{
Ez[1][0][j][k]=Ez[0][1][j][k]+
tmp*(Ez[1][1][j][k]-Ez[0][0][j][k]);
}
}
}
}
void EMur_Left_Iter(MODULE *pModule,double ****Ex,double ****Ez)
{
int i,k,l,tmp_k;
int NExx,NExy,NExz;
int NEzx,NEzy,NEzz;
double tmp,vel,er,et;
NExx=Nx; NExy=Ny+1; NExz=Nz+1;
NEzx=Nx+1; NEzy=Ny+1; NEzz=Nz;
er=0.5*(pModule->pPermit[0]+pModule->pPermit[1]);
FDTD _C语言_fdtd_FDTD天线_近场远场_天线_
版权申诉
118 浏览量
2021-10-03
12:34:27
上传
评论
收藏 36KB RAR 举报
鹰忍
- 粉丝: 65
- 资源: 4707
最新资源
- 珍藏多年的基于matlab实现潮流计算程序源代码集合,包含多个潮流计算程序.rar
- 使用FPGA实现串-并型乘法器
- 基于matlab实现针对基于双曲线定位的DV-Hop算法中误差误差出一种基于加权双曲线定位的DV-Hop改进算法.rar
- 基于matlab实现由遗传算法开发的整数规划,车辆调度问题.rar
- 电视家7.0(对电视配置要求高).apk
- 免费计算机毕业设计-基于JavaEE的医院病历管理系统设计与实现(包含论文+源码)
- 手机端 我的世界融合植物大战僵尸版.apk
- 植物大战僵尸 · 戴夫的老年生活 手机版.apk
- Runcraft · 我的世界跑酷游戏 手机端.apk
- pta题库答案c语言.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈