📄 init_thread_calc_data.cpp
字号:
else
{
ind = ii - 1;
}
if (ii != 13)
{
Data_Ez_PML[ind].ny_1 = nPML_y_1; Data_Ez_PML[ind].ny_2 = ny_MIN_nPML_y_2;
if (ii<12 || ii >15)
{
Data_Ez_PML[ind].cnst = inv_TwoOREp0;
}
}
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_Ez_PML[ind].K_E_a = K_Ez_a_2; Data_Ez_PML[ind].K_E_b = K_Ez_b_2;
Data_Ez_PML[ind].ny_1 = ny_MIN_nPML_y_2; Data_Ez_PML[ind].ny_2 = ny_MIN_1;
Data_Ez_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_Ez_PML[i].K_E_c = K_Ez_c_1; Data_Ez_PML[i].K_E_d = K_Ez_d_1;
Data_Ez_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_Ez_PML[i].nz_1 = nPML_z_1; Data_Ez_PML[i].nz_2 = nz_MIN_1_MIN_nPML_z_2;
}
Data_Ez_PML[9].cnst = TwoOREp0; Data_Ez_PML[10].cnst = TwoOREp0;
Data_Ez_PML[11].cnst = TwoOREp0; Data_Ez_PML[14].cnst = TwoOREp0;
Data_Ez_PML[15].cnst = TwoOREp0; Data_Ez_PML[16].cnst = TwoOREp0;
//z component III zone - (19 20 21 22 23 24 25 26 27)
for (i = 17; i<26; i++)
{
Data_Ez_PML[i].K_E_c = K_Ez_c_2; Data_Ez_PML[i].K_E_d = K_Ez_d_2;
Data_Ez_PML[i].nz_1 = nz_MIN_1_MIN_nPML_z_2; Data_Ez_PML[i].nz_2 = nz_MIN_1;
Data_Ez_PML[i].c_PML_z = nPML_z_2_MIN_1;
}
}
////////////////////////////////////////////////////////////////////
//Init threads parameters in the PML zone -- Hx
////////////////////////////////////////////////////////////////////
void Init_Thread_Calc_PML_Hx(Data_H_comp_PML *Data_Hx_PML,
double ***Bx_1, double ***Bx_2, double ***Bx_3, double ***Bx_4,
double ***Bx_6, double ***Bx_7, double ***Bx_8, double ***Bx_9,
double ***Bx_10, double ***Bx_12, double ***Bx_13, double ***Bx_15,
double ***Bx_16, double ***Bx_18, double ***Bx_19, double ***Bx_20,
double ***Bx_21, double ***Bx_22, double ***Bx_24, double ***Bx_25,
double ***Bx_26, double ***Bx_27, double ***Hx, double ***Ey,
double ***Ez, long ***Index, double **mu_r, 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,
long nx, long ny, long nz, double dy, double dz, 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_dy = 1.0/dy;
double inv_dz = 1.0/dz;
double dtDIVdy = dt/dy;
double dtDIVdz = dt/dz;
double TwoOREp0DIVMu0ORdtDIVdy = 2*eps_0/mu_0*dt/dy;
double TwoOREp0DIVMu0ORdtDIVdz = 2*eps_0/mu_0*dt/dz;
double inv_dyORmu_0 = 1.0/(dy*mu_0);
double inv_dzORmu_0 = 1.0/(dz*mu_0);
long ny_MIN_1 = ny - 1;
long nz_MIN_1 = nz - 1;
long nx_MIN_nPML_x_2 = nx - nPML_x_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 ny_MIN_1_MIN_nPML_y_2 = ny - 1 - nPML_y_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_Hx_PML[i].H = Hx;
Data_Hx_PML[i].E1 = Ey; Data_Hx_PML[i].E2 = Ez;
Data_Hx_PML[i].Ind = Index; Data_Hx_PML[i].mu_r = mu_r[i];
}
//set the particular elements
Data_Hx_PML[0].B = Bx_1; Data_Hx_PML[1].B = Bx_2; Data_Hx_PML[2].B = Bx_3;
Data_Hx_PML[3].B = Bx_4; Data_Hx_PML[5].B = Bx_6;
Data_Hx_PML[6].B = Bx_7; Data_Hx_PML[7].B = Bx_8; Data_Hx_PML[8].B = Bx_9;
Data_Hx_PML[9].B = Bx_10; Data_Hx_PML[11].B = Bx_12;
Data_Hx_PML[12].B = Bx_13; Data_Hx_PML[13].B = Bx_15;
Data_Hx_PML[14].B = Bx_16; Data_Hx_PML[16].B = Bx_18;
Data_Hx_PML[17].B = Bx_19; Data_Hx_PML[18].B = Bx_20; Data_Hx_PML[19].B = Bx_21;
Data_Hx_PML[20].B = Bx_22; Data_Hx_PML[22].B = Bx_24;
Data_Hx_PML[23].B = Bx_25; Data_Hx_PML[24].B = Bx_26; Data_Hx_PML[25].B = Bx_27;
//set coef_1 and coef_2
for (i=0; i<26; i++) //first set for all:
{
Data_Hx_PML[i].coef_1 = inv_dy; Data_Hx_PML[i].coef_2 = inv_dz;
}
//then modify
Data_Hx_PML[3].coef_1 = dtDIVdy; Data_Hx_PML[3].coef_2 = dtDIVdz;
Data_Hx_PML[5].coef_1 = dtDIVdy; Data_Hx_PML[5].coef_2 = dtDIVdz;
Data_Hx_PML[12].coef_1 = dtDIVdy; Data_Hx_PML[12].coef_2 = dtDIVdz;
Data_Hx_PML[13].coef_1 = dtDIVdy; Data_Hx_PML[13].coef_2 = dtDIVdz;
Data_Hx_PML[20].coef_1 = dtDIVdy; Data_Hx_PML[20].coef_2 = dtDIVdz;
Data_Hx_PML[22].coef_1 = dtDIVdy; Data_Hx_PML[22].coef_2 = dtDIVdz;
Data_Hx_PML[4].coef_1 = TwoOREp0DIVMu0ORdtDIVdy;
Data_Hx_PML[4].coef_2 = TwoOREp0DIVMu0ORdtDIVdz;
Data_Hx_PML[21].coef_1 = TwoOREp0DIVMu0ORdtDIVdy;
Data_Hx_PML[21].coef_2 = TwoOREp0DIVMu0ORdtDIVdz;
Data_Hx_PML[10].coef_1 = inv_dyORmu_0; Data_Hx_PML[10].coef_2 = inv_dzORmu_0;
Data_Hx_PML[15].coef_1 = inv_dyORmu_0; Data_Hx_PML[15].coef_2 = inv_dzORmu_0;
//set cnst
Data_Hx_PML[1].cnst = TwoOREp0DIVMu0; Data_Hx_PML[7].cnst = TwoOREp0DIVMu0;
Data_Hx_PML[18].cnst = TwoOREp0DIVMu0; Data_Hx_PML[24].cnst = TwoOREp0DIVMu0;
Data_Hx_PML[9].cnst = inv_TwoOREp0; Data_Hx_PML[10].cnst = inv_TwoOREp0;
Data_Hx_PML[11].cnst = inv_TwoOREp0; Data_Hx_PML[12].cnst = inv_TwoOREp0;
Data_Hx_PML[13].cnst = inv_TwoOREp0; Data_Hx_PML[14].cnst = inv_TwoOREp0;
Data_Hx_PML[15].cnst = inv_TwoOREp0; Data_Hx_PML[16].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_Hx_PML[ind].K_H_c = K_Hx_c_1; Data_Hx_PML[ind].K_H_d = K_Hx_d_1;
Data_Hx_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_Hx_PML[ind].nx_1 = nPML_x_1; Data_Hx_PML[ind].nx_2 = nx_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_Hx_PML[ind].K_H_c = K_Hx_c_2; Data_Hx_PML[ind].K_H_d = K_Hx_d_2;
Data_Hx_PML[ind].nx_1 = nx_MIN_nPML_x_2; Data_Hx_PML[ind].nx_2 = nx;
Data_Hx_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_Hx_PML[ind].K_B_a = K_Bx_a_1; Data_Hx_PML[ind].K_B_b = K_Bx_b_1;
Data_Hx_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_Hx_PML[ind].ny_1 = nPML_y_1;
Data_Hx_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_Hx_PML[ind].K_B_a = K_Bx_a_2; Data_Hx_PML[ind].K_B_b = K_Bx_b_2;
Data_Hx_PML[ind].ny_1 = ny_MIN_1_MIN_nPML_y_2;
Data_Hx_PML[ind].ny_2 = ny_MIN_1;
Data_Hx_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_Hx_PML[i].K_H_a = K_Hx_a_1; Data_Hx_PML[i].K_H_b = K_Hx_b_1;
Data_Hx_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_Hx_PML[i].nz_1 = nPML_z_1; Data_Hx_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_Hx_PML[i].K_H_a = K_Hx_a_2; Data_Hx_PML[i].K_H_b = K_Hx_b_2;
Data_Hx_PML[i].nz_1 = nz_MIN_1_MIN_nPML_z_2; Data_Hx_PML[i].nz_2 = nz_MIN_1;
Data_Hx_PML[i].c_PML_z = nPML_z_2_MIN_1;
}
}
////////////////////////////////////////////////////////////////////
//Init threads parameters in the PML zone -- Hy
////////////////////////////////////////////////////////////////////
void Init_Thread_Calc_PML_Hy(Data_H_comp_PML *Data_Hy_PML,
double ***By_1, double ***By_2, double ***By_3, double ***By_4,
double ***By_6, double ***By_7, double ***By_8, double ***By_9,
double ***By_10, double ***By_11, double ***By_12, double ***By_16,
double ***By_17, double ***By_18, double ***By_19, double ***By_20,
double ***By_21, double ***By_22, double ***By_24, double ***By_25,
double ***By_26, double ***By_27, double ***Hy, double ***Ex,
double ***Ez, long ***Index, double **mu_r, 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,
long nx, long ny, long nz, double dx, double dz, 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]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -