📄 fd2d.c
字号:
/*------------------------------------------
This program is to solve the 2-D problem
Incidence Electric Field
Phase Constant Characteristic Impedance
---------------------------------------------
*/
# include "fd2d.h"
void FDTD_2D(MODULE *pModule, char *pFileName)
{
int time;
int J_1,J_2,N_C,N_V_Start,N_V_End;
int NExx,NExy,NExz,NHxx,NHxy,NHxz;
int NEyx,NEyy,NEyz,NHyx,NHyy,NHyz;
int NEzx,NEzy,NEzz,NHzx,NHzy,NHzz;
double *V_1_R, *V_1_I, *V_2_R, *V_2_I;
double ***pABC_LEX, ***pABC_LEZ, ***pABC_LH;
double ***pABC_REX, ***pABC_REZ, ***pABC_RH;
double ****Ex, ****Ey, ****Ez;
double ****Hx, ****Hy, ****Hz;
NExx=Nx; NExy=Ny+1; NExz=Nz+1;
NEyx=Nx+1; NEyy=Ny; NEyz=Nz+1;
NEzx=Nx+1; NEzy=Ny+1; NEzz=Nz;
NHxx=Nx+1; NHxy=Ny; NHxz=Nz;
NHyx=Nx; NHyy=Ny+1; NHyz=Nz;
NHzx=Nx; NHzy=Ny; NHzz=Nz+1;
Ex=dmalloc_4(2,NExx,NExy,NExz); Ey=dmalloc_4(2,NEyx,NEyy,NEyz);
Ez=dmalloc_4(2,NEzx,NEzy,NEzz); Hx=dmalloc_4(2,NHxx,NHxy,NHxz);
Hy=dmalloc_4(2,NHyx,NHyy,NHyz); Hz=dmalloc_4(2,NHzx,NHzy,NHzz);
/*
pABC_LE[3][i][k] --- pABC_LEX[0][i][k] Y=Ym t=n-2
pABC_LEX[1][i][k] Y=Ym-1 t=n-2
pABC_LEX[2][i][k] Y=Ym-2 t=n-2
*/
/* E.x. Ex[0][Nx][Ny][Nz] -- the Value of Ex in the last time step
Ex[1][Nx][Ny][Nz] -- the Value of Ex in the Current time step */
V_1_R=dmalloc_1(N_NT); V_1_I=dmalloc_1(N_NT);
V_2_R=dmalloc_1(N_NT); V_2_I=dmalloc_1(N_NT);
pABC_LEX=dmalloc_3(3,NExx,NExz); pABC_LEZ=dmalloc_3(3,NEzx,NEzz);
pABC_LH=dmalloc_3(3,NHyx,NHyz); pABC_RH=dmalloc_3(3,NHyx,NHyz);
pABC_REX=dmalloc_3(3,NExx,NExz); pABC_REZ=dmalloc_3(3,NEzx,NEzz);
J_1=pModule->pPort.nLocation; J_2=J_1+N_2D_Reference;
N_C=(pModule->Excite.nFw_start+pModule->Excite.nFw_end)/2;
N_V_Start=pModule->Excite.nFl_start; N_V_End=pModule->Excite.nFl_end;
for(time=0;time<N_NT;time++)
{
Save_B_Ex(pModule,Ex,pABC_LEX,pABC_REX);
Save_B_Ez(pModule,Ez,pABC_LEZ,pABC_REZ);
Save_B_Hy(pModule,Hy,pABC_LH,pABC_RH);
E_Excite_Iter(pModule,time,Ez);
H_Inner_Iter(pModule,Ex,Ey,Ez,Hx,Hy,Hz);
H_2_Surface_Iter(pModule,Ex,Ey,Hz);
H_Up_Iter(pModule,Hz);
H_Down_Iter(pModule,Hz);
H_Left_Iter(pModule,Hy,pABC_LH);
H_Right_Iter(pModule,Hy,pABC_RH);
/* HMur_Left_Iter(pModule,Hy);
HMur_Right_Iter(pModule,Hy);
*/
H_Front_Iter(pModule,Hx);
H_Back_Iter(pModule,Hx);
E_Inner_Iter(pModule,Ex,Ey,Ez,Hx,Hy,Hz,time);
E_2_Surface_Iter(pModule,Ex,Ey,Hx,Hy,Hz);
E_Down_Iter(pModule,Ex,Ey);
E_Up_Iter(pModule,Ex,Ey);
E_Left_Iter(pModule,Ex,Ez,pABC_LEX,pABC_LEZ);
E_Right_Iter(pModule,Ex,Ez,pABC_REX,pABC_REZ);
/* EMur_Left_Iter(pModule,Ex,Ez);
EMur_Right_Iter(pModule,Ex,Ez);
*/
E_Front_Iter(pModule,Ey,Ez);
E_Back_Iter(pModule,Ey,Ez);
DFT_Volt(Ez,time,N_C,J_1,N_V_Start,N_V_End,V_1_R,V_1_I);
DFT_Volt(Ez,time,N_C,J_2,N_V_Start,N_V_End,V_2_R,V_2_I);
Display_Data(pModule,time,Ez);
Exchange_Value(Ex,Ey,Ez,Hx,Hy,Hz);
}
dfree_4(Ex,2,NExx,NExy); dfree_4(Ey,2,NEyx,NEyy);
dfree_4(Ez,2,NEzx,NEzy); dfree_4(Hx,2,NHxx,NHxy);
dfree_4(Hy,2,NHyx,NHyy); dfree_4(Hz,2,NHzx,NHzy);
dfree_3(pABC_LEX,3,NExx); dfree_3(pABC_REX,3,NExx);
dfree_3(pABC_LH,3,NHyx); dfree_3(pABC_RH,3,NHyx);
dfree_3(pABC_LEZ,3,NEzx); dfree_3(pABC_REZ,3,NEzx);
Cal_2D_Para(pModule,pFileName,V_1_R,V_1_I,V_2_R,V_2_I);
dfree_1(V_1_R); dfree_1(V_1_I);
dfree_1(V_2_R); dfree_1(V_2_I);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -