📄 并行源程序.txt
字号:
y1=ez2[i1][j][k]-ez2[i][j][k]+ex2[i][j][k]-ex2[i][j][k1];
hy2[i][j][k]=hy2[i][j][k]+dt/(u*dr)*y1;
z1=ex2[i][j1][k]-ex2[i][j][k]+ey2[i][j][k]-ey2[i1][j][k];
hz2[i][j][k]=hz2[i][j][k]+dt/(u*dr)*z1; }
}
///////////////////////////////////////////////////////////////////////////////////////
//计算大区域电场
void bigarea_e() {
int i,j,k,i1,j1,k1;
float e,x1,y1,z1;
for(i=1;i<=X1-1;i++)
for(j=1;j<=Y-1;j++)
for(k=1;k<=Z1-1;k++)
{if((i>30 && i<50)&&(j>32 && j<50)&&(k>2 && k<24)) e=E2;
else e=E1;
i1=i-1;
j1=j-1;
k1=k-1;
x1=hz1[i][j][k]-hz1[i][j1][k]+hy1[i][j][k1]-hy1[i][j][k];
ex1[i][j][k]=ex1[i][j][k]+dt/(e*dr)*x1;
y1=hx1[i][j][k]-hx1[i][j][k1]+hz1[i1][j][k]-hz1[i][j][k];
ey1[i][j][k]=ey1[i][j][k]+dt/(e*dr)*y1;
z1=hy1[i][j][k]-hy1[i1][j][k]+hx1[i][j1][k]-hx1[i][j][k];
ez1[i][j][k]=ez1[i][j][k]+dt/(e*dr)*z1;
if ((i==30 || i==50) && k<=35 )
{ey1[i][j][k]=0;
ez1[i][j][k]=0; }
if((i>30 && i<50)&&(j>=32 && j<=50)&&(k==2 || k==24))
{ex1[i][j][k]=(ex1[i][j][k-1]+ex1[i][j][k+1])/2;
ey1[i][j][k]=(ey1[i][j][k-1]+ey1[i][j][k+1])/2;
ez1[i][j][k]=(ez1[i][j][k-1]+ez1[i][j][k+1])/2;}
if((i>30 && i<50)&&(k>=2 && k<=24)&&(j==32 || j==50))
{ex1[i][j][k]=(ex1[i][j-1][k]+ex1[i][j+1][k])/2;
ey1[i][j][k]=(ey1[i][j-1][k]+ey1[i][j+1][k])/2;
ez1[i][j][k]=(ez1[i][j-1][k]+ez1[i][j+1][k])/2;}
if ((i>=31 && i<=34) && j==50 && k==13)
{ ex1[i][j][k]=0; }
}
}
///////////////////////////////////////////////////////////////////////////////////////////////
//计算小区域电场
void smallarea_e() {
int i,j,k,i1,j1,k1;
float e=E1,x1,y1,z1;
for(j=0;j<=Y;j++)
for(k=1;k<=Z2;k++)
{ex2[X2][j][k]=0;
ey2[X2][j][k]=0;
ez2[X2][j][k]=0;}
for(i=0;i<=X2-1;i++)
for(j=1;j<=Y-1;j++)
for(k=0;k<=Z2-1;k++)
{if (i==0)
{j1=j-1;
k1=k+1;
x1=hz2[i][j][k]-hz2[i][j1][k]+hy2[i][j][k1]-hy2[i][j][k];
ex2[i][j][k]=ex2[i][j][k]+dt/(e*dr)*x1;
ey2[0][j][k]=0;
ez2[0][j][k]=0;}
else {i1=i-1;
j1=j-1;
k1=k+1;
x1=hz2[i][j][k]-hz2[i][j1][k]+hy2[i][j][k1]-hy2[i][j][k];
ex2[i][j][k]=ex2[i][j][k]+dt/(e*dr)*x1;
y1=hx2[i][j][k]-hx2[i][j][k1]+hz2[i1][j][k]-hz2[i][j][k];
ey2[i][j][k]=ey2[i][j][k]+dt/(e*dr)*y1;
z1=hy2[i][j][k]-hy2[i1][j][k]+hx2[i][j1][k]-hx2[i][j][k];
ez2[i][j][k]=ez2[i][j][k]+dt/(e*dr)*z1;} }
}
/////////////////////////////////////////////////////////////////////////////
void Send_h1(){
int i,j;
for(i=0;i<=X2;i++)
for(j=0;j<=Y;j++)
{
S_hx1[i][j]=hx1[i+30][j][0];
S_hy1[i][j]=hy1[i+30][j][0];
S_hz1[i][j]=hz1[i+30][j][0];
}
MPI_Send(&S_hx1[0][0],(X2+1)*(Y+1),MPI_FLOAT,1,1111,MPI_COMM_WORLD);
MPI_Send(&S_hy1[0][0],(X2+1)*(Y+1),MPI_FLOAT,1,2222,MPI_COMM_WORLD);
MPI_Send(&S_hz1[0][0],(X2+1)*(Y+1),MPI_FLOAT,1,3333,MPI_COMM_WORLD);
}
void Recv_h2() {
int i,j;
MPI_Recv(&R_hx2[0][0], (X2+1)*(Y+1),MPI_FLOAT,0,1111,MPI_COMM_WORLD,&status);
MPI_Recv(&R_hy2[0][0], (X2+1)*(Y+1),MPI_FLOAT,0,2222,MPI_COMM_WORLD,&status);
MPI_Recv(&R_hz2[0][0], (X2+1)*(Y+1),MPI_FLOAT,0,3333,MPI_COMM_WORLD,&status);
for(i=0;i<=X2;i++)
for(j=0;j<=Y;j++)
{
hx2[i][j][0]=R_hx2[i][j];
hy2[i][j][0]=R_hy2[i][j];
hz2[i][j][0]=R_hz2[i][j];
}
}
void Recv_e1(){
int i,j;
MPI_Recv(R_ex1, (X2+1)*(Y+1),MPI_FLOAT,1,4444,MPI_COMM_WORLD,&status);
MPI_Recv(R_ey1, (X2+1)*(Y+1),MPI_FLOAT,1,5555,MPI_COMM_WORLD,&status);
MPI_Recv(R_ez1, (X2+1)*(Y+1),MPI_FLOAT,1,6666,MPI_COMM_WORLD,&status);
for(i=30;i<=50;i++)
for(j=0;j<=Y;j++)
{
ex1[i][j][0]=R_ex1[i-30][j];
ey1[i][j][0]=R_ey1[i-30][j];
ez1[i][j][0]=R_ez1[i-30][j];}
}
void Send_e2(){
int i,j;
for(i=0;i<=Z2;i++)
for(j=0;j<=Y;j++)
{ S_ex2[i][j]=ex2[i][j][0];
S_ey2[i][j]=ey2[i][j][0];
S_ez2[i][j]=ez2[i][j][0]; }
MPI_Send(&S_ex2[0][0], (X2+1)*(Y+1),MPI_FLOAT,0,4444,MPI_COMM_WORLD);
MPI_Send(&S_ey2[0][0], (X2+1)*(Y+1),MPI_FLOAT,0,5555,MPI_COMM_WORLD);
MPI_Send(&S_ez2[0][0], (X2+1)*(Y+1),MPI_FLOAT,0,6666,MPI_COMM_WORLD);
}
void Send_MY(){
int i,k;
for(i=0;i<X2;i++)
for(k=0;k<=Z2;k++)
{
S_MY00_ex2[i][k]=ex2[i][1][k];
S_MY00_ez2[i][k]=ez2[i][1][k];
S_MY01_ex2[i][k]=ex2[i][0][k];
S_MY01_ez2[i][k]=ez2[i][0][k];
S_MYY0_ex2[i][k]=ex2[i][Y-1][k];
S_MYY0_ez2[i][k]=ez2[i][Y-1][k];
S_MYY1_ex2[i][k]=ex2[i][Y][k];
S_MYY1_ez2[i][k]=ez2[i][Y][k];
}
MPI_Send(S_MY00_ex2, (X2+1)*(Z2+1),MPI_FLOAT,0,9900,MPI_COMM_WORLD);
MPI_Send(S_MY00_ez2, (X2+1)*(Z2+1),MPI_FLOAT,0,9901,MPI_COMM_WORLD);
MPI_Send(S_MY01_ex2, (X2+1)*(Z2+1),MPI_FLOAT,0,9902,MPI_COMM_WORLD);
MPI_Send(S_MY01_ez2, (X2+1)*(Z2+1),MPI_FLOAT,0,9903,MPI_COMM_WORLD);
MPI_Send(S_MYY0_ex2, (X2+1)*(Z2+1),MPI_FLOAT,0,9904,MPI_COMM_WORLD);
MPI_Send(S_MYY0_ez2, (X2+1)*(Z2+1),MPI_FLOAT,0,9905,MPI_COMM_WORLD);
MPI_Send(S_MYY1_ex2, (X2+1)*(Z2+1),MPI_FLOAT,0,9906,MPI_COMM_WORLD);
MPI_Send(S_MYY1_ez2, (X2+1)*(Z2+1),MPI_FLOAT,0,9907,MPI_COMM_WORLD);
}
void Send_MZ(){
int i,j;
for(i=0;i<=X2;i++)
for(j=0;j<=Y;j++)
{
S_MZ00_ex2[i][j]=ex2[i][j][Z2-1];
S_MZ00_ey2[i][j]=ey2[i][j][Z2-1];
S_MZ01_ex2[i][j]=ex2[i][j][Z2];
S_MZ01_ey2[i][j]=ey2[i][j][Z2];
}
MPI_Send(S_MZ00_ex2, (X2+1)*(Y+1),MPI_FLOAT,0,9910,MPI_COMM_WORLD);
MPI_Send(S_MZ00_ey2, (X2+1)*(Y+1),MPI_FLOAT,0,9911,MPI_COMM_WORLD);
MPI_Send(S_MZ01_ex2, (X2+1)*(Y+1),MPI_FLOAT,0,9912,MPI_COMM_WORLD);
MPI_Send(S_MZ01_ey2, (X2+1)*(Y+1),MPI_FLOAT,0,9913,MPI_COMM_WORLD);
}
void Send_LX(){
int i;
for(i=1;i<=X2-1;i++)
{
S_LX00_ex2[i-1]=ex2[i][i][Z2];
S_LX00_ey2[i-1]=ey2[i][i][Z2];
S_LX00_ez2[i-1]=ez2[i][i][Z2];
}
for(i=1;i<=X2-1;i++)
{
S_LX01_ex2[i-1]=ex2[i][Y-i][Z2];
S_LX01_ey2[i-1]=ey2[i][Y-i][Z2];
S_LX01_ez2[i-1]=ez2[i][Y-i][Z2];
}
MPI_Send(S_LX00_ex2,(X2-1),MPI_FLOAT,0,9920,MPI_COMM_WORLD);
MPI_Send(S_LX00_ey2,(X2-1),MPI_FLOAT,0,9921,MPI_COMM_WORLD);
MPI_Send(S_LX00_ez2,(X2-1),MPI_FLOAT,0,9922,MPI_COMM_WORLD);
MPI_Send(S_LX01_ex2,(X2-1),MPI_FLOAT,0,9923,MPI_COMM_WORLD);
MPI_Send(S_LX01_ey2,(X2-1),MPI_FLOAT,0,9924,MPI_COMM_WORLD);
MPI_Send(S_LX01_ez2,(X2-1),MPI_FLOAT,0,9925,MPI_COMM_WORLD);
}
void Recv_MY(){
int i,k;
MPI_Recv(R_MY00_ex2, (X2+1)*(Z2+1),MPI_FLOAT,1,9900,MPI_COMM_WORLD,&status);
MPI_Recv(R_MY00_ez2, (X2+1)*(Z2+1),MPI_FLOAT,1,9901,MPI_COMM_WORLD,&status);
MPI_Recv(R_MY01_ex2, (X2+1)*(Z2+1),MPI_FLOAT,1,9902,MPI_COMM_WORLD,&status);
MPI_Recv(R_MY01_ez2, (X2+1)*(Z2+1),MPI_FLOAT,1,9903,MPI_COMM_WORLD,&status);
MPI_Recv(R_MYY0_ex2, (X2+1)*(Z2+1),MPI_FLOAT,1,9904,MPI_COMM_WORLD,&status);
MPI_Recv(R_MYY0_ez2, (X2+1)*(Z2+1),MPI_FLOAT,1,9905,MPI_COMM_WORLD,&status);
MPI_Recv(R_MYY1_ex2, (X2+1)*(Z2+1),MPI_FLOAT,1,9906,MPI_COMM_WORLD,&status);
MPI_Recv(R_MYY1_ez2, (X2+1)*(Z2+1),MPI_FLOAT,1,9907,MPI_COMM_WORLD,&status);
for(i=0;i<X2;i++)
for(k=0;k<=Z2;k++)
{
ex2[i][1][k]=R_MY00_ex2[i][k];
ez2[i][1][k]=R_MY00_ez2[i][k];
ex2[i][0][k]=R_MY01_ex2[i][k];
ez2[i][0][k]=R_MY01_ez2[i][k];
ex2[i][Y-1][k]=R_MYY0_ex2[i][k];
ez2[i][Y-1][k]=R_MYY0_ez2[i][k];
ex2[i][Y][k]=R_MYY1_ex2[i][k];
ez2[i][Y][k]=R_MYY1_ez2[i][k];
}
}
void Recv_MZ(){
int i,j;
MPI_Recv(R_MZ00_ex2, (X2+1)*(Y+1),MPI_FLOAT,1,9910,MPI_COMM_WORLD,&status);
MPI_Recv(R_MZ00_ey2, (X2+1)*(Y+1),MPI_FLOAT,1,9911,MPI_COMM_WORLD,&status);
MPI_Recv(R_MZ01_ex2, (X2+1)*(Y+1),MPI_FLOAT,1,9912,MPI_COMM_WORLD,&status);
MPI_Recv(R_MZ01_ey2, (X2+1)*(Y+1),MPI_FLOAT,1,9913,MPI_COMM_WORLD,&status);
for(i=0;i<=X2;i++)
for(j=0;j<=Y;j++)
{
ex2[i][j][Z2-1]=R_MZ00_ex2[i][j];
ey2[i][j][Z2-1]=R_MZ00_ey2[i][j];
ex2[i][j][Z2]=R_MZ01_ex2[i][j];
ey2[i][j][Z2]=R_MZ01_ey2[i][j];
}
}
void Recv_LX(){
int i;
MPI_Recv(R_LX00_ex2,(X2-1),MPI_FLOAT,1,9920,MPI_COMM_WORLD,&status);
MPI_Recv(R_LX00_ey2,(X2-1),MPI_FLOAT,1,9921,MPI_COMM_WORLD,&status);
MPI_Recv(R_LX00_ez2,(X2-1),MPI_FLOAT,1,9922,MPI_COMM_WORLD,&status);
MPI_Recv(R_LX01_ex2,(X2-1),MPI_FLOAT,1,9923,MPI_COMM_WORLD,&status);
MPI_Recv(R_LX01_ey2,(X2-1),MPI_FLOAT,1,9924,MPI_COMM_WORLD,&status);
MPI_Recv(R_LX01_ez2,(X2-1),MPI_FLOAT,1,9925,MPI_COMM_WORLD,&status);
for(i=1;i<=X2-1;i++)
{
ex2[i][i][Z2]=R_LX00_ex2[i-1];
ey2[i][i][Z2]=R_LX00_ey2[i-1];
ez2[i][i][Z2]=R_LX00_ez2[i-1];
}
for(i=1;i<=X2-1;i++)
{
ex2[i][Y-i][Z2]=R_LX01_ex2[i-1];
ey2[i][Y-i][Z2]=R_LX01_ey2[i-1];
ez2[i][Y-i][Z2]=R_LX01_ez2[i-1];
}
}
void Send_MY1(){
int i,k;
for(i=1;i<=X2-1;i++)
for(k=0;k<=Z2-1;k++)
{
S_MY20_ex2[i-1][k]=ex2[i][0][k];
S_MY20_ez2[i-1][k]=ez2[i][0][k];
S_MY30_ex2[i-1][k]=ex2[i][Y][k];
S_MY30_ez2[i-1][k]=ez2[i][Y][k];
}
MPI_Send(S_MY20_ex2, (X2-1)*(Z2),MPI_FLOAT,1,9930,MPI_COMM_WORLD);
MPI_Send(S_MY20_ez2, (X2-1)*(Z2),MPI_FLOAT,1,9931,MPI_COMM_WORLD);
MPI_Send(S_MY30_ex2, (X2-1)*(Z2),MPI_FLOAT,1,9932,MPI_COMM_WORLD);
MPI_Send(S_MY30_ez2, (X2-1)*(Z2),MPI_FLOAT,1,9933,MPI_COMM_WORLD);
}
void Send_MZ1(){
int i,j;
for(i=1;i<=X2-1;i++)
for(j=1;j<=Y-1;j++)
{
S_MZ20_ex2[i-1][j-1]=ex2[i][j][Z2];
S_MZ20_ey2[i-1][j-1]=ey2[i][j][Z2];
}
MPI_Send(S_MZ20_ex2, (X2-1)*(Y-1),MPI_FLOAT,1,9940,MPI_COMM_WORLD);
MPI_Send(S_MZ20_ey2, (X2-1)*(Y-1),MPI_FLOAT,1,9941,MPI_COMM_WORLD);
}
void Send_LX1(){
int i;
for(i=1;i<=X2-1;i++)
{
S_LX20_ex2[i-1]=ex2[i][0][Z2];
S_LX20_ey2[i-1]=ey2[i][0][Z2];
S_LX20_ez2[i-1]=ez2[i][0][Z2];
S_LX21_ex2[i-1]=ex2[i][Y][Z2];
S_LX21_ey2[i-1]=ey2[i][Y][Z2];
S_LX21_ez2[i-1]=ez2[i][Y][Z2];
}
MPI_Send(S_LX20_ex2, (X2-1),MPI_FLOAT,1,9950,MPI_COMM_WORLD);
MPI_Send(S_LX20_ey2, (X2-1),MPI_FLOAT,1,9951,MPI_COMM_WORLD);
MPI_Send(S_LX20_ez2, (X2-1),MPI_FLOAT,1,9952,MPI_COMM_WORLD);
MPI_Send(S_LX21_ex2, (X2-1),MPI_FLOAT,1,9953,MPI_COMM_WORLD);
MPI_Send(S_LX21_ey2, (X2-1),MPI_FLOAT,1,9954,MPI_COMM_WORLD);
MPI_Send(S_LX21_ez2, (X2-1),MPI_FLOAT,1,9955,MPI_COMM_WORLD);
}
void Recv_MY1(){
int i,k;
MPI_Recv(R_MY20_ex2, (X2-1)*(Z2),MPI_FLOAT,0,9930,MPI_COMM_WORLD,&status);
MPI_Recv(R_MY20_ez2, (X2-1)*(Z2),MPI_FLOAT,0,9931,MPI_COMM_WORLD,&status);
MPI_Recv(R_MY30_ex2, (X2-1)*(Z2),MPI_FLOAT,0,9932,MPI_COMM_WORLD,&status);
MPI_Recv(R_MY30_ez2, (X2-1)*(Z2),MPI_FLOAT,0,9933,MPI_COMM_WORLD,&status);
for(i=1;i<=X2-1;i++)
for(k=0;k<=Z2-1;k++)
{
ex2[i][0][k]=R_MY20_ex2[i-1][k];
ez2[i][0][k]=R_MY20_ez2[i-1][k];
ex2[i][Y][k]=R_MY30_ex2[i-1][k];
ez2[i][Y][k]=R_MY30_ez2[i-1][k];
}
}
void Recv_MZ1(){
int i,j;
MPI_Recv(R_MZ20_ex2, (X2-1)*(Y-1),MPI_FLOAT,0,9940,MPI_COMM_WORLD,&status);
MPI_Recv(R_MZ20_ey2, (X2-1)*(Y-1),MPI_FLOAT,0,9941,MPI_COMM_WORLD,&status);
for(i=1;i<=X2-1;i++)
for(j=1;j<=Y-1;j++)
{
ex2[i][j][Z2]=R_MZ20_ex2[i-1][j-1];
ey2[i][j][Z2]=R_MZ20_ey2[i-1][j-1];
}
}
void Recv_LX1(){
int i;
MPI_Recv(R_LX20_ex2, (X2-1),MPI_FLOAT,0,9950,MPI_COMM_WORLD,&status);
MPI_Recv(R_LX20_ey2, (X2-1),MPI_FLOAT,0,9951,MPI_COMM_WORLD,&status);
MPI_Recv(R_LX20_ez2, (X2-1),MPI_FLOAT,0,9952,MPI_COMM_WORLD,&status);
MPI_Recv(R_LX21_ex2, (X2-1),MPI_FLOAT,0,9953,MPI_COMM_WORLD,&status);
MPI_Recv(R_LX21_ey2, (X2-1),MPI_FLOAT,0,9954,MPI_COMM_WORLD,&status);
MPI_Recv(R_LX21_ex2, (X2-1),MPI_FLOAT,0,9955,MPI_COMM_WORLD,&status);
for(i=1;i<=X2-1;i++)
{
ex2[i][0][Z2]=R_LX20_ex2[i-1];
ey2[i][0][Z2]=R_LX20_ey2[i-1];
ez2[i][0][Z2]=R_LX20_ez2[i-1];
ex2[i][Y][Z2]=R_LX21_ex2[i-1];
ey2[i][Y][Z2]=R_LX21_ey2[i-1];
ez2[i][Y][Z2]=R_LX21_ez2[i-1];
}
}
////////////////////////////////////////////////////////////////////////////////////////////////
//计算边界条件
void murx(int g)
{ int gg,m,j,k;
float w1,w2,w3,w4,w5;
gg=abs(g-1);
if (g==0) m=0;
else m=5;
for(j=0;j<=Y;j++)
for(k=0;k<=Z1;k++)
{xey[j][k][m+4]=ey1[gg][j][k];
xez[j][k][m+4]=ez1[gg][j][k];}
for(j=1;j<=Y-1;j++)
for(k=1;k<=Z1-1;k++)
{w1=xey[j][k][m+4]+xey[j][k][m+1];
w2=xey[j][k][m+2]+xey[j][k][m];
w3=xey[j+1][k][m+2]-4*xey[j][k][m]-4*xey[j][k][m+2];
w4=xey[j-1][k][m+2]+xey[j+1][k][m]+xey[j-1][k][m];
w5=xey[j][k+1][m+2]+xey[j][k-1][m+2]+xey[j][k+1][m]+xey[j][k-1][m];
ey1[g][j][k]=-xey[j][k][m+3]+A*w1+B*w2+C*(w3+w4+w5); }
for(j=1;j<=Y-1;j++)
for(k=1;k<=Z1-1;k++)
{w1=xez[j][k][m+4]+xez[j][k][m+1];
w2=xez[j][k][m+2]+xez[j][k][m];
w3=xez[j+1][k][m+2]-4*xez[j][k][m]-4*xez[j][k][m+2];
w4=xez[j-1][k][m+2]+xez[j+1][k][m]+xez[j-1][k][m];
w5=xez[j][k+1][m+2]+xez[j][k-1][m+2]+xez[j][k+1][m]+xez[j][k-1][m];
ez1[g][j][k]=-xez[j][k][m+3]+A*w1+B*w2+C*(w3+w4+w5); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -