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

📄 alloc_save_load_field_thread.cpp

📁 利用c++语言写的三维FDTD
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	Allocate_BH_y->size[11][0] = nPML_x_1; 
	Allocate_BH_y->size[11][1] = nPML_y_2; 
	Allocate_BH_y->size[11][2] = nz_MIN_1_MIN_nPML_z_1_MIN_nPML_z_2;

	//By_17
	Allocate_BH_y->size[12][0] = nx_MIN_1_MIN_nPML_x_1_MIN_nPML_x_2; 
	Allocate_BH_y->size[12][1] = nPML_y_2; 
	Allocate_BH_y->size[12][2] = nz_MIN_1_MIN_nPML_z_1_MIN_nPML_z_2;

	//By_18 
	Allocate_BH_y->size[13][0] = nPML_x_2;
	Allocate_BH_y->size[13][1] = nPML_y_2; 
	Allocate_BH_y->size[13][2] = nz_MIN_1_MIN_nPML_z_1_MIN_nPML_z_2;

	//By_19 
	Allocate_BH_y->size[14][0] = nPML_x_1; 
	Allocate_BH_y->size[14][1] = nPML_y_1; 
	Allocate_BH_y->size[14][2] = nPML_z_2;

	//By_20
	Allocate_BH_y->size[15][0] = nx_MIN_1_MIN_nPML_x_1_MIN_nPML_x_2; 
	Allocate_BH_y->size[15][1] = nPML_y_1; 
	Allocate_BH_y->size[15][2] = nPML_z_2;

	//By_21 
	Allocate_BH_y->size[16][0] = nPML_x_2; 
	Allocate_BH_y->size[16][1] = nPML_y_1; 
	Allocate_BH_y->size[16][2] = nPML_z_2;

	//By_22 
	Allocate_BH_y->size[17][0] = nPML_x_1; 
	Allocate_BH_y->size[17][1] = ny_MIN_nPML_y_1_MIN_nPML_y_2;
	Allocate_BH_y->size[17][2] = nPML_z_2;

	//By_24 
	Allocate_BH_y->size[18][0] = nPML_x_2;
	Allocate_BH_y->size[18][1] = ny_MIN_nPML_y_1_MIN_nPML_y_2;
	Allocate_BH_y->size[18][2] = nPML_z_2;

	//By_25 
	Allocate_BH_y->size[19][0] = nPML_x_1; 
	Allocate_BH_y->size[19][1] = nPML_y_2; 
	Allocate_BH_y->size[19][2] = nPML_z_2;

	//By_26
	Allocate_BH_y->size[20][0] = nx_MIN_1_MIN_nPML_x_1_MIN_nPML_x_2; 
	Allocate_BH_y->size[20][1] = nPML_y_2;
	Allocate_BH_y->size[20][2] = nPML_z_2;

	//By_27
	Allocate_BH_y->size[21][0] = nPML_x_2;
	Allocate_BH_y->size[21][1] = nPML_y_2; 
	Allocate_BH_y->size[21][2] = nPML_z_2;

	//Hy 
	Allocate_BH_y->size[22][0] = nx - 1; 
	Allocate_BH_y->size[22][1] = ny; 
	Allocate_BH_y->size[22][2] = nz - 1;
}

////////////////////////////////////////////////////////////////////
//Collect the information - Hz field
////////////////////////////////////////////////////////////////////
void Init_Alloc_BzHz(Allocate_H_comp *Allocate_BH_z, double ***&Bz_1,  double ***&Bz_2,  
				double ***&Bz_3,  double ***&Bz_4,  double ***&Bz_5,  double ***&Bz_6, 
				double ***&Bz_7,  double ***&Bz_8,  double ***&Bz_9,  double ***&Bz_10, 
				double ***&Bz_12, double ***&Bz_16, double ***&Bz_18, double ***&Bz_19,
				double ***&Bz_20, double ***&Bz_21, double ***&Bz_22, double ***&Bz_23, 
				double ***&Bz_24, double ***&Bz_25, double ***&Bz_26, double ***&Bz_27, 
				double ***&Hz, long nPML_x_1, long nPML_y_1, long nPML_z_1, long nPML_x_2,
				long nPML_y_2, long nPML_z_2, long nx, long ny, long nz)
{
	long nx_MIN_1_MIN_nPML_x_1_MIN_nPML_x_2 = nx - 1 - nPML_x_1 - nPML_x_2;
	long ny_MIN_1_MIN_nPML_y_1_MIN_nPML_y_2 = ny - 1 - nPML_y_1 - nPML_y_2;
	long nz_MIN_nPML_z_1_MIN_nPML_z_2 = nz - nPML_z_1 - nPML_z_2;

	Allocate_BH_z->A[0]  = &Bz_1;  Allocate_BH_z->A[1]  = &Bz_2;  Allocate_BH_z->A[2]  = &Bz_3;  
	Allocate_BH_z->A[3]  = &Bz_4;  Allocate_BH_z->A[4]  = &Bz_5;  Allocate_BH_z->A[5]  = &Bz_6; 
	Allocate_BH_z->A[6]  = &Bz_7;  Allocate_BH_z->A[7]  = &Bz_8;  Allocate_BH_z->A[8]  = &Bz_9;  
	Allocate_BH_z->A[9]  = &Bz_10; Allocate_BH_z->A[10] = &Bz_12; Allocate_BH_z->A[11] = &Bz_16; 
	Allocate_BH_z->A[12] = &Bz_18; Allocate_BH_z->A[13] = &Bz_19; Allocate_BH_z->A[14] = &Bz_20; 
	Allocate_BH_z->A[15] = &Bz_21; Allocate_BH_z->A[16] = &Bz_22; Allocate_BH_z->A[17] = &Bz_23; 
	Allocate_BH_z->A[18] = &Bz_24; Allocate_BH_z->A[19] = &Bz_25; Allocate_BH_z->A[20] = &Bz_26;
	Allocate_BH_z->A[21] = &Bz_27; Allocate_BH_z->A[22] = &Hz; 
	
	Allocate_BH_z->er = 0;

	strcpy(&Allocate_BH_z->name[0][0],"Bz_1");   strcpy(&Allocate_BH_z->name[1][0],"Bz_2");  
	strcpy(&Allocate_BH_z->name[2][0],"Bz_3");   strcpy(&Allocate_BH_z->name[3][0],"Bz_4"); 
	strcpy(&Allocate_BH_z->name[4][0],"Bz_5");   strcpy(&Allocate_BH_z->name[5][0],"Bz_6"); 
	strcpy(&Allocate_BH_z->name[6][0],"Bz_7");   strcpy(&Allocate_BH_z->name[7][0],"Bz_8"); 
	strcpy(&Allocate_BH_z->name[8][0],"Bz_9");   strcpy(&Allocate_BH_z->name[9][0],"Bz_10"); 
	strcpy(&Allocate_BH_z->name[10][0],"Bz_12"); strcpy(&Allocate_BH_z->name[11][0],"Bz_16"); 
	strcpy(&Allocate_BH_z->name[12][0],"Bz_18"); strcpy(&Allocate_BH_z->name[13][0],"Bz_19"); 
	strcpy(&Allocate_BH_z->name[14][0],"Bz_20"); strcpy(&Allocate_BH_z->name[15][0],"Bz_21"); 
	strcpy(&Allocate_BH_z->name[16][0],"Bz_22"); strcpy(&Allocate_BH_z->name[17][0],"Bz_23"); 
	strcpy(&Allocate_BH_z->name[18][0],"Bz_24"); strcpy(&Allocate_BH_z->name[19][0],"Bz_25"); 
	strcpy(&Allocate_BH_z->name[20][0],"Bz_26"); strcpy(&Allocate_BH_z->name[21][0],"Bz_27"); 
	strcpy(&Allocate_BH_z->name[22][0],"Hz"); 

	//Bz_1 
	Allocate_BH_z->size[0][0] = nPML_x_1; 
	Allocate_BH_z->size[0][1] = nPML_y_1;
	Allocate_BH_z->size[0][2] = nPML_z_1;
	
	//Bz_2 
	Allocate_BH_z->size[1][0] = nx_MIN_1_MIN_nPML_x_1_MIN_nPML_x_2; 
	Allocate_BH_z->size[1][1] = nPML_y_1; 
	Allocate_BH_z->size[1][2] = nPML_z_1;
	
	//Bz_3 
	Allocate_BH_z->size[2][0] = nPML_x_2; 
	Allocate_BH_z->size[2][1] = nPML_y_1; 
	Allocate_BH_z->size[2][2] = nPML_z_1;
	
	//Bz_4 
	Allocate_BH_z->size[3][0] = nPML_x_1;
	Allocate_BH_z->size[3][1] = ny_MIN_1_MIN_nPML_y_1_MIN_nPML_y_2; 
	Allocate_BH_z->size[3][2] = nPML_z_1;
	
	//Bz_5 
	Allocate_BH_z->size[4][0] = nx_MIN_1_MIN_nPML_x_1_MIN_nPML_x_2;
	Allocate_BH_z->size[4][1] = ny_MIN_1_MIN_nPML_y_1_MIN_nPML_y_2; 
	Allocate_BH_z->size[4][2] = nPML_z_1;
	
	//Bz_6
	Allocate_BH_z->size[5][0] = nPML_x_2; 
	Allocate_BH_z->size[5][1] = ny_MIN_1_MIN_nPML_y_1_MIN_nPML_y_2; 
	Allocate_BH_z->size[5][2] = nPML_z_1;
	
	//Bz_7 
	Allocate_BH_z->size[6][0] = nPML_x_1; 
	Allocate_BH_z->size[6][1] = nPML_y_2; 
	Allocate_BH_z->size[6][2] = nPML_z_1;
	
	//Bz_8
	Allocate_BH_z->size[7][0] = nx_MIN_1_MIN_nPML_x_1_MIN_nPML_x_2; 
	Allocate_BH_z->size[7][1] = nPML_y_2; 
	Allocate_BH_z->size[7][2] = nPML_z_1;
	
	//Bz_9 
	Allocate_BH_z->size[8][0] = nPML_x_2; 
	Allocate_BH_z->size[8][1] = nPML_y_2;
	Allocate_BH_z->size[8][2] = nPML_z_1;
	
	//Bz_10 
	Allocate_BH_z->size[9][0] = nPML_x_1;
	Allocate_BH_z->size[9][1] = nPML_y_1; 
	Allocate_BH_z->size[9][2] = nz_MIN_nPML_z_1_MIN_nPML_z_2;
	
	//Bz_12
	Allocate_BH_z->size[10][0] = nPML_x_2;
	Allocate_BH_z->size[10][1] = nPML_y_1;
	Allocate_BH_z->size[10][2] = nz_MIN_nPML_z_1_MIN_nPML_z_2;
	
	//Bz_16 
	Allocate_BH_z->size[11][0] = nPML_x_1; 
	Allocate_BH_z->size[11][1] = nPML_y_2;
	Allocate_BH_z->size[11][2] = nz_MIN_nPML_z_1_MIN_nPML_z_2;
	
	//Bz_18
	Allocate_BH_z->size[12][0] = nPML_x_2; 
	Allocate_BH_z->size[12][1] = nPML_y_2; 
	Allocate_BH_z->size[12][2] = nz_MIN_nPML_z_1_MIN_nPML_z_2;
	
	//Bz_19 
	Allocate_BH_z->size[13][0] = nPML_x_1; 
	Allocate_BH_z->size[13][1] = nPML_y_1; 
	Allocate_BH_z->size[13][2] = nPML_z_2;
	
	//Bz_20
	Allocate_BH_z->size[14][0] = nx_MIN_1_MIN_nPML_x_1_MIN_nPML_x_2;
	Allocate_BH_z->size[14][1] = nPML_y_1; 
	Allocate_BH_z->size[14][2] = nPML_z_2;
	
	//Bz_21
	Allocate_BH_z->size[15][0] = nPML_x_2; 
	Allocate_BH_z->size[15][1] = nPML_y_1; 
	Allocate_BH_z->size[15][2] = nPML_z_2;
	
	//Bz_22
	Allocate_BH_z->size[16][0] = nPML_x_1;
	Allocate_BH_z->size[16][1] = ny_MIN_1_MIN_nPML_y_1_MIN_nPML_y_2; 
	Allocate_BH_z->size[16][2] = nPML_z_2;
	
	//Bz_23
	Allocate_BH_z->size[17][0] = nx_MIN_1_MIN_nPML_x_1_MIN_nPML_x_2; 
	Allocate_BH_z->size[17][1] = ny_MIN_1_MIN_nPML_y_1_MIN_nPML_y_2; 
	Allocate_BH_z->size[17][2] = nPML_z_2;
	
	//Bz_24 
	Allocate_BH_z->size[18][0] = nPML_x_2;
	Allocate_BH_z->size[18][1] = ny_MIN_1_MIN_nPML_y_1_MIN_nPML_y_2; 
	Allocate_BH_z->size[18][2] = nPML_z_2;
	
	//Bz_25 
	Allocate_BH_z->size[19][0] = nPML_x_1; 
	Allocate_BH_z->size[19][1] = nPML_y_2; 
	Allocate_BH_z->size[19][2] = nPML_z_2;
	
	//Bz_26 
	Allocate_BH_z->size[20][0] = nx_MIN_1_MIN_nPML_x_1_MIN_nPML_x_2;
	Allocate_BH_z->size[20][1] = nPML_y_2; 
	Allocate_BH_z->size[20][2] = nPML_z_2;
	
	//Bz_27 
	Allocate_BH_z->size[21][0] = nPML_x_2; 
	Allocate_BH_z->size[21][1] = nPML_y_2;
	Allocate_BH_z->size[21][2] = nPML_z_2;
	
	//Hz 
	Allocate_BH_z->size[22][0] = nx - 1; 
	Allocate_BH_z->size[22][1] = ny - 1; 
	Allocate_BH_z->size[22][2] = nz;
}

////////////////////////////////////////////////////////////////////
//Allocate memory for F G E -x -y -z
////////////////////////////////////////////////////////////////////
void *Thread_Alloc_FGE(void *Dat)
{
	Allocate_E_comp *data = (Allocate_E_comp *)Dat;
	long i;

	for (i = 0; i < 43; i++)
	{
		*data->A[i] = Init_Matrix_3D<double>(data->size[i][0],data->size[i][1],
			                                 data->size[i][2]);
		if(!*data->A[i])
		{
			data->er = 1;
			pthread_exit(NULL);
		}
	}

	pthread_exit(NULL);
	
	return(NULL);//to disable the worning
}


////////////////////////////////////////////////////////////////////
//Allocate memory for B H -x -y -z
////////////////////////////////////////////////////////////////////
void *Thread_Alloc_BH(void *Dat)
{
	Allocate_H_comp *data = (Allocate_H_comp *)Dat;
	long i;

	for (i = 0; i < 23; i++)
	{
		*data->A[i] = Init_Matrix_3D<double>(data->size[i][0],data->size[i][1],
			                                 data->size[i][2]);
		if(!*data->A[i])
		{
			data->er = 1;
			pthread_exit(NULL);
		}
	}
	
	pthread_exit(NULL);
	
	return(NULL);//to disable the worning
}


////////////////////////////////////////////////////////////////////
//Init save data xy slice
////////////////////////////////////////////////////////////////////
void Init_Thread_Save_Field_Slice(Data_Save_Slice *Data, double ***XX, long  n1_a, 
							      long  n1_b, long  n2_a, long  n2_b, long  n_slice,
							      char *file_name, long nr_DIV_1, long nr_DIV_2)
{
	long delta_n1 = (n1_b - n1_a)/nr_DIV_1;
	long delta_n2 = (n2_b - n2_a)/nr_DIV_2;

	long i, ii, j;
	long n1_thr_a, n1_thr_b, n2_thr_a, n2_thr_b;

	ii = 0;
	n1_thr_a = n1_a;
	for (i = 0; i < nr_DIV_1; i++)
	{	
		if (i == nr_DIV_1-1)
		{
			n1_thr_b = n1_b;
		}
		else
		{
			n1_thr_b = n1_thr_a + delta_n1;
		}
		n2_thr_a = n2_a;
		for (j = 0; j < nr_DIV_2; j++)
		{	
			if (j == nr_DIV_2 - 1)
			{
				n2_thr_b = n2_b;
			}
			else
			{
				n2_thr_b = n2_thr_a + delta_n2;
			}
				
			Data[ii].F_comp = XX;
			Data[ii].n_1_a = n1_thr_a;
			Data[ii].n_1_b = n1_thr_b;
			Data[ii].n_2_a = n2_thr_a;
			Data[ii].n_2_b = n2_thr_b;
		    Data[ii].n_3_slice = n_slice;
			Data[ii].path_file_name = file_name;

			ii++;
			n2_thr_a = n2_thr_b;
		}
		n1_thr_a= n1_thr_b;
	}
}


///////////////////////////////////////////////////////////////////////////////////////
//Save xy slice from 3D data in ascii file
///////////////////////////////////////////////////////////////////////////////////////
void *Thread_Save_Field_xy(void *Dat)
{
	Data_Save_Slice *data = (Data_Save_Slice *)Dat;

	save_3D_xy(data->F_comp,data->n_1_a,data->n_1_b,data->n_2_a,data->n_2_b,
		       data->n_3_slice,data->iter,data->path_file_name);

	pthread_exit(NULL);
	
	return(NULL);//to disable the worning
}

///////////////////////////////////////////////////////////////////////////////////////
//Save yz slice from 3D data in ascii file
///////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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