📄 fd3d.c
字号:
/*------------------------------------------
This program is to solve the 3-D problem
Field Value
---------------------------------------------
*/
# include "fd3d.h"
void FDTD_3D(MODULE *pModule,char *pFileName)
{
int time;
int J_1,N_C_1;
int N_V_Start_1,N_V_End_1;
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;
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);
/* 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
*/
/*
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
*/
V_1_R=dmalloc_1(N_NT); V_1_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;
N_C_1=(pModule->pPort.nFw_start+pModule->pPort.nFw_end)/2;
N_V_Start_1=pModule->pPort.nFl_start; N_V_End_1=pModule->pPort.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_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);
H_Front_Iter(pModule,Hx);
H_Back_Iter(pModule,Hx);
E_Inner_Iter(pModule,Ex,Ey,Ez,Hx,Hy,Hz,time);
E_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);
E_Front_Iter(pModule,Ey,Ez);
E_Back_Iter(pModule,Ey,Ez);
DFT_Volt(Ez,time,N_C_1,J_1,N_V_Start_1,N_V_End_1,V_1_R,V_1_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_3D_Para(pModule,pFileName,V_1_R,V_1_I);
dfree_1(V_1_R); dfree_1(V_1_I);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -