📄 fdtd_3d.cpp
字号:
}
//k faces
for (i = 0; i < l_x; i++)
{
for (j = 0; j < l_y-1; j++)
{
face_Ey_k0[0][i][j] = (i-l_x+1)*dx*sin_teta*cos_phi + (j+0.5-l_y+1)*dy*sin_teta*sin_phi;
face_Ey_k1[0][i][j] = (i-l_x+1)*dx*sin_teta*cos_phi + (j+0.5-l_y+1)*dy*sin_teta*sin_phi +(l_z-1)*dz*cos_teta;
face_Hx_k0[0][i][j] = (i-l_x+1)*dx*sin_teta*cos_phi + (j+0.5-l_y+1)*dy*sin_teta*sin_phi - 0.5*dz*cos_teta;
face_Hx_k1[0][i][j] = (i-l_x+1)*dx*sin_teta*cos_phi + (j+0.5-l_y+1)*dy*sin_teta*sin_phi +(l_z-1+0.5)*dz*cos_teta;
}
}
}
//////////////////////////////////////////////////////////////////////////
// 0 <= teta <= 90; 270 < phi < 360
//////////////////////////////////////////////////////////////////////////
if ( sin_phi < 0 && cos_phi > 0 )
{
//i faces
for (j = 0; j < l_y; j++)
{
for (k = 0; k < l_z-1; k++)
{
face_Ez_i0[0][j][k] = (j-l_y+1)*dy*sin_teta*sin_phi + (k+0.5)*dz*cos_teta;
face_Ez_i1[0][j][k] = (l_x-1)*dx*sin_teta*cos_phi + (j-l_y+1)*dy*sin_teta*sin_phi + (k+0.5)*dz*cos_teta;
face_Hy_i0[0][j][k] = -0.5*dx*sin_teta*cos_phi + (j-l_y+1)*dy*sin_teta*sin_phi + (k+0.5)*dz*cos_teta;
face_Hy_i1[0][j][k] = (l_x-1+0.5)*dx*sin_teta*cos_phi + (j-l_y+1)*dy*sin_teta*sin_phi + (k+0.5)*dz*cos_teta;
}
}
//i faces
for (j = 0; j < l_y-1; j++)
{
for (k = 0; k < l_z; k++)
{
face_Ey_i0[0][j][k] = (j+0.5-l_y+1)*dy*sin_teta*sin_phi + k*dz*cos_teta;
face_Ey_i1[0][j][k] = (l_x-1)*dx*sin_teta*cos_phi + (j+0.5-l_y+1)*dy*sin_teta*sin_phi + k*dz*cos_teta;
face_Hz_i0[0][j][k] = -0.5*dx*sin_teta*cos_phi + (j+0.5-l_y+1)*dy*sin_teta*sin_phi + k*dz*cos_teta;
face_Hz_i1[0][j][k] = (l_x-1+0.5)*dx*sin_teta*cos_phi + (j+0.5-l_y+1)*dy*sin_teta*sin_phi + k*dz*cos_teta;
}
}
//j faces
for (i = 0; i < l_x; i++)
{
for (k = 0; k < l_z-1; k++)
{
face_Ez_j0[0][i][k] = i*dx*sin_teta*cos_phi + (-l_y+1)*dy*sin_teta*sin_phi + (k+0.5)*dz*cos_teta;
face_Ez_j1[0][i][k] = i*dx*sin_teta*cos_phi + (k+0.5)*dz*cos_teta;
face_Hx_j0[0][i][k] = i*dx*sin_teta*cos_phi + (-0.5-l_y+1) *dy*sin_teta*sin_phi + (k+0.5)*dz*cos_teta;
face_Hx_j1[0][i][k] = i*dx*sin_teta*cos_phi + 0.5*dy*sin_teta*sin_phi + (k+0.5)*dz*cos_teta;
}
}
//j faces
for (i = 0; i < l_x-1; i++)
{
for (k = 0; k < l_z; k++)
{
face_Ex_j0[0][i][k] = (i+0.5)*dx*sin_teta*cos_phi + (-l_y+1)*dy*sin_teta*sin_phi + k*dz*cos_teta;
face_Ex_j1[0][i][k] = (i+0.5)*dx*sin_teta*cos_phi + k*dz*cos_teta;
face_Hz_j0[0][i][k] = (i+0.5)*dx*sin_teta*cos_phi + (-0.5-l_y+1)*dy*sin_teta*sin_phi + k*dz*cos_teta;
face_Hz_j1[0][i][k] = (i+0.5)*dx*sin_teta*cos_phi + 0.5*dy*sin_teta*sin_phi + k*dz*cos_teta;
}
}
//k faces
for (i = 0; i < l_x-1; i++)
{
for (j = 0; j < l_y; j++)
{
face_Ex_k0[0][i][j] = (i+0.5)*dx*sin_teta*cos_phi + (j-l_y+1)*dy*sin_teta*sin_phi;
face_Ex_k1[0][i][j] = (i+0.5)*dx*sin_teta*cos_phi + (j-l_y+1)*dy*sin_teta*sin_phi +(l_z-1)*dz*cos_teta;
face_Hy_k0[0][i][j] = (i+0.5)*dx*sin_teta*cos_phi + (j-l_y+1)*dy*sin_teta*sin_phi - 0.5*dz*cos_teta;
face_Hy_k1[0][i][j] = (i+0.5)*dx*sin_teta*cos_phi + (j-l_y+1)*dy*sin_teta*sin_phi +(l_z-1+0.5)*dz*cos_teta;
}
}
//k faces
for (i = 0; i < l_x; i++)
{
for (j = 0; j < l_y-1; j++)
{
face_Ey_k0[0][i][j] = i*dx*sin_teta*cos_phi + (j+0.5-l_y+1)*dy*sin_teta*sin_phi;
face_Ey_k1[0][i][j] = i*dx*sin_teta*cos_phi + (j+0.5-l_y+1)*dy*sin_teta*sin_phi +(l_z-1)*dz*cos_teta;
face_Hx_k0[0][i][j] = i*dx*sin_teta*cos_phi + (j+0.5-l_y+1)*dy*sin_teta*sin_phi - 0.5*dz*cos_teta;
face_Hx_k1[0][i][j] = i*dx*sin_teta*cos_phi + (j+0.5-l_y+1)*dy*sin_teta*sin_phi +(l_z-1+0.5)*dz*cos_teta;
}
}
}
}
//////////////////////////////////////////////////////////////////////////
// 90 < teta < 180
//////////////////////////////////////////////////////////////////////////
if ( sin_teta > 0 && cos_teta < 0 )
{
//////////////////////////////////////////////////////////////////////////
// 90 < teta < 180; 0 <= phi <= 90
//////////////////////////////////////////////////////////////////////////
if ( sin_phi >= 0 && cos_phi >= 0 )
{
//i faces
for (j = 0; j < l_y; j++)
{
for (k = 0; k < l_z-1; k++)
{
face_Ez_i0[0][j][k] = j*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Ez_i1[0][j][k] = (l_x-1)*dx*sin_teta*cos_phi + j*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Hy_i0[0][j][k] = -0.5*dx*sin_teta*cos_phi + j*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Hy_i1[0][j][k] = (l_x-1+0.5)*dx*sin_teta*cos_phi + j*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
}
}
//i faces
for (j = 0; j < l_y-1; j++)
{
for (k = 0; k < l_z; k++)
{
face_Ey_i0[0][j][k] = (j+0.5)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
face_Ey_i1[0][j][k] = (l_x-1)*dx*sin_teta*cos_phi + (j+0.5)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
face_Hz_i0[0][j][k] = -0.5*dx*sin_teta*cos_phi + (j+0.5)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
face_Hz_i1[0][j][k] = (l_x-1+0.5)*dx*sin_teta*cos_phi + (j+0.5)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
}
}
//j faces
for (i = 0; i < l_x; i++)
{
for (k = 0; k < l_z-1; k++)
{
face_Ez_j0[0][i][k] = i*dx*sin_teta*cos_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Ez_j1[0][i][k] = i*dx*sin_teta*cos_phi + (l_y-1)*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Hx_j0[0][i][k] = i*dx*sin_teta*cos_phi - 0.5*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Hx_j1[0][i][k] = i*dx*sin_teta*cos_phi + (l_y-1+0.5)*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
}
}
//j faces
for (i = 0; i < l_x-1; i++)
{
for (k = 0; k < l_z; k++)
{
face_Ex_j0[0][i][k] = (i+0.5)*dx*sin_teta*cos_phi + (k-l_z+1)*dz*cos_teta;
face_Ex_j1[0][i][k] = (i+0.5)*dx*sin_teta*cos_phi + (l_y-1)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
face_Hz_j0[0][i][k] = (i+0.5)*dx*sin_teta*cos_phi - 0.5*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
face_Hz_j1[0][i][k] = (i+0.5)*dx*sin_teta*cos_phi + (l_y-1+0.5)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
}
}
//k faces
for (i = 0; i < l_x-1; i++)
{
for (j = 0; j < l_y; j++)
{
face_Ex_k0[0][i][j] = (i+0.5)*dx*sin_teta*cos_phi + j*dy*sin_teta*sin_phi +(-l_z+1)*dz*cos_teta;
face_Ex_k1[0][i][j] = (i+0.5)*dx*sin_teta*cos_phi + j*dy*sin_teta*sin_phi;
face_Hy_k0[0][i][j] = (i+0.5)*dx*sin_teta*cos_phi + j*dy*sin_teta*sin_phi +(-0.5-l_z+1)*dz*cos_teta;
face_Hy_k1[0][i][j] = (i+0.5)*dx*sin_teta*cos_phi + j*dy*sin_teta*sin_phi + 0.5*dz*cos_teta;
}
}
//k faces
for (i = 0; i < l_x; i++)
{
for (j = 0; j < l_y-1; j++)
{
face_Ey_k0[0][i][j] = i*dx*sin_teta*cos_phi + (j+0.5)*dy*sin_teta*sin_phi +(-l_z+1)*dz*cos_teta;;
face_Ey_k1[0][i][j] = i*dx*sin_teta*cos_phi + (j+0.5)*dy*sin_teta*sin_phi;
face_Hx_k0[0][i][j] = i*dx*sin_teta*cos_phi + (j+0.5)*dy*sin_teta*sin_phi + (-0.5-l_z+1)*dz*cos_teta;
face_Hx_k1[0][i][j] = i*dx*sin_teta*cos_phi + (j+0.5)*dy*sin_teta*sin_phi + 0.5*dz*cos_teta;
}
}
}
//////////////////////////////////////////////////////////////////////////
// 90 < teta < 180; 90 < phi <= 180
//////////////////////////////////////////////////////////////////////////
if ( sin_phi >= 0 && cos_phi < 0 )
{
//i faces
for (j = 0; j < l_y; j++)
{
for (k = 0; k < l_z-1; k++)
{
face_Ez_i0[0][j][k] = (-l_x+1)*dx*sin_teta*cos_phi + j*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Ez_i1[0][j][k] = j*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Hy_i0[0][j][k] = (-0.5-l_x+1)*dx*sin_teta*cos_phi + j*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Hy_i1[0][j][k] = 0.5*dx*sin_teta*cos_phi + j*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
}
}
//i faces
for (j = 0; j < l_y-1; j++)
{
for (k = 0; k < l_z; k++)
{
face_Ey_i0[0][j][k] = (-l_x+1)*dx*sin_teta*cos_phi + (j+0.5)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
face_Ey_i1[0][j][k] = (j+0.5)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
face_Hz_i0[0][j][k] = (-0.5-l_x+1)*dx*sin_teta*cos_phi + (j+0.5)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
face_Hz_i1[0][j][k] = 0.5*dx*sin_teta*cos_phi + (j+0.5)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
}
}
//j faces
for (i = 0; i < l_x; i++)
{
for (k = 0; k < l_z-1; k++)
{
face_Ez_j0[0][i][k] = (i-l_x+1)*dx*sin_teta*cos_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Ez_j1[0][i][k] = (i-l_x+1)*dx*sin_teta*cos_phi + (l_y-1)*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Hx_j0[0][i][k] = (i-l_x+1)*dx*sin_teta*cos_phi - 0.5*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Hx_j1[0][i][k] = (i-l_x+1)*dx*sin_teta*cos_phi + (l_y-1+0.5)*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
}
}
//j faces
for (i = 0; i < l_x-1; i++)
{
for (k = 0; k < l_z; k++)
{
face_Ex_j0[0][i][k] = (i+0.5-l_x+1)*dx*sin_teta*cos_phi + (k-l_z+1)*dz*cos_teta;
face_Ex_j1[0][i][k] = (i+0.5-l_x+1)*dx*sin_teta*cos_phi + (l_y-1)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
face_Hz_j0[0][i][k] = (i+0.5-l_x+1)*dx*sin_teta*cos_phi - 0.5*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
face_Hz_j1[0][i][k] = (i+0.5-l_x+1)*dx*sin_teta*cos_phi + (l_y-1+0.5)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
}
}
//k faces
for (i = 0; i < l_x-1; i++)
{
for (j = 0; j < l_y; j++)
{
face_Ex_k0[0][i][j] = (i+0.5-l_x+1)*dx*sin_teta*cos_phi + j*dy*sin_teta*sin_phi + (-l_z+1)*dz*cos_teta;
face_Ex_k1[0][i][j] = (i+0.5-l_x+1)*dx*sin_teta*cos_phi + j*dy*sin_teta*sin_phi;
face_Hy_k0[0][i][j] = (i+0.5-l_x+1)*dx*sin_teta*cos_phi + j*dy*sin_teta*sin_phi + (-0.5-l_z+1)*dz*cos_teta;
face_Hy_k1[0][i][j] = (i+0.5-l_x+1)*dx*sin_teta*cos_phi + j*dy*sin_teta*sin_phi + 0.5*dz*cos_teta;
}
}
//k faces
for (i = 0; i < l_x; i++)
{
for (j = 0; j < l_y-1; j++)
{
face_Ey_k0[0][i][j] = (i-l_x+1)*dx*sin_teta*cos_phi + (j+0.5)*dy*sin_teta*sin_phi + (-l_z+1)*dz*cos_teta;
face_Ey_k1[0][i][j] = (i-l_x+1)*dx*sin_teta*cos_phi + (j+0.5)*dy*sin_teta*sin_phi;
face_Hx_k0[0][i][j] = (i-l_x+1)*dx*sin_teta*cos_phi + (j+0.5)*dy*sin_teta*sin_phi + (-0.5-l_z+1)*dz*cos_teta;
face_Hx_k1[0][i][j] = (i-l_x+1)*dx*sin_teta*cos_phi + (j+0.5)*dy*sin_teta*sin_phi + 0.5*dz*cos_teta;
}
}
}
//////////////////////////////////////////////////////////////////////////
// 90 < teta < 180; 180 < phi <= 270
//////////////////////////////////////////////////////////////////////////
if ( sin_phi < 0 && cos_phi <= 0 )
{
//i faces
for (j = 0; j < l_y; j++)
{
for (k = 0; k < l_z-1; k++)
{
face_Ez_i0[0][j][k] = (-l_x+1)*dx*sin_teta*cos_phi + (j-l_y+1)*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Ez_i1[0][j][k] = (j-l_y+1)*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Hy_i0[0][j][k] = (-0.5-l_x+1)*dx*sin_teta*cos_phi + (j-l_y+1)*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Hy_i1[0][j][k] = 0.5*dx*sin_teta*cos_phi + (j-l_y+1)*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
}
}
//i faces
for (j = 0; j < l_y-1; j++)
{
for (k = 0; k < l_z; k++)
{
face_Ey_i0[0][j][k] = (-l_x+1)*dx*sin_teta*cos_phi + (j+0.5-l_y+1)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
face_Ey_i1[0][j][k] = (j+0.5-l_y+1)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
face_Hz_i0[0][j][k] = (-0.5-l_x+1)*dx*sin_teta*cos_phi + (j+0.5-l_y+1)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
face_Hz_i1[0][j][k] = 0.5*dx*sin_teta*cos_phi + (j+0.5-l_y+1)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
}
}
//j faces
for (i = 0; i < l_x; i++)
{
for (k = 0; k < l_z-1; k++)
{
face_Ez_j0[0][i][k] = (i-l_x+1)*dx*sin_teta*cos_phi + (-l_y+1)*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Ez_j1[0][i][k] = (i-l_x+1)*dx*sin_teta*cos_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Hx_j0[0][i][k] = (i-l_x+1)*dx*sin_teta*cos_phi + (-0.5-l_y+1) *dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
face_Hx_j1[0][i][k] = (i-l_x+1)*dx*sin_teta*cos_phi + 0.5*dy*sin_teta*sin_phi + (k+0.5-l_z+1)*dz*cos_teta;
}
}
//j faces
for (i = 0; i < l_x-1; i++)
{
for (k = 0; k < l_z; k++)
{
face_Ex_j0[0][i][k] = (i+0.5-l_x+1)*dx*sin_teta*cos_phi + (-l_y+1)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
face_Ex_j1[0][i][k] = (i+0.5-l_x+1)*dx*sin_teta*cos_phi + (k-l_z+1)*dz*cos_teta;
face_Hz_j0[0][i][k] = (i+0.5-l_x+1)*dx*sin_teta*cos_phi + (-0.5-l_y+1)*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
face_Hz_j1[0][i][k] = (i+0.5-l_x+1)*dx*sin_teta*cos_phi + 0.5*dy*sin_teta*sin_phi + (k-l_z+1)*dz*cos_teta;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -