fdtd_3d_alloc.cpp

来自「利用c++语言写的三维FDTD」· C++ 代码 · 共 526 行

CPP
526
字号
#include "fdtd_3d_alloc.h"
#include "Matrix.h"

///////////////////////////////////////////////////////////////////////////////////////
//Allocate memory for the PML parameters - Ex field component
///////////////////////////////////////////////////////////////////////////////////////
int Alloc_PML_Ex(double **K_Gx_a_1, double **K_Gx_b_1, double **K_Ex_a_1,
				  double **K_Ex_b_1, double **K_Ex_c_1, double **K_Ex_d_1,
				  double **K_Gx_a_2, double **K_Gx_b_2, double **K_Ex_a_2,
				  double **K_Ex_b_2, double **K_Ex_c_2, double **K_Ex_d_2,
				  long  nPML_x_1, long  nPML_y_1, long  nPML_z_1, long  nPML_x_2, 
				  long  nPML_y_2, long  nPML_z_2)
{
	//1
	*K_Gx_a_1 = (double *)calloc(nPML_y_1,sizeof(double)); 
	if(!*K_Gx_a_1)
	{
		return 1;
	}

	*K_Gx_b_1 = (double *)calloc(nPML_y_1,sizeof(double)); 
	if(!*K_Gx_b_1)
	{
		return 1;
	}

	*K_Ex_a_1 = (double *)calloc(nPML_z_1,sizeof(double)); 
	if(!*K_Ex_a_1)
	{
		return 1;
	}

	*K_Ex_b_1 = (double *)calloc(nPML_z_1,sizeof(double)); 
	if(!*K_Ex_b_1)
	{
		return 1;
	}

	*K_Ex_c_1 = (double *)calloc(nPML_x_1,sizeof(double)); 
	if(!*K_Ex_c_1)
	{
		return 1;
	}

	*K_Ex_d_1 = (double *)calloc(nPML_x_1,sizeof(double)); 
	if(!*K_Ex_d_1)
	{
		return 1;
	}

	//2
	*K_Gx_a_2 = (double *)calloc(nPML_y_2,sizeof(double)); 
	if(!*K_Gx_a_2)
	{
		return 1;
	}

	*K_Gx_b_2 = (double *)calloc(nPML_y_2,sizeof(double)); 
	if(!*K_Gx_b_2)
	{
		return 1;
	}

	*K_Ex_a_2 = (double *)calloc(nPML_z_2,sizeof(double)); 
	if(!*K_Ex_a_2)
	{
		return 1;
	}

	*K_Ex_b_2 = (double *)calloc(nPML_z_2,sizeof(double)); 
	if(!*K_Ex_b_2)
	{
		return 1;
	}

	*K_Ex_c_2 = (double *)calloc(nPML_x_2,sizeof(double)); 
	if(!*K_Ex_c_2)
	{
		return 1;
	}

	*K_Ex_d_2 = (double *)calloc(nPML_x_2,sizeof(double)); 
	if(!*K_Ex_d_2)
	{
		return 1;
	}

	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Allocate memory for the PML parameters - Ey field component
///////////////////////////////////////////////////////////////////////////////////////
int Alloc_PML_Ey(double **K_Gy_a_1, double **K_Gy_b_1, double **K_Ey_a_1,
				  double **K_Ey_b_1, double **K_Ey_c_1, double **K_Ey_d_1,
				  double **K_Gy_a_2, double **K_Gy_b_2, double **K_Ey_a_2,
				  double **K_Ey_b_2, double **K_Ey_c_2, double **K_Ey_d_2,
				  long  nPML_x_1, long  nPML_y_1, long  nPML_z_1, long  nPML_x_2, 
				  long  nPML_y_2, long  nPML_z_2)
{
	//1
	*K_Gy_a_1 = (double *)calloc(nPML_z_1,sizeof(double)); 
	if(!*K_Gy_a_1)
	{
		return 1;
	}

	*K_Gy_b_1 = (double *)calloc(nPML_z_1,sizeof(double)); 
	if(!*K_Gy_b_1)
	{
		return 1;
	}

	*K_Ey_a_1 = (double *)calloc(nPML_x_1,sizeof(double)); 
	if(!*K_Ey_a_1)
	{
		return 1;
	}

	*K_Ey_b_1 = (double *)calloc(nPML_x_1,sizeof(double)); 
	if(!*K_Ey_b_1)
	{
		return 1;
	}

	*K_Ey_c_1 = (double *)calloc(nPML_y_1,sizeof(double)); 
	if(!*K_Ey_c_1)
	{
		return 1;
	}

	*K_Ey_d_1 = (double *)calloc(nPML_y_1,sizeof(double)); 
	if(!*K_Ey_d_1)
	{
		return 1;
	}

	//2
	*K_Gy_a_2 = (double *)calloc(nPML_z_2,sizeof(double)); 
	if(!*K_Gy_a_2)
	{
		return 1;
	}

	*K_Gy_b_2 = (double *)calloc(nPML_z_2,sizeof(double)); 
	if(!*K_Gy_b_2)
	{
		return 1;
	}

	*K_Ey_a_2 = (double *)calloc(nPML_x_2,sizeof(double)); 
	if(!*K_Ey_a_2)
	{
		return 1;
	}

	*K_Ey_b_2 = (double *)calloc(nPML_x_2,sizeof(double)); 
	if(!*K_Ey_b_2)
	{
		return 1;
	}

	*K_Ey_c_2 = (double *)calloc(nPML_y_2,sizeof(double)); 
	if(!*K_Ey_c_2)
	{
		return 1;
	}

	*K_Ey_d_2 = (double *)calloc(nPML_y_2,sizeof(double)); 
	if(!*K_Ey_d_2)
	{
		return 1;
	}

	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Allocate memory for the PML parameters - Ez field component
///////////////////////////////////////////////////////////////////////////////////////
int Alloc_PML_Ez(double **K_Gz_a_1, double **K_Gz_b_1, double **K_Ez_a_1,
				  double **K_Ez_b_1, double **K_Ez_c_1, double **K_Ez_d_1,
				  double **K_Gz_a_2, double **K_Gz_b_2, double **K_Ez_a_2,
				  double **K_Ez_b_2, double **K_Ez_c_2, double **K_Ez_d_2,
				  long  nPML_x_1, long  nPML_y_1, long  nPML_z_1, long  nPML_x_2, 
				  long  nPML_y_2, long  nPML_z_2)
{
	//1
	*K_Gz_a_1 = (double *)calloc(nPML_x_1,sizeof(double)); 
	if(!*K_Gz_a_1)
	{
		return 1;
	}

	*K_Gz_b_1 = (double *)calloc(nPML_x_1,sizeof(double)); 
	if(!*K_Gz_b_1)
	{
		return 1;
	}

	*K_Ez_a_1 = (double *)calloc(nPML_y_1,sizeof(double)); 
	if(!*K_Ez_a_1)
	{
		return 1;
	}

	*K_Ez_b_1 = (double *)calloc(nPML_y_1,sizeof(double)); 
	if(!*K_Ez_b_1)
	{
		return 1;
	}

	*K_Ez_c_1 = (double *)calloc(nPML_z_1,sizeof(double)); 
	if(!*K_Ez_c_1)
	{
		return 1;
	}

	*K_Ez_d_1 = (double *)calloc(nPML_z_1,sizeof(double)); 
	if(!*K_Ez_d_1)
	{
		return 1;
	}

	//2
	*K_Gz_a_2 = (double *)calloc(nPML_x_2,sizeof(double)); 
	if(!*K_Gz_a_2)
	{
		return 1;
	}

	*K_Gz_b_2 = (double *)calloc(nPML_x_2,sizeof(double)); 
	if(!*K_Gz_b_2)
	{
		return 1;
	}

	*K_Ez_a_2 = (double *)calloc(nPML_y_2,sizeof(double)); 
	if(!*K_Ez_a_2)
	{
		return 1;
	}

	*K_Ez_b_2 = (double *)calloc(nPML_y_2,sizeof(double)); 
	if(!*K_Ez_b_2)
	{
		return 1;
	}

	*K_Ez_c_2 = (double *)calloc(nPML_z_2,sizeof(double)); 
	if(!*K_Ez_c_2)
	{
		return 1;
	}

	*K_Ez_d_2 = (double *)calloc(nPML_z_2,sizeof(double)); 
	if(!*K_Ez_d_2)
	{
		return 1;
	}

	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Allocate memory for the PML parameters - Hx field component
///////////////////////////////////////////////////////////////////////////////////////
int Alloc_PML_Hx(double **K_Bx_a_1, double **K_Bx_b_1, double **K_Hx_a_1,
				  double **K_Hx_b_1, double **K_Hx_c_1, double **K_Hx_d_1,
				  double **K_Bx_a_2, double **K_Bx_b_2, double **K_Hx_a_2,
				  double **K_Hx_b_2, double **K_Hx_c_2, double **K_Hx_d_2,
				  long  nPML_x_1, long  nPML_y_1, long  nPML_z_1, long  nPML_x_2, 
				  long  nPML_y_2, long  nPML_z_2)
{
	//1
	*K_Bx_a_1 = (double *)calloc(nPML_y_1,sizeof(double)); 
	if(!*K_Bx_a_1)
	{
		return 1;
	}

	*K_Bx_b_1 = (double *)calloc(nPML_y_1,sizeof(double)); 
	if(!*K_Bx_b_1)
	{
		return 1;
	}

	*K_Hx_a_1 = (double *)calloc(nPML_z_1,sizeof(double)); 
	if(!*K_Hx_a_1)
	{
		return 1;
	}

	*K_Hx_b_1 = (double *)calloc(nPML_z_1,sizeof(double)); 
	if(!*K_Hx_b_1)
	{
		return 1;
	}

	*K_Hx_c_1 = (double *)calloc(nPML_x_1,sizeof(double)); 
	if(!*K_Hx_c_1)
	{
		return 1;
	}

	*K_Hx_d_1 = (double *)calloc(nPML_x_1,sizeof(double)); 
	if(!*K_Hx_d_1)
	{
		return 1;
	}

	//2
	*K_Bx_a_2 = (double *)calloc(nPML_y_2,sizeof(double)); 
	if(!*K_Bx_a_2)
	{
		return 1;
	}

	*K_Bx_b_2 = (double *)calloc(nPML_y_2,sizeof(double)); 
	if(!*K_Bx_b_2)
	{
		return 1;
	}

	*K_Hx_a_2 = (double *)calloc(nPML_z_2,sizeof(double)); 
	if(!*K_Hx_a_2)
	{
		return 1;
	}

	*K_Hx_b_2 = (double *)calloc(nPML_z_2,sizeof(double)); 
	if(!*K_Hx_b_2)
	{
		return 1;
	}

	*K_Hx_c_2 = (double *)calloc(nPML_x_2,sizeof(double)); 
	if(!*K_Hx_c_2)
	{
		return 1;
	}

	*K_Hx_d_2 = (double *)calloc(nPML_x_2,sizeof(double)); 
	if(!*K_Hx_d_2)
	{
		return 1;
	}

	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Allocate memory for the PML parameters - Hy field component
///////////////////////////////////////////////////////////////////////////////////////
int Alloc_PML_Hy(double **K_By_a_1, double **K_By_b_1, double **K_Hy_a_1,
				  double **K_Hy_b_1, double **K_Hy_c_1, double **K_Hy_d_1,
				  double **K_By_a_2, double **K_By_b_2, double **K_Hy_a_2,
				  double **K_Hy_b_2, double **K_Hy_c_2, double **K_Hy_d_2,
				  long  nPML_x_1, long  nPML_y_1, long  nPML_z_1, long  nPML_x_2, 
				  long  nPML_y_2, long  nPML_z_2)
{
	//PML-Hy field
	//1
	*K_By_a_1 = (double *)calloc(nPML_z_1,sizeof(double)); 
	if(!*K_By_a_1)
	{
		return 1;
	}

	*K_By_b_1 = (double *)calloc(nPML_z_1,sizeof(double)); 
	if(!*K_By_b_1)
	{
		return 1;
	}
	
	*K_Hy_a_1 = (double *)calloc(nPML_x_1,sizeof(double)); 
	if(!*K_Hy_a_1)
	{
		return 1;
	}

	*K_Hy_b_1 = (double *)calloc(nPML_x_1,sizeof(double)); 
	if(!*K_Hy_b_1)
	{
		return 1;
	}

	*K_Hy_c_1 = (double *)calloc(nPML_y_1,sizeof(double)); 
	if(!*K_Hy_c_1)
	{
		return 1;
	}

	*K_Hy_d_1 = (double *)calloc(nPML_y_1,sizeof(double)); 
	if(!*K_Hy_d_1)
	{
		return 1;
	}

	//2
	*K_By_a_2 = (double *)calloc(nPML_z_2,sizeof(double)); 
	if(!*K_By_a_2)
	{
		return 1;
	}

	*K_By_b_2 = (double *)calloc(nPML_z_2,sizeof(double)); 
	if(!*K_By_b_2)
	{
		return 1;
	}
	
	*K_Hy_a_2 = (double *)calloc(nPML_x_2,sizeof(double)); 
	if(!*K_Hy_a_2)
	{
		return 1;
	}

	*K_Hy_b_2 = (double *)calloc(nPML_x_2,sizeof(double)); 
	if(!*K_Hy_b_2)
	{
		return 1;
	}

	*K_Hy_c_2 = (double *)calloc(nPML_y_2,sizeof(double)); 
	if(!*K_Hy_c_2)
	{
		return 1;
	}

	*K_Hy_d_2 = (double *)calloc(nPML_y_2,sizeof(double)); 
	if(!*K_Hy_d_2)
	{
		return 1;
	}

	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Allocate memory for the PML parameters - Hz field component
///////////////////////////////////////////////////////////////////////////////////////
int Alloc_PML_Hz(double **K_Bz_a_1, double **K_Bz_b_1, double **K_Hz_a_1,
				  double **K_Hz_b_1, double **K_Hz_c_1, double **K_Hz_d_1,
				  double **K_Bz_a_2, double **K_Bz_b_2, double **K_Hz_a_2,
				  double **K_Hz_b_2, double **K_Hz_c_2, double **K_Hz_d_2,
				  long  nPML_x_1, long  nPML_y_1, long  nPML_z_1, long  nPML_x_2, 
				  long  nPML_y_2, long  nPML_z_2)
{
	//PML-Hz field
	//1
	*K_Bz_a_1 = (double *)calloc(nPML_x_1,sizeof(double)); 
	if(!*K_Bz_a_1)
	{
		return 1;
	}

	*K_Bz_b_1 = (double *)calloc(nPML_x_1,sizeof(double)); 
	if(!*K_Bz_b_1)
	{
		return 1;
	}

	*K_Hz_a_1 = (double *)calloc(nPML_y_1,sizeof(double)); 
	if(!*K_Hz_a_1)
	{
		return 1;
	}

	*K_Hz_b_1 = (double *)calloc(nPML_y_1,sizeof(double)); 
	if(!*K_Hz_b_1)
	{
		return 1;
	}

	*K_Hz_c_1 = (double *)calloc(nPML_z_1,sizeof(double)); 
	if(!*K_Hz_c_1)
	{
		return 1;
	}

	*K_Hz_d_1 = (double *)calloc(nPML_z_1,sizeof(double)); 
	if(!*K_Hz_d_1)
	{
		return 1;
	}

	//2
	*K_Bz_a_2 = (double *)calloc(nPML_x_2,sizeof(double)); 
	if(!*K_Bz_a_2)
	{
		return 1;
	}

	*K_Bz_b_2 = (double *)calloc(nPML_x_2,sizeof(double)); 
	if(!*K_Bz_b_2)
	{
		return 1;
	}

	*K_Hz_a_2 = (double *)calloc(nPML_y_2,sizeof(double)); 
	if(!*K_Hz_a_2)
	{
		return 1;
	}

	*K_Hz_b_2 = (double *)calloc(nPML_y_2,sizeof(double)); 
	if(!*K_Hz_b_2)
	{
		return 1;
	}

	*K_Hz_c_2 = (double *)calloc(nPML_z_2,sizeof(double)); 
	if(!*K_Hz_c_2)
	{
		return 1;
	}

	*K_Hz_d_2 = (double *)calloc(nPML_z_2,sizeof(double)); 
	if(!*K_Hz_d_2)
	{
		return 1;
	}

	return 0;
}

⌨️ 快捷键说明

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