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

📄 init_thread_calc_data.cpp

📁 利用c++语言写的三维FDTD
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			ind = i;
		}
		else
		{
			ind = i - 1;
		}

		if (ind != 12)
		{
			Data_Hz_PML[ind].nx_1 = nPML_x_1;  
			Data_Hz_PML[ind].nx_2 = nx_MIN_1_MIN_nPML_x_2;
			
		}
	}
	
	//x component III zone - (3 6 9 12 15 18 21 24 27)
	for (i = 2; i<27; i=i+3)
	{
		if (i < 13)
		{
			ind = i;
		}
		else
		{
			ind = i - 1;
		}

		Data_Hz_PML[ind].K_B_a = K_Bz_a_2;     Data_Hz_PML[ind].K_B_b = K_Bz_b_2;
		Data_Hz_PML[ind].nx_1 = nx_MIN_1_MIN_nPML_x_2;
		Data_Hz_PML[ind].nx_2 = nx_MIN_1;
		Data_Hz_PML[ind].c_PML_x = nPML_x_2_MIN_1;

	}
	////////////////////////

	//y component I zone - (1 2 3 10 11 12 19 20 21)
	long ii = 0;
	long jel = 0;
	for (i = 0; i<9; i++)
	{
		if (jel == 3)
		{
			jel = 0;
			ii = ii + 6;
		}

		if (ii < 13)
		{
			ind = ii;
		}
		else
		{
			ind = ii - 1;
		}
		
		Data_Hz_PML[ind].K_H_a = K_Hz_a_1;     Data_Hz_PML[ind].K_H_b = K_Hz_b_1;
		Data_Hz_PML[ind].ny_2 = nPML_y_1;
		
		ii++;
		jel++;
	}

	//y component II zone - (4 5 6 13 14 15 22 23 24)
	ii = 3;
	jel = 0;
	for (i = 0; i<9; i++)
	{
		if (jel == 3)
		{
			jel = 0;
			ii = ii + 6;
		}
		
		if (ii < 13)
		{
			ind = ii;
		}
		else
		{
			ind = ii - 1;
		}
		
		if (ii != 13)
		{
			Data_Hz_PML[ind].ny_1 = nPML_y_1;  
			Data_Hz_PML[ind].ny_2 = ny_MIN_1_MIN_nPML_y_2;
		}
		
		ii++;
		jel++;
	}


	//y component III zone - (7 8 9 16 17 18 25 26 27)
	ii = 6;
	jel = 0;
	for (i = 0; i<9; i++)
	{
		if (jel == 3)
		{
			jel = 0;
			ii = ii + 6;
		}
		
		if (ii < 13)
		{
			ind = ii;
		}
		else
		{
			ind = ii - 1;
		}
		
		Data_Hz_PML[ind].K_H_a = K_Hz_a_2;     Data_Hz_PML[ind].K_H_b = K_Hz_b_2;
		Data_Hz_PML[ind].ny_1 = ny_MIN_1_MIN_nPML_y_2; 
		Data_Hz_PML[ind].ny_2 = ny_MIN_1;
		Data_Hz_PML[ind].c_PML_y = nPML_y_2_MIN_1;
		
		ii++;
		jel++;
	}
	////////////////////////

	//z component I zone - (1 2 3 4 5 6 7 8 9)
	for (i = 0; i<9; i++)
	{
		Data_Hz_PML[i].K_H_c = K_Hz_c_1;     Data_Hz_PML[i].K_H_d = K_Hz_d_1;
		Data_Hz_PML[i].nz_2 = nPML_z_1;
	}

	//z component II zone - (10 11 12 13 15 16 17 18)
	for (i = 9; i<17; i++)
	{
		Data_Hz_PML[i].nz_1 = nPML_z_1;    Data_Hz_PML[i].nz_2 = nz_MIN_nPML_z_2;
	}

	//z component III zone - (19 20 21 22 23 24 25 26 27)
	for (i = 17; i<26; i++)
	{
		Data_Hz_PML[i].K_H_c = K_Hz_c_2;     Data_Hz_PML[i].K_H_d = K_Hz_d_2;
		Data_Hz_PML[i].nz_1 = nz_MIN_nPML_z_2;  Data_Hz_PML[i].nz_2 = nz;
		Data_Hz_PML[i].c_PML_z = nPML_z_2_MIN_1;
	}
}

////////////////////////////////////////////////////////////////////
//Init threads parameters outside PML E -- 14 zone
////////////////////////////////////////////////////////////////////
void Init_Thread_Calc_E(Data_E_comp *Data_E, double ***E, double ***H1, double ***H2, 
						long ***Index, double **K_a,  double **K_b, long nx_1, 
						long ny_1, long nz_1, long nx_2, long ny_2, long nz_2, 
						double inv_d1, double inv_d2, long nr_DIV_x, long nr_DIV_y, 
						long nr_DIV_z)
{
	long delta_nx = (nx_2 - nx_1)/nr_DIV_x;
	long delta_ny = (ny_2 - ny_1)/nr_DIV_y;
	long delta_nz = (nz_2 - nz_1)/nr_DIV_z;
	
	long i, ii, j, k;
	long nx_thr_a, nx_thr_b, ny_thr_a, ny_thr_b, nz_thr_a, nz_thr_b;

	ii = 0;
	nx_thr_a = nx_1;
	for (i = 0; i < nr_DIV_x; i++)
	{	
		if (i == nr_DIV_x-1)
		{
			nx_thr_b = nx_2;
		}
		else
		{
			nx_thr_b = nx_thr_a + delta_nx;
		}
		ny_thr_a = ny_1;
		for (j = 0; j < nr_DIV_y; j++)
		{	
			if (j == nr_DIV_y - 1)
			{
				ny_thr_b = ny_2;
			}
			else
			{
				ny_thr_b = ny_thr_a + delta_ny;
			}
			nz_thr_a = nz_1;
			for (k = 0; k < nr_DIV_z; k++)
			{
				if (k == nr_DIV_z - 1)	
				{
					nz_thr_b = nz_2;
				}
				else
				{
					nz_thr_b = nz_thr_a + delta_nz;
				}
				
				Data_E[ii].E  = E;              Data_E[ii].H1 = H1;   
				Data_E[ii].H2 = H2;             Data_E[ii].Ind = Index; 
				Data_E[ii].Ka = K_a[26+ii];     Data_E[ii].Kb = K_b[26+ii];
				Data_E[ii].inv_d1 = inv_d1;     Data_E[ii].inv_d2 = inv_d2;
				Data_E[ii].nx_1 = nx_thr_a;     Data_E[ii].nx_2 = nx_thr_b;    
				Data_E[ii].ny_1 = ny_thr_a;     Data_E[ii].ny_2 = ny_thr_b; 
				Data_E[ii].nz_1 = nz_thr_a;     Data_E[ii].nz_2 = nz_thr_b;
		
				ii++;
				nz_thr_a = nz_thr_b;
			}
			ny_thr_a = ny_thr_b;
		}
		nx_thr_a= nx_thr_b;
	}
}

////////////////////////////////////////////////////////////////////
//Init threads parameters outside PML H -- 14 zone
////////////////////////////////////////////////////////////////////
void Init_Thread_Calc_H(Data_H_comp *Data_H, double ***H, double ***E1, double ***E2,
						long ***Index, double **mu_r, long nx_1, long ny_1, long nz_1, 
						long nx_2, long ny_2, long nz_2, double cons_1, double cons_2, 
						long nr_DIV_x, long nr_DIV_y, long nr_DIV_z)
{

	long delta_nx = (nx_2 - nx_1)/nr_DIV_x;
	long delta_ny = (ny_2 - ny_1)/nr_DIV_y;
	long delta_nz = (nz_2 - nz_1)/nr_DIV_z;
	
	long i, ii, j, k;
	long nx_thr_a, nx_thr_b, ny_thr_a, ny_thr_b, nz_thr_a, nz_thr_b;

	ii = 0;
	nx_thr_a = nx_1;
	for (i = 0; i < nr_DIV_x; i++)
	{	
		if (i == nr_DIV_x-1)
		{
			nx_thr_b = nx_2;
		}
		else
		{
			nx_thr_b = nx_thr_a + delta_nx;
		}
		ny_thr_a = ny_1;
		for (j = 0; j < nr_DIV_y; j++)
		{	
			if (j == nr_DIV_y-1)
			{
				ny_thr_b = ny_2;
			}
			else
			{
				ny_thr_b = ny_thr_a + delta_ny;
			}
			nz_thr_a = nz_1;
			for (k = 0; k < nr_DIV_z; k++)
			{
				if (k == nr_DIV_z-1)	
				{
					nz_thr_b = nz_2;
				}
				else
				{
					nz_thr_b = nz_thr_a + delta_nz;
				}
				
				Data_H[ii].H = H;               Data_H[ii].E1 = E1;   
				Data_H[ii].E2 = E2;             Data_H[ii].Ind = Index; 
				Data_H[ii].mu_r = mu_r[26+ii];   
				Data_H[ii].coef_1 = cons_1;     Data_H[ii].coef_2 = cons_2;
				Data_H[ii].nx_1 = nx_thr_a;     Data_H[ii].nx_2 = nx_thr_b;    
				Data_H[ii].ny_1 = ny_thr_a;     Data_H[ii].ny_2 = ny_thr_b; 
				Data_H[ii].nz_1 = nz_thr_a;     Data_H[ii].nz_2 = nz_thr_b;

				ii++;
				nz_thr_a = nz_thr_b;
			}
			ny_thr_a = ny_thr_b;
		}
		nx_thr_a= nx_thr_b;
	}
}

////////////////////////////////////////////////////////////////////
//Init threads parameters outside PML H -- 14 zone
////////////////////////////////////////////////////////////////////
void Init_Thread_Calc_W(Data_En *Data_W, double ***W, double ***Ex, double ***Ey, 
                        double ***Ez, double ***Hx,  double ***Hy, double ***Hz,
						long ***Ind, double **Mat, long nx_1, long ny_1, long nz_1, 
						long nx_2, long ny_2, long nz_2, long nr_DIV_x, 
						long nr_DIV_y, long nr_DIV_z, double *local_W_aver)
{

	long delta_nx = (nx_2 - nx_1)/nr_DIV_x;
	long delta_ny = (ny_2 - ny_1)/nr_DIV_y;
	long delta_nz = (nz_2 - nz_1)/nr_DIV_z;
	
	long i, ii, j, k;
	long nx_thr_a, nx_thr_b, ny_thr_a, ny_thr_b, nz_thr_a, nz_thr_b;

	double eps_0_DIV_2 = (8.8541878176203898505365630317107e-12)/2.0; // [F/m]
    double mu_0_DIV_2  = (1.2566370614359172953850573533118e-6)/2.0;  // [H/m]

	ii = 0;
	nx_thr_a = nx_1;
	for (i = 0; i < nr_DIV_x; i++)
	{	
		if (i == nr_DIV_x-1)
		{
			nx_thr_b = nx_2;
		}
		else
		{
			nx_thr_b = nx_thr_a + delta_nx;
		}
		ny_thr_a = ny_1;
		for (j = 0; j < nr_DIV_y; j++)
		{	
			if (j == nr_DIV_y-1)
			{
				ny_thr_b = ny_2;
			}
			else
			{
				ny_thr_b = ny_thr_a + delta_ny;
			}
			nz_thr_a = nz_1;
			for (k = 0; k < nr_DIV_z; k++)
			{
				if (k == nr_DIV_z-1)	
				{
					nz_thr_b = nz_2;
				}
				else
				{
					nz_thr_b = nz_thr_a + delta_nz;
				}
				
				Data_W[ii].W = W;    
				Data_W[ii].Ex = Ex;  Data_W[ii].Ey = Ey;  Data_W[ii].Ez = Ez;
				Data_W[ii].Hx = Hx;  Data_W[ii].Hy = Hy;  Data_W[ii].Hz = Hz;
				Data_W[ii].Ind = Ind;           Data_W[ii].Mat = Mat;
				Data_W[ii].nx_W_a = nx_1;
				Data_W[ii].ny_W_a = ny_1;
				Data_W[ii].nz_W_a = nz_1;
				Data_W[ii].eps_0_DIV_2 = eps_0_DIV_2;
				Data_W[ii].mu_0_DIV_2  = mu_0_DIV_2;
				Data_W[ii].nx_1 = nx_thr_a;     Data_W[ii].nx_2 = nx_thr_b;    
				Data_W[ii].ny_1 = ny_thr_a;     Data_W[ii].ny_2 = ny_thr_b; 
				Data_W[ii].nz_1 = nz_thr_a;     Data_W[ii].nz_2 = nz_thr_b;
				Data_W[ii].W_av = &local_W_aver[ii];

				ii++;
				nz_thr_a = nz_thr_b;
			}
			ny_thr_a = ny_thr_b;
		}
		nx_thr_a= nx_thr_b;
	}
}

⌨️ 快捷键说明

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