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

📄 fdtd_3d.cpp

📁 利用c++语言写的三维FDTD
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			}

			//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 + -