📄 init_thread_calc_data.cpp
字号:
double TwoOREp0 = 2*eps_0;
double inv_TwoOREp0 = 1/TwoOREp0;
double TwoOREp0DIVMu0 = TwoOREp0/mu_0;
double inv_dx = 1.0/dx;
double inv_dz = 1.0/dz;
double dtDIVdx = dt/dx;
double dtDIVdz = dt/dz;
double TwoOREp0DIVMu0ORdtDIVdx = 2*eps_0/mu_0*dt/dx;
double TwoOREp0DIVMu0ORdtDIVdz = 2*eps_0/mu_0*dt/dz;
double inv_dxORmu_0 = 1.0/(dx*mu_0);
double inv_dzORmu_0 = 1.0/(dz*mu_0);
long nx_MIN_1 = nx - 1;
long nz_MIN_1 = nz - 1;
long ny_MIN_nPML_y_2 = ny - nPML_y_2;
long nPML_x_2_MIN_1 = nPML_x_2 - 1;
long nPML_y_2_MIN_1 = nPML_y_2 - 1;
long nPML_z_2_MIN_1 = nPML_z_2 - 1;
long nx_MIN_1_MIN_nPML_x_2 = nx - 1 - nPML_x_2;
long nz_MIN_1_MIN_nPML_z_2 = nz - 1 - nPML_z_2;
long i;
//set the same elements for all regions
for (i = 0; i<26; i++)
{
Data_Hy_PML[i].H = Hy;
Data_Hy_PML[i].E1 = Ex; Data_Hy_PML[i].E2 = Ez;
Data_Hy_PML[i].Ind = Index; Data_Hy_PML[i].mu_r = mu_r[i];
}
//set the particular elements
Data_Hy_PML[0].B = By_1; Data_Hy_PML[1].B = By_2; Data_Hy_PML[2].B = By_3;
Data_Hy_PML[3].B = By_4; Data_Hy_PML[5].B = By_6;
Data_Hy_PML[6].B = By_7; Data_Hy_PML[7].B = By_8; Data_Hy_PML[8].B = By_9;
Data_Hy_PML[9].B = By_10; Data_Hy_PML[10].B = By_11; Data_Hy_PML[11].B = By_12;
Data_Hy_PML[14].B = By_16; Data_Hy_PML[15].B = By_17; Data_Hy_PML[16].B = By_18;
Data_Hy_PML[17].B = By_19; Data_Hy_PML[18].B = By_20; Data_Hy_PML[19].B = By_21;
Data_Hy_PML[20].B = By_22; Data_Hy_PML[22].B = By_24;
Data_Hy_PML[23].B = By_25; Data_Hy_PML[24].B = By_26; Data_Hy_PML[25].B = By_27;
//set coef_1 and coef_2
for (i=0; i<26; i++) //first set for all:
{
Data_Hy_PML[i].coef_1 = inv_dx; Data_Hy_PML[i].coef_2 = inv_dz;
}
//then modify
Data_Hy_PML[9].coef_1 = dtDIVdx; Data_Hy_PML[9].coef_2 = dtDIVdz;
Data_Hy_PML[10].coef_1 = dtDIVdx; Data_Hy_PML[10].coef_2 = dtDIVdz;
Data_Hy_PML[11].coef_1 = dtDIVdx; Data_Hy_PML[11].coef_2 = dtDIVdz;
Data_Hy_PML[14].coef_1 = dtDIVdx; Data_Hy_PML[14].coef_2 = dtDIVdz;
Data_Hy_PML[15].coef_1 = dtDIVdx; Data_Hy_PML[15].coef_2 = dtDIVdz;
Data_Hy_PML[16].coef_1 = dtDIVdx; Data_Hy_PML[16].coef_2 = dtDIVdz;
Data_Hy_PML[12].coef_1 = TwoOREp0DIVMu0ORdtDIVdx;
Data_Hy_PML[12].coef_2 = TwoOREp0DIVMu0ORdtDIVdz;
Data_Hy_PML[13].coef_1 = TwoOREp0DIVMu0ORdtDIVdx;
Data_Hy_PML[13].coef_2 = TwoOREp0DIVMu0ORdtDIVdz;
Data_Hy_PML[4].coef_1 = inv_dxORmu_0; Data_Hy_PML[4].coef_2 = inv_dzORmu_0;
Data_Hy_PML[21].coef_1 = inv_dxORmu_0; Data_Hy_PML[21].coef_2 = inv_dzORmu_0;
//set cnst
Data_Hy_PML[3].cnst = TwoOREp0DIVMu0; Data_Hy_PML[5].cnst = TwoOREp0DIVMu0;
Data_Hy_PML[20].cnst = TwoOREp0DIVMu0; Data_Hy_PML[22].cnst = TwoOREp0DIVMu0;
Data_Hy_PML[1].cnst = inv_TwoOREp0; Data_Hy_PML[7].cnst = inv_TwoOREp0;
Data_Hy_PML[10].cnst = inv_TwoOREp0; Data_Hy_PML[15].cnst = inv_TwoOREp0;
Data_Hy_PML[18].cnst = inv_TwoOREp0; Data_Hy_PML[24].cnst = inv_TwoOREp0;
long ind;
//x component I zone - (1 4 7 10 13 16 19 22 25)
for (i = 0; i<27; i=i+3)
{
if (i < 13)
{
ind = i;
}
else
{
ind = i - 1;
}
Data_Hy_PML[ind].K_H_a = K_Hy_a_1; Data_Hy_PML[ind].K_H_b = K_Hy_b_1;
Data_Hy_PML[ind].nx_2 = nPML_x_1;
}
//x component II zone - (2 5 8 11 14 17 20 23 26)
for (i = 1; i<27; i=i+3)
{
if (i < 13)
{
ind = i;
}
else
{
ind = i - 1;
}
if (ind != 12)
{
Data_Hy_PML[ind].nx_1 = nPML_x_1;
Data_Hy_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_Hy_PML[ind].K_H_a = K_Hy_a_2; Data_Hy_PML[ind].K_H_b = K_Hy_b_2;
Data_Hy_PML[ind].nx_1 = nx_MIN_1_MIN_nPML_x_2; Data_Hy_PML[ind].nx_2 = nx_MIN_1;
Data_Hy_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_Hy_PML[ind].K_H_c = K_Hy_c_1; Data_Hy_PML[ind].K_H_d = K_Hy_d_1;
Data_Hy_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_Hy_PML[ind].ny_1 = nPML_y_1;
Data_Hy_PML[ind].ny_2 = ny_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_Hy_PML[ind].K_H_c = K_Hy_c_2; Data_Hy_PML[ind].K_H_d = K_Hy_d_2;
Data_Hy_PML[ind].ny_1 = ny_MIN_nPML_y_2;
Data_Hy_PML[ind].ny_2 = ny;
Data_Hy_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_Hy_PML[i].K_B_a = K_By_a_1; Data_Hy_PML[i].K_B_b = K_By_b_1;
Data_Hy_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_Hy_PML[i].nz_1 = nPML_z_1; Data_Hy_PML[i].nz_2 = nz_MIN_1_MIN_nPML_z_2;
}
//z component III zone - (19 20 21 22 23 24 25 26 27)
for (i = 17; i<26; i++)
{
Data_Hy_PML[i].K_B_a = K_By_a_2; Data_Hy_PML[i].K_B_b = K_By_b_2;
Data_Hy_PML[i].nz_1 = nz_MIN_1_MIN_nPML_z_2; Data_Hy_PML[i].nz_2 = nz_MIN_1;
Data_Hy_PML[i].c_PML_z = nPML_z_2_MIN_1;
}
}
////////////////////////////////////////////////////////////////////
//Init threads parameters in the PML zone -- Hz
////////////////////////////////////////////////////////////////////
void Init_Thread_Calc_PML_Hz(Data_H_comp_PML *Data_Hz_PML,
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, double ***Ex,
double ***Ey, long ***Index, double **mu_r, 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,
long nx, long ny, long nz, double dx, double dy, double dt)
{
//permittivity of free space
double eps_0 = 8.8541878176203898505365630317107e-12; // [F/m]
//permeability of free space
double mu_0 = 1.2566370614359172953850573533118e-6; // [H/m]
double TwoOREp0 = 2*eps_0;
double inv_TwoOREp0 = 1/TwoOREp0;
double TwoOREp0DIVMu0 = TwoOREp0/mu_0;
double inv_dx = 1.0/dx;
double inv_dy = 1.0/dy;
double dtDIVdx = dt/dx;
double dtDIVdy = dt/dy;
double TwoOREp0DIVMu0ORdtDIVdx = 2*eps_0/mu_0*dt/dx;
double TwoOREp0DIVMu0ORdtDIVdy = 2*eps_0/mu_0*dt/dy;
double inv_dxORmu_0 = 1.0/(dx*mu_0);
double inv_dyORmu_0 = 1.0/(dy*mu_0);
long nx_MIN_1 = nx - 1;
long ny_MIN_1 = ny - 1;
long nz_MIN_nPML_z_2 = nz - nPML_z_2;
long nPML_x_2_MIN_1 = nPML_x_2 - 1;
long nPML_y_2_MIN_1 = nPML_y_2 - 1;
long nPML_z_2_MIN_1 = nPML_z_2 - 1;
long nx_MIN_1_MIN_nPML_x_2 = nx - 1 - nPML_x_2;
long ny_MIN_1_MIN_nPML_y_2 = ny - 1 - nPML_y_2;
long i;
//set the same elements for all regions
for (i = 0; i<26; i++)
{
Data_Hz_PML[i].H = Hz;
Data_Hz_PML[i].E1 = Ex; Data_Hz_PML[i].E2 = Ey;
Data_Hz_PML[i].Ind = Index; Data_Hz_PML[i].mu_r = mu_r[i];
}
//set the particular elements
Data_Hz_PML[0].B = Bz_1; Data_Hz_PML[1].B = Bz_2; Data_Hz_PML[2].B = Bz_3;
Data_Hz_PML[3].B = Bz_4; Data_Hz_PML[4].B = Bz_5; Data_Hz_PML[5].B = Bz_6;
Data_Hz_PML[6].B = Bz_7; Data_Hz_PML[7].B = Bz_8; Data_Hz_PML[8].B = Bz_9;
Data_Hz_PML[9].B = Bz_10; Data_Hz_PML[11].B = Bz_12;
Data_Hz_PML[14].B = Bz_16; Data_Hz_PML[16].B = Bz_18;
Data_Hz_PML[17].B = Bz_19; Data_Hz_PML[18].B = Bz_20; Data_Hz_PML[19].B = Bz_21;
Data_Hz_PML[20].B = Bz_22; Data_Hz_PML[21].B = Bz_23; Data_Hz_PML[22].B = Bz_24;
Data_Hz_PML[23].B = Bz_25; Data_Hz_PML[24].B = Bz_26; Data_Hz_PML[25].B = Bz_27;
//set coef_1 and coef_2
for (i=0; i<26; i++) //first set for all:
{
Data_Hz_PML[i].coef_1 = inv_dx; Data_Hz_PML[i].coef_2 = inv_dy;
}
//then modify
Data_Hz_PML[1].coef_1 = dtDIVdx; Data_Hz_PML[1].coef_2 = dtDIVdy;
Data_Hz_PML[4].coef_1 = dtDIVdx; Data_Hz_PML[4].coef_2 = dtDIVdy;
Data_Hz_PML[7].coef_1 = dtDIVdx; Data_Hz_PML[7].coef_2 = dtDIVdy;
Data_Hz_PML[18].coef_1 = dtDIVdx; Data_Hz_PML[18].coef_2 = dtDIVdy;
Data_Hz_PML[21].coef_1 = dtDIVdx; Data_Hz_PML[21].coef_2 = dtDIVdy;
Data_Hz_PML[24].coef_1 = dtDIVdx; Data_Hz_PML[24].coef_2 = dtDIVdy;
Data_Hz_PML[10].coef_1 = TwoOREp0DIVMu0ORdtDIVdx;
Data_Hz_PML[10].coef_2 = TwoOREp0DIVMu0ORdtDIVdy;
Data_Hz_PML[15].coef_1 = TwoOREp0DIVMu0ORdtDIVdx;
Data_Hz_PML[15].coef_2 = TwoOREp0DIVMu0ORdtDIVdy;
Data_Hz_PML[12].coef_1 = inv_dxORmu_0; Data_Hz_PML[12].coef_2 = inv_dyORmu_0;
Data_Hz_PML[13].coef_1 = inv_dxORmu_0; Data_Hz_PML[13].coef_2 = inv_dyORmu_0;
//set cnst
Data_Hz_PML[9].cnst = TwoOREp0DIVMu0; Data_Hz_PML[11].cnst = TwoOREp0DIVMu0;
Data_Hz_PML[14].cnst = TwoOREp0DIVMu0; Data_Hz_PML[16].cnst = TwoOREp0DIVMu0;
Data_Hz_PML[3].cnst = inv_TwoOREp0; Data_Hz_PML[4].cnst = inv_TwoOREp0;
Data_Hz_PML[5].cnst = inv_TwoOREp0; Data_Hz_PML[20].cnst = inv_TwoOREp0;
Data_Hz_PML[21].cnst = inv_TwoOREp0; Data_Hz_PML[22].cnst = inv_TwoOREp0;
long ind;
//x component I zone - (1 4 7 10 13 16 19 22 25)
for (i = 0; i<27; i=i+3)
{
if (i < 13)
{
ind = i;
}
else
{
ind = i - 1;
}
Data_Hz_PML[ind].K_B_a = K_Bz_a_1; Data_Hz_PML[ind].K_B_b = K_Bz_b_1;
Data_Hz_PML[ind].nx_2 = nPML_x_1;
}
//x component II zone - (2 5 8 11 14 17 20 23 26)
for (i = 1; i<27; i=i+3)
{
if (i < 13)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -