📄 h_abc_iter.c
字号:
/*----------------------------------------
The Iteration Formulae of H Component
at the absorbing boundary condition
*/
# include "H_ABc_Iter.h"
void H_Up_Iter(MODULE *pModule,double ****Hz)
{
int i,j,N_k_End;
int NHzx,NHzy,NHzz;
double tmp,er,vel;
NHzx=Nx; NHzy=Ny; NHzz=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;
switch(pModule->nSurf[0])
{
case 0: /* It means that Up Plane is electric wall */
for(i=0;i<NHzx;i++)
{
for(j=0;j<NHzy;j++)
{
Hz[1][i][j][N_k_End]=0.0;
}
}
break;
default: /* G.Mur. First Order */
for(i=0; i<NHzx; i++)
{
for(j=0;j<NHzy; j++)
{
Hz[1][i][j][N_k_End]=Hz[0][i][j][N_k_End-1]+
tmp*(Hz[1][i][j][N_k_End-1]-Hz[0][i][j][N_k_End]);
}
}
break;
}
}
void H_Down_Iter(MODULE *pModule, double ****Hz)
{
int i,j;
int NHzx,NHzy,NHzz;
double tmp,er,vel;
NHzx=Nx; NHzy=Ny; NHzz=Nz+1;
er=pModule->pPermit[0];
vel=C/sqrt(er);
tmp=(vel*dt-dhz)/(vel*dt+dhz);
switch(pModule->nSurf[1])
{
case 0: /* It means that Down Plane is electric wall */
for(i=0;i<NHzx;i++)
{
for(j=0;j<NHzy;j++)
{
Hz[1][i][j][0]=0.0;
}
}
break;
default: /* G.Mur. First Order */
for(i=0; i<NHzx; i++)
{
for(j=0;j<NHzy; j++)
{
Hz[1][i][j][0]=Hz[0][i][j][1]+tmp*(Hz[1][i][j][1]-Hz[0][i][j][0]);
}
}
break;
}
}
void H_Front_Iter(MODULE *pModule, double ****Hx)
{
int j,k,l;
int NHxx,NHxy,NHxz;
double tmp,er,vel;
NHxx=Nx+1; NHxy=Ny; NHxz=Nz;
/* Iteration Formulae of Hx 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=0;j<NHxy;j++)
{
Hx[1][NHxx-1][j][k]=Hx[0][NHxx-2][j][k]+
tmp*(Hx[1][NHxx-2][j][k]-Hx[0][NHxx-1][j][k]);
}
}
}
}
void H_Back_Iter(MODULE *pModule, double ****Hx)
{
int j,k,l;
int NHxx,NHxy,NHxz;
double tmp,er,vel;
NHxx=Nx+1; NHxy=Ny; NHxz=Nz;
/* Iteration Formulae of Hx 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=0;j<NHxy;j++)
{
Hx[1][0][j][k]=Hx[0][1][j][k]+
tmp*(Hx[1][1][j][k]-Hx[0][0][j][k]);
}
}
}
}
void HMur_Left_Iter(MODULE *pModule,double ****Hy)
{
int i,k,l;
int NHyx,NHyy,NHyz;
double tmp,vel,er;
NHyx=Nx; NHyy=Ny+1; NHyz=Nz;
/* Iteration Formulae of Hy Points */
er=0.5*(pModule->pPermit[0]+pModule->pPermit[1]);
er=1.95;
vel=C/sqrt(er);
tmp=(vel*dt-dhy)/(vel*dt+dhy);
for(l=0;l<pModule->nLayerNum; l++)
{
for(k=pModule->pLayer[l].z_start; k<pModule->pLayer[l].z_end; k++)
{
for(i=0;i<NHyx;i++)
{
Hy[1][i][0][k]=Hy[0][i][1][k]+
tmp*(Hy[1][i][1][k]-Hy[0][i][0][k]);
}
}
}
}
void HMur_Right_Iter(MODULE *pModule,double ****Hy)
{
int i,k,l;
int NHyx,NHyy,NHyz;
double tmp,vel,er;
NHyx=Nx; NHyy=Ny+1; NHyz=Nz;
/* Iteration Formulae of Hy Points */
er=0.5*(pModule->pPermit[0]+pModule->pPermit[1]);
er=1.95;
vel=C/sqrt(er);
tmp=(vel*dt-dhy)/(vel*dt+dhy);
for(l=0;l<pModule->nLayerNum; l++)
{
for(k=pModule->pLayer[l].z_start+1; k<pModule->pLayer[l].z_end; k++)
{
for(i=0;i<NHyx;i++)
{
Hy[1][i][NHyy-1][k]=Hy[0][i][NHyy-2][k]+
tmp*(Hy[1][i][NHyy-2][k]-Hy[0][i][NHyy-1][k]);
}
}
}
}
/*
2th Order Dispersive Absorbing Boundary Condition
*/
void H_Left_Iter(MODULE *pModule,double ****Hy,double ***pLH_Y)
{
int i,k;
int NHyx,NHyy,NHyz;
double v1,v2,gama1,gama2;
v1=C/sqrt(erff1); v2=C/sqrt(erff2);
gama1=(dhy-v1*dt)/(v1*dt+dhy); gama2=(dhy-v2*dt)/(v2*dt+dhy);
NHyx=Nx; NHyy=Ny+1; NHyz=Nz;
/* Iteration Formulae of Hy Points */
for(i=0; i<NHyx; i++)
{
for(k=0;k<NHyz; k++)
{
Hy[1][i][0][k]=2.0*Hy[0][i][1][k]-pLH_Y[2][i][k]+(gama1+gama2)*
(Hy[0][i][0][k]-Hy[1][i][1][k]-pLH_Y[1][i][k]
+Hy[0][i][2][k])-gama1*gama2*(pLH_Y[0][i][k]-2.0*
Hy[0][i][1][k]+Hy[1][i][2][k]);
}
}
}
void H_Right_Iter(MODULE *pModule,double ****Hy,double ***pRH_Y)
{
int i,k;
int NHyx,NHyy,NHyz;
double v1,v2,gama1,gama2;
v1=C/sqrt(erff1); v2=C/sqrt(erff2);
gama1=(dhy-v1*dt)/(v1*dt+dhy); gama2=(dhy-v2*dt)/(v2*dt+dhy);
NHyx=Nx; NHyy=Ny+1; NHyz=Nz;
/* Iteration Formulae of Hy Points */
for(i=0; i<NHyx; i++)
{
for(k=0; k<NHyz; k++)
{
Hy[1][i][NHyy-1][k]=2.0*Hy[0][i][NHyy-2][k]-pRH_Y[2][i][k]+(gama1+gama2)*
(Hy[0][i][NHyy-1][k]-Hy[1][i][NHyy-2][k]-pRH_Y[1][i][k]
+Hy[0][i][NHyy-3][k])-gama1*gama2*(pRH_Y[0][i][k]-2.0*
Hy[0][i][NHyy-2][k]+Hy[1][i][NHyy-3][k]);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -