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

📄 timeupdate.c

📁 program FDTD for the photonic crystal structure
💻 C
📖 第 1 页 / 共 2 页
字号:
		{
			Ex[cisize][j][k]=Ex[cisize-1][j][k];
			Ey[cisize][j][k]=0.0;
			Ez[cisize][j][k]=0.0;
		}
	}

	if(xparity==-1)
	{
		for(j=1;j<pjsize;j++)
		for(k=1;k<pksize;k++)
			Ex[cisize][j][k]=-Ex[cisize-1][j][k];
	}
	
	if(yparity==1)
	{
		for(k=1;k<pksize;k++)
		for(i=1;i<pisize;i++)
		{
			Ey[i][cjsize][k]=Ey[i][cjsize-1][k];
			Ex[i][cjsize][k]=0.0;
			Ez[i][cjsize][k]=0.0;
		}
	}

	if(yparity==-1)
	{
		for(k=1;k<pksize;k++)
		for(i=1;i<pisize;i++)
			Ey[i][cjsize][k]=-Ey[i][cjsize-1][k];
	}

	if(zparity==1)
	{
		for(i=1;i<pisize;i++)
		for(j=1;j<pjsize;j++)
		{
			Ez[i][j][cksize]=Ez[i][j][cksize-1];
			Ex[i][j][cksize]=0.0;
			Ey[i][j][cksize]=0.0;
		}
	}

	if(zparity==-1)
	{
		for(i=1;i<pisize;i++)
		for(j=1;j<pjsize;j++)
			Ez[i][j][cksize]=-Ez[i][j][cksize-1];
	}
}

void Ez_parity_iboundary_update()
{
	int i,j,k;

	if(xparity==1)  //xparity is for Hz_parity
	{
		for(j=1;j<pjsize;j++)
		for(k=1;k<pksize;k++)
		{
			iEx[cisize][j][k]=iEx[cisize-1][j][k];
			iEy[cisize][j][k]=0.0;
			iEz[cisize][j][k]=0.0;
		}
	}

	if(xparity==-1)
	{
		for(j=1;j<pjsize;j++)
		for(k=1;k<pksize;k++)
			iEx[cisize][j][k]=-iEx[cisize-1][j][k];
	}
	
	if(yparity==1)
	{
		for(k=1;k<pksize;k++)
		for(i=1;i<pisize;i++)
		{
			iEy[i][cjsize][k]=iEy[i][cjsize-1][k];
			iEx[i][cjsize][k]=0.0;
			iEz[i][cjsize][k]=0.0;
		}
	}

	if(yparity==-1)
	{
		for(k=1;k<pksize;k++)
		for(i=1;i<pisize;i++)
			iEy[i][cjsize][k]=-iEy[i][cjsize-1][k];
	}

	if(zparity==1)
	{
		for(i=1;i<pisize;i++)
		for(j=1;j<pjsize;j++)
		{
			iEz[i][j][cksize]=iEz[i][j][cksize-1];
			iEx[i][j][cksize]=0.0;
			iEy[i][j][cksize]=0.0;
		}
	}

	if(zparity==-1)
	{
		for(i=1;i<pisize;i++)
		for(j=1;j<pjsize;j++)
			iEz[i][j][cksize]=-iEz[i][j][cksize-1];
	}
}

void Hz_parity_boundary_update()
{
	int i,j,k;

	if(xparity==1)
	{
		for(j=1;j<pjsize;j++)
		for(k=1;k<pksize;k++)
		{
			Hy[cisize][j][k]=Hy[cisize-1][j][k];
			Hz[cisize][j][k]=Hz[cisize-1][j][k];
			Hx[cisize][j][k]=0.0;
		}
	}
	if(xparity==-1)
	{
		for(j=1;j<pjsize;j++)
		for(k=1;k<pksize;k++)
		{
			Hy[cisize][j][k]=-Hy[cisize-1][j][k];
			Hz[cisize][j][k]=-Hz[cisize-1][j][k];
		}
	}
	
	if(yparity==1)
	{
		for(k=1;k<pksize;k++)
		for(i=1;i<pisize;i++)
		{
			Hz[i][cjsize][k]=Hz[i][cjsize-1][k];
			Hx[i][cjsize][k]=Hx[i][cjsize-1][k];
			Hy[i][cjsize][k]=0.0;
		}
	}
	if(yparity==-1)
	{
		for(k=1;k<pksize;k++)
		for(i=1;i<pisize;i++)
		{
			Hz[i][cjsize][k]=-Hz[i][cjsize-1][k];
			Hx[i][cjsize][k]=-Hx[i][cjsize-1][k];
		}
	}

	if(zparity==1)
	{
		for(i=1;i<pisize;i++)
		for(j=1;j<pjsize;j++)
		{
			Hx[i][j][cksize]=Hx[i][j][cksize-1];
			Hy[i][j][cksize]=Hy[i][j][cksize-1];
			Hz[i][j][cksize]=0.0;
		}
	}
	if(zparity==-1)
	{
		for(i=1;i<pisize;i++)
		for(j=1;j<pjsize;j++)
		{
			Hx[i][j][cksize]=-Hx[i][j][cksize-1];
			Hy[i][j][cksize]=-Hy[i][j][cksize-1];
		}
	}
}

void Hz_parity_iboundary_update()
{
	int i,j,k;

	if(xparity==1)
	{
		for(j=1;j<pjsize;j++)
		for(k=1;k<pksize;k++)
		{
			iHy[cisize][j][k]=iHy[cisize-1][j][k];
			iHz[cisize][j][k]=iHz[cisize-1][j][k];
			iHx[cisize][j][k]=0.0;
		}
	}
	if(xparity==-1)
	{
		for(j=1;j<pjsize;j++)
		for(k=1;k<pksize;k++)
		{
			iHy[cisize][j][k]=-iHy[cisize-1][j][k];
			iHz[cisize][j][k]=-iHz[cisize-1][j][k];
		}
	}
	
	if(yparity==1)
	{
		for(k=1;k<pksize;k++)
		for(i=1;i<pisize;i++)
		{
			iHz[i][cjsize][k]=iHz[i][cjsize-1][k];
			iHx[i][cjsize][k]=iHx[i][cjsize-1][k];
			iHy[i][cjsize][k]=0.0;
		}
	}
	if(yparity==-1)
	{
		for(k=1;k<pksize;k++)
		for(i=1;i<pisize;i++)
		{
			iHz[i][cjsize][k]=-iHz[i][cjsize-1][k];
			iHx[i][cjsize][k]=-iHx[i][cjsize-1][k];
		}
	}

	if(zparity==1)
	{
		for(i=1;i<pisize;i++)
		for(j=1;j<pjsize;j++)
		{
			iHx[i][j][cksize]=iHx[i][j][cksize-1];
			iHy[i][j][cksize]=iHy[i][j][cksize-1];
			iHz[i][j][cksize]=0.0;
		}
	}
	if(zparity==-1)
	{
		for(i=1;i<pisize;i++)
		for(j=1;j<pjsize;j++)
		{
			iHx[i][j][cksize]=-iHx[i][j][cksize-1];
			iHy[i][j][cksize]=-iHy[i][j][cksize-1];
		}
	}
}

void E_field_periodic_boundary_update_x()
{
	int j,k;

	for(j=1;j<pjsize;j++)
	for(k=1;k<pksize;k++)
	{
		Ex[0][j][k]=Ex[isize][j][k]*cos(wave_vector_x*2*pi)+iEx[isize][j][k]*sin(wave_vector_x*2*pi);
		Ey[isize+1][j][k]=Ey[1][j][k]*cos(wave_vector_x*2*pi)-iEy[1][j][k]*sin(wave_vector_x*2*pi);
		Ez[isize+1][j][k]=Ez[1][j][k]*cos(wave_vector_x*2*pi)-iEz[1][j][k]*sin(wave_vector_x*2*pi);

		iEx[0][j][k]=-Ex[isize][j][k]*sin(wave_vector_x*2*pi)+iEx[isize][j][k]*cos(wave_vector_x*2*pi);
		iEy[isize+1][j][k]=Ey[1][j][k]*sin(wave_vector_x*2*pi)+iEy[1][j][k]*cos(wave_vector_x*2*pi);
		iEz[isize+1][j][k]=Ez[1][j][k]*sin(wave_vector_x*2*pi)+iEz[1][j][k]*cos(wave_vector_x*2*pi);
	}
}

void E_field_periodic_boundary_update_y()
{
	int i,k;

	for(i=1;i<pisize;i++)
	for(k=1;k<pksize;k++)
	{
		Ey[i][0][k]=Ey[i][jsize][k]*cos(wave_vector_y*2*pi)+iEy[i][jsize][k]*sin(wave_vector_y*2*pi);
		Ex[i][jsize+1][k]=Ex[i][1][k]*cos(wave_vector_y*2*pi)-iEx[i][1][k]*sin(wave_vector_y*2*pi);
		Ez[i][jsize+1][k]=Ez[i][1][k]*cos(wave_vector_y*2*pi)-iEz[i][1][k]*sin(wave_vector_y*2*pi);

		iEy[i][0][k]=-Ey[i][jsize][k]*sin(wave_vector_y*2*pi)+iEy[i][jsize][k]*cos(wave_vector_y*2*pi);
		iEx[i][jsize+1][k]=Ex[i][1][k]*sin(wave_vector_y*2*pi)+iEx[i][1][k]*cos(wave_vector_y*2*pi);
		iEz[i][jsize+1][k]=Ez[i][1][k]*sin(wave_vector_y*2*pi)+iEz[i][1][k]*cos(wave_vector_y*2*pi);
	}
}

void H_field_periodic_boundary_update_x()
{
	int j,k;

	for(j=1;j<pjsize;j++)
	for(k=1;k<pksize;k++)
	{
		Hx[isize+1][j][k]=Hx[1][j][k]*cos(wave_vector_x*2*pi)-iHx[1][j][k]*sin(wave_vector_x*2*pi);
		Hy[0][j][k]=Hy[isize][j][k]*cos(wave_vector_x*2*pi)+iHy[isize][j][k]*sin(wave_vector_x*2*pi);
		Hz[0][j][k]=Hz[isize][j][k]*cos(wave_vector_x*2*pi)+iHz[isize][j][k]*sin(wave_vector_x*2*pi);

		iHx[isize+1][j][k]=Hx[1][j][k]*sin(wave_vector_x*2*pi)+iHx[1][j][k]*cos(wave_vector_x*2*pi);
		iHy[0][j][k]=-Hy[isize][j][k]*sin(wave_vector_x*2*pi)+iHy[isize][j][k]*cos(wave_vector_x*2*pi);
		iHz[0][j][k]=-Hz[isize][j][k]*sin(wave_vector_x*2*pi)+iHz[isize][j][k]*cos(wave_vector_x*2*pi);
	}
}

void H_field_periodic_boundary_update_y()
{
	int i,k;

	for(i=1;i<pisize;i++)
	for(k=1;k<pksize;k++)
	{
		Hy[i][jsize+1][k]=Hy[i][1][k]*cos(wave_vector_y*2*pi)-iHy[i][1][k]*sin(wave_vector_y*2*pi);
		Hx[i][0][k]=Hx[i][jsize][k]*cos(wave_vector_y*2*pi)+iHx[i][jsize][k]*sin(wave_vector_y*2*pi);
		Hz[i][0][k]=Hz[i][jsize][k]*cos(wave_vector_y*2*pi)+iHz[i][jsize][k]*sin(wave_vector_y*2*pi);

		iHy[i][jsize+1][k]=Hy[i][1][k]*sin(wave_vector_y*2*pi)+iHy[i][1][k]*cos(wave_vector_y*2*pi);
		iHx[i][0][k]=-Hx[i][jsize][k]*sin(wave_vector_y*2*pi)+iHx[i][jsize][k]*cos(wave_vector_y*2*pi);
		iHz[i][0][k]=-Hz[i][jsize][k]*sin(wave_vector_y*2*pi)+iHz[i][jsize][k]*cos(wave_vector_y*2*pi);
	}
}

void E_field_Gamma_boundary_update_x()
{
	int j,k;

	for(j=1;j<pjsize;j++)
	for(k=1;k<pksize;k++)
	{
		Ex[0][j][k]=Ex[isize][j][k];
		Ey[isize+1][j][k]=Ey[1][j][k];
		Ez[isize+1][j][k]=Ez[1][j][k];
	}
}

void E_field_Gamma_boundary_update_y()
{
	int i,k;

	for(i=1;i<pisize;i++)
	for(k=1;k<pksize;k++)
	{
		Ey[i][0][k]=Ey[i][jsize][k];
		Ex[i][jsize+1][k]=Ex[i][1][k];
		Ez[i][jsize+1][k]=Ez[i][1][k];
	}
}

void H_field_Gamma_boundary_update_x()
{
	int j,k;

	for(j=1;j<pjsize;j++)
	for(k=1;k<pksize;k++)
	{
		Hx[isize+1][j][k]=Hx[1][j][k];
		Hy[0][j][k]=Hy[isize][j][k];
		Hz[0][j][k]=Hz[isize][j][k];
	}
}

void H_field_Gamma_boundary_update_y()
{
	int i,k;

	for(i=1;i<pisize;i++)
	for(k=1;k<pksize;k++)
	{
		Hy[i][jsize+1][k]=Hy[i][1][k];
		Hx[i][0][k]=Hx[i][jsize][k];
		Hz[i][0][k]=Hz[i][jsize][k];
	}
}

void field_initialization()
{
	field_zero(Ex); field_zero(Ey); field_zero(Ez);
	field_zero(Jx); field_zero(Jy); field_zero(Jz);
	field_zero(Hx); field_zero(Hy); field_zero(Hz);
	field_zero(Dx); field_zero(Dy); field_zero(Dz);
	field_zero(Bx); field_zero(By); field_zero(Bz);

	if((use_periodic_x == 1 || use_periodic_y == 1) && (wave_vector_x!=0.0 || wave_vector_y!=0.0))
	{
		field_zero(iEx); field_zero(iEy); field_zero(iEz);
		field_zero(iJx); field_zero(iJy); field_zero(iJz);
		field_zero(iHx); field_zero(iHy); field_zero(iHz);
		field_zero(iDx); field_zero(iDy); field_zero(iDz);
		field_zero(iBx); field_zero(iBy); field_zero(iBz);
	}
}

void field_zero(float ***name)
{
	int i,j,k;

	for(i=0;i<misize;i++)
		for(j=0;j<mjsize;j++)
			for(k=0;k<mksize;k++)
				name[i][j][k]=0;
}

⌨️ 快捷键说明

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