⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fdtd_3d.h

📁 利用c++语言写的三维FDTD
💻 H
字号:
//set the PML parameters
void Init_PML_Par_x(double *K_Ey_a, double *K_Ey_b, double *K_Gz_a, double *K_Gz_b, 
					double *K_Hx_c, double *K_Hx_d, double *K_Ex_c, double *K_Ex_d, 
					double *K_Hy_a, double *K_Hy_b, double *K_Bz_a, double *K_Bz_b,
					double eps_r_x, double mu_r_x, long  nPML_x, double dx, double dt);

void Init_PML_Par_y(double *K_Gx_a, double *K_Gx_b, double *K_Ez_a, double *K_Ez_b, 
					double *K_Hy_c, double *K_Hy_d, double *K_Ey_c, double *K_Ey_d,
					double *K_Bx_a, double *K_Bx_b, double *K_Hz_a, double *K_Hz_b,
					double eps_r_y, double mu_r_y, long  nPML_y, double dy, double dt);

void Init_PML_Par_z(double *K_Ex_a, double *K_Ex_b, double *K_Gy_a, double *K_Gy_b, 
					double *K_Hz_c, double *K_Hz_d, double *K_Ez_c, double *K_Ez_d,
                    double *K_Hx_a, double *K_Hx_b, double *K_By_a, double *K_By_b,
					double eps_r_z, double mu_r_z, long  nPML_z, double dz, double dt);

//point  source
void ptSource_J(double ***&xx, double **&Par_ptS, long  **Coord_ptSource, double time,
				double dt, long  n_ptSource, int source_type, double const_alfa);

//total field scattered field formulation
void TS_Ey_ydir(double ***Ey, long  ***Ind, double *K_b, double *Hx_1D, long   n_TS_xa, 
				long  n_TS_xb, long  n_TS_ya, long  n_TS_ybMIN1, long  n_TS_za, long  n_TS_zbPL1, 
				long  n_TS_yaMIN1, double inv_dz);

void TS_Ez_ydir(double ***Ez, long  ***Ind, double *K_b, double *Hx_1D, long   n_TS_xa, 
				long  n_TS_xb, long  n_TS_ya, long  n_TS_yb, long  n_TS_za, long  n_TS_zb, 
				long  n_TS_ybMINn_TS_yaPL1, double inv_dy);

void TS_Hx_ydir(double ***Hx, long  ***Ind, double **Mat, double *Ez_1D, long   n_TS_xa, 
				long  n_TS_xb, long  n_TS_yaMIN1, long  n_TS_yb, long  n_TS_za, long  n_TS_zb, 
				long  n_TS_ybMINn_TS_yaPL1, double coef_TS_Hx);

void TS_Hy_ydir(double ***Hy, long  ***Ind, double **Mat, double *Ez_1D, long  n_TS_xaMIN1, 
				long  n_TS_xb, long  n_TS_ya, long  n_TS_yb, long  n_TS_za, long  n_TS_zb, 
				long  n_TS_yaMIN1, double coef_TS_Hy);

int Init_TS_Param(double **ll_1D_E, double **ll_1D_H, 
				  double ***Hz_i0, double ***Hy_i0, double ***Hz_i1, double ***Hy_i1,
				  double ***Hz_j0, double ***Hx_j0, double ***Hz_j1, double ***Hx_j1, 
				  double ***Hy_k0, double ***Hx_k0, double ***Hy_k1, double ***Hx_k1, 
				  double ***face_Hz_i0, double ***face_Hy_i0, double ***face_Hz_i1, 
				  double ***face_Hy_i1, double ***face_Hz_j0, double ***face_Hx_j0, 
				  double ***face_Hz_j1, double ***face_Hx_j1, double ***face_Hy_k0, 
				  double ***face_Hx_k0, double ***face_Hy_k1, double ***face_Hx_k1,
				  double ***Ey_i0, double ***Ez_i0, double ***Ey_i1, double ***Ez_i1,
				  double ***Ex_j0, double ***Ez_j0, double ***Ex_j1, double ***Ez_j1,
				  double ***Ex_k0, double ***Ey_k0, double ***Ex_k1, double ***Ey_k1,
				  double ***face_Ey_i0, double ***face_Ez_i0, double ***face_Ey_i1, double ***face_Ez_i1,
				  double ***face_Ex_j0, double ***face_Ez_j0, double ***face_Ex_j1, double ***face_Ez_j1,
				  double ***face_Ex_k0, double ***face_Ey_k0, double ***face_Ex_k1, double ***face_Ey_k1,
				  long l_1D, long l_x, long l_y, long l_z, long n_PML, double teta, double phi, 
				  double gamma, double dx, double dy, double dz, double d, double dt,
				  double &ct_Ex_1, double &ct_Ex_2, double &ct_Ey_1, double &ct_Ey_2, 
				  double &ct_Ez_1, double &ct_Ez_2, double &ct_Hx_1, double &ct_Hx_2, 
				  double &ct_Hy_1, double &ct_Hy_2, double &ct_Hz_1, double &ct_Hz_2);

int phase_velocity(double dx, double dy, double dz, double dt, 
				   double eps_r, double mu_r, double om, 
				   double teta, double phi, double *phase_vel);

void TS_Ex(double ***Ex, long  ***Ind, double *K_b, double **Hz_j0, double **Hz_j1,
		   double **Hy_k0, double **Hy_k1, double ct_Ex_1, double ct_Ex_2, 
		   long n_TS_xa, long n_TS_xb, long n_TS_ya, long n_TS_yb, long n_TS_za, 
		   long n_TS_zb);

void TS_Ey(double ***Ey, long  ***Ind, double *K_b, double **Hz_i0, double **Hz_i1,
		   double **Hx_k0, double **Hx_k1, double ct_Ey_1, double ct_Ey_2, 
		   long n_TS_xa, long n_TS_xb, long n_TS_ya, long n_TS_yb, long n_TS_za, 
		   long n_TS_zb);

void TS_Ez(double ***Ez, long  ***Ind, double *K_b, double **Hy_i0, double **Hy_i1,
		   double **Hx_j0, double **Hx_j1, double ct_Ez_1, double ct_Ez_2, 
		   long n_TS_xa, long n_TS_xb, long n_TS_ya, long n_TS_yb, long n_TS_za, 
		   long n_TS_zb);

void TS_Hx(double ***Hx, long  ***Ind, double **Mat, double **Ez_j0, double **Ez_j1,
		   double **Ey_k0, double **Ey_k1, double ct_Hx_1, double ct_Hx_2, 
		   long n_TS_xa, long n_TS_xb, long n_TS_ya, long n_TS_yb, long n_TS_za, 
		   long n_TS_zb, long n_TS_ya_MIN_1, long n_TS_za_MIN_1);

void TS_Hy(double ***Hy, long  ***Ind, double **Mat, double **Ez_i0, double **Ez_i1,
		   double **Ex_k0, double **Ex_k1, double ct_Hy_1, double ct_Hy_2, 
		   long n_TS_xa, long n_TS_xb, long n_TS_ya, long n_TS_yb, long n_TS_za, 
		   long n_TS_zb, long n_TS_xa_MIN_1, long n_TS_za_MIN_1);

void TS_Hz(double ***Hz, long  ***Ind, double **Mat, double **Ey_i0, double **Ey_i1,
		   double **Ex_j0, double **Ex_j1, double ct_Hz_1, double ct_Hz_2, 
		   long n_TS_xa, long n_TS_xb, long n_TS_ya, long n_TS_yb, long n_TS_za, 
		   long n_TS_zb, long n_TS_xa_MIN_1, long n_TS_ya_MIN_1);

//the followed field components
void Set_Data_Followed(double ***Ex, double ***Ey, double ***Ez,
					   double ***Hx, double ***Hy, double ***Hz,
					   double **Ex_foll, double **Ey_foll, double **Ez_foll,
					   double **Hx_foll, double **Hy_foll, double **Hz_foll,
					   long  **Ind_Foll, long  length_Ind_Foll, long  n_t);

//the electromagnetic energy
void calc_W(double ***W, double ***Ex, double ***Ey, double ***Ez, double ***Hx, 
			double ***Hy, double ***Hz, long ***Ind, double **Mat, long nx_W_a, 
			long ny_W_a, long nz_W_a, long nx_a, long nx_b, long ny_a, long ny_b,
			long nz_a, long nz_b, double eps_0_DIV_2, double mu_0_DIV_2, double *W_av);

void aver_W_xz_t(double ***W, long nx_W, long ny_W, long nz_W, double *W_aver_xz, 
				 double *W_aver_xzt, double Surf_xz);

int aver_xyz(double ***X, long nx_a_av, long nx_b_av, long ny_a_av, long ny_b_av,
			 long nz_a_av, long nz_b_av, double *X_av, double Vol);

//average over the Wigner cell to compute the specular reflection component
int aver_xyz_WignerC(double ***X, long **Mask_Wigner, long n_Mask_Wigner, double *X_av);

//average over the Wigner cell to compute the Bragg diffraction component
int aver_Bragg_WignerC(double ***X, long **Mask_Wigner, long n_Mask_Wigner,
					   double kx, double ky, double kz, double Gx, double Gy, 
					   double Gz, double *X_avBr_re, double *X_avBr_im, 
					   double dx, double dy, double dz);

int aver_absEorH(double ***Ux, double ***Uy, double ***Uz, long nx_a_av, long nx_b_av, long ny_a_av, long ny_b_av,
			     long nz_a_av, long nz_b_av, double *U_av, double Vol);

int fourier_transf_vol(double ***U, long nx_a_f, long nx_b_f, long ny_a_f, long ny_b_f, 
				       long nz_a_f, long nz_b_f, double **FrT_re, double **FrT_im, 
				       double *FrT_om, long n_FrT_om, double time);

int interp_1D(double *x, int length_x, double *f, double *x_i, int length_x_i, double *g);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -