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

📄 并行源程序.txt

📁 计算并行运算的代码,用mpI实现并行运算,
💻 TXT
📖 第 1 页 / 共 4 页
字号:
    for(j=0;j<=Y;j++)
     for(k=0;k<=Z1;k++)
      {xey[j][k][m+1]=xey[j][k][m];
       xey[j][k][m]=ey1[g][j][k];
       xey[j][k][m+3]=xey[j][k][m+2];
       xey[j][k][m+2]=xey[j][k][m+4];
       xez[j][k][m+1]=xez[j][k][m];
       xez[j][k][m]=ez1[g][j][k];
       xez[j][k][m+3]=xez[j][k][m+2];
       xez[j][k][m+2]=xez[j][k][m+4];}
   }

/////////////////////////////////////////////////////////////////////////////////
    void mury1(int g)
  { int gg,m,i,k;
    float w1,w2,w3,w4,w5;
    gg=abs(g-1);
    if (g==0) m=0;
    else m=5;
    for (i=0;i<=X1;i++)
     for (k=0;k<=Z1;k++)
      { yexb[i][k][m+4]=ex1[i][gg][k];
        yezb[i][k][m+4]=ez1[i][gg][k]; }
    for (i=1;i<=X1-1;i++)
     for (k=1;k<=Z1-1;k++)
      { w1=yexb[i][k][m+4]+yexb[i][k][m+1];
        w2=yexb[i][k][m+2]+yexb[i][k][m];
        w3=yexb[i+1][k][m+2]-4*yexb[i][k][m]-4*yexb[i][k][m+2];
        w4=yexb[i-1][k][m+2]+yexb[i+1][k][m]+yexb[i-1][k][m];
        w5=yexb[i][k+1][m+2]+yexb[i][k-1][m]+yexb[i][k+1][m]+yexb[i][k-1][m+2];
        ex1[i][g][k]=-yexb[i][k][m+3]+A*w1+B*w2+C*(w3+w4+w5); }
    for (i=1;i<=X1-1;i++)
     for (k=1;k<=Z1-1;k++)
      { w1=yezb[i][k][m+4]+yezb[i][k][m+1];
        w2=yezb[i][k][m+2]+yezb[i][k][m];
        w3=yezb[i+1][k][m+2]-4*yezb[i][k][m]-4*yezb[i][k][m+2];
        w4=yezb[i-1][k][m+2]+yezb[i+1][k][m]+yezb[i-1][k][m];
        w5=yezb[i][k+1][m+2]+yezb[i][k-1][m]+yezb[i][k+1][m]+yezb[i][k-1][m+2];
        if ((i==30 || i==50) && k<=35) ez1[i][g][k]=0;
        else ez1[i][g][k]=-yezb[i][k][m+3]+A*w1+B*w2+C*(w3+w4+w5); }
    for (i=0;i<=X1;i++)
     for (k=0;k<=Z1;k++)
      {yexb[i][k][m+1]=yexb[i][k][m];
       yezb[i][k][m+1]=yezb[i][k][m];
       yexb[i][k][m]=ex1[i][g][k];
       yezb[i][k][m]=ez1[i][g][k];
       yexb[i][k][m+3]=yexb[i][k][m+2];
       yexb[i][k][m+2]=yexb[i][k][m+4];
       yezb[i][k][m+3]=yezb[i][k][m+2];
       yezb[i][k][m+2]=yezb[i][k][m+4];}
  }

/////////////////////////////////////////////////////////////////////////////////
      void mury2(int g)
  { int gg,m,i,k,k1;
    float w1,w2,w3,w4,w5;
    gg=abs(g-1);
    if (g==0) m=0;
    else m=5;
    for(i=0;i<=X2;i++)
     {yexs[i][0][m+4]=yexb[i+30][1][m+4];
      yezs[i][0][m+4]=yezb[i+30][1][m+4];}
    for (i=0;i<=X2;i++)
     for (k=0;k<=Z2;k++)
      { yexs[i][k+1][m+4]=ex2[i][gg][k];
        yezs[i][k+1][m+4]=ez2[i][gg][k];}
    for (i=1;i<=X2-1;i++)
     for (k=0;k<=Z2-1;k++)
      { k1=k+1;
        w1=yexs[i][k1][m+4]+yexs[i][k1][m+1];
        w2=yexs[i][k1][m+2]+yexs[i][k1][m];
        w3=yexs[i+1][k1][m+2]-4*yexs[i][k1][m]-4*yexs[i][k1][m+2];
        w4=yexs[i-1][k1][m+2]+yexs[i+1][k1][m]+yexs[i-1][k1][m];
        w5=yexs[i][k1+1][m+2]+yexs[i][k1-1][m]+yexs[i][k1+1][m]+yexs[i][k1-1][m+2];
        ex2[i][g][k]=-yexs[i][k1][m+3]+A*w1+B*w2+C*(w3+w4+w5); }
    for (i=1;i<=X2-1;i++)
     for (k=0;k<=Z2-1;k++)
      { k1=k+1;
        w1=yezs[i][k1][m+4]+yezs[i][k1][m+1];
        w2=yezs[i][k1][m+2]+yezs[i][k1][m];
        w3=yezs[i+1][k1][m+2]-4*yezs[i][k1][m]-4*yezs[i][k1][m+2];
        w4=yezs[i-1][k1][m+2]+yezs[i+1][k1][m]+yezs[i-1][k1][m];
        w5=yezs[i][k1+1][m+2]+yezs[i][k1-1][m]+yezs[i][k1+1][m]+yezs[i][k1-1][m+2];
        ez2[i][g][k]=-yezs[i][k1][m+3]+A*w1+B*w2+C*(w3+w4+w5); }
    for (i=0;i<=X2;i++)
     for (k=0;k<=Z2+1;k++)
      {yexs[i][k][m+1]=yexs[i][k][m];
       yezs[i][k][m+1]=yezs[i][k][m];
       yexs[i][k][m+3]=yexs[i][k][m+2];
       yexs[i][k][m+2]=yexs[i][k][m+4];
       yezs[i][k][m+3]=yezs[i][k][m+2];
       yezs[i][k][m+2]=yezs[i][k][m+4];}
    for (i=0;i<=X2;i++)
     for (k=0;k<=Z2;k++)
       { k1=k+1;
         yexs[i][k1][m]=ex2[i][g][k];
         yezs[i][k1][m]=ez2[i][g][k];}
    for (i=0;i<=X2;i++)
      { yexs[i][0][m]=ex1[i+30][g][1];
        yezs[i][0][m]=ez1[i+30][g][1];}
    for(i=0;i<=X2;i++)
      { ex1[i+30][g][0]=yexs[i][1][m];
        ez1[i+30][g][0]=yezs[i][1][m];
        yexb[i+30][0][m]=yexs[i][1][m];
        yezb[i+30][0][m]=yexs[i][1][m];}
  }

//////////////////////////////////////////////////////////////////////////
  void murz(int g,int xs,int xf,int yf)
  { int gg,m,tx,i,j,i1;
    float w1,w2,w3,w4,w5,tempx,tempy;
    gg=abs(g-1);
    if (g==Z1) m=0;
    else m=5;
    if (xf==X2-1) tx=31;
    else if(xs==51) tx=2;
    else tx=0;
    for(j=0;j<=Y;j++)
     for(i=xs-1;i<=xf+1;i++)
       { i1=i+tx;
         if(xf==X2-1){zex[i1][j][m+4]=ex2[i][j][gg];
                      zey[i1][j][m+4]=ey2[i][j][gg];}
         else {zex[i1][j][m+4]=ex1[i][j][gg];
               zey[i1][j][m+4]=ey1[i][j][gg];} }
    for (i=xs;i<=xf;i++)
     for (j=1;j<=yf;j++)
      {i1=i+tx;
       w1=zex[i1][j][m+4]+zex[i1][j][m+1];
       w2=zex[i1][j][m+2]+zex[i1][j][m];
       w3=zex[i1+1][j][m+2]-4*zex[i1][j][m]-4*zex[i1][j][m+2];
       w4=zex[i1-1][j][m+2]+zex[i1+1][j][m]+zex[i1-1][j][m];
       w5=zex[i1][j+1][m+2]+zex[i1][j-1][m+2]+zex[i1][j+1][m]+zex[i1][j-1][m];
       tempx=-zex[i1][j][m+3]+A*w1+B*w2+C*(w3+w4+w5);
       if(xf==X2-1) ex2[i][j][g]=tempx;
       else ex1[i][j][g]=tempx; }
    for (i=xs;i<=xf;i++)
     for (j=1;j<=yf;j++)
      {i1=i+tx;
       w1=zey[i1][j][m+4]+zey[i1][j][m+1];
       w2=zey[i1][j][m+2]+zey[i1][j][m];
       w3=zey[i1+1][j][m+2]-4*zey[i1][j][m]-4*zey[i1][j][m+2];
       w4=zey[i1-1][j][m+2]+zey[i1+1][j][m]+zey[i1-1][j][m];
       w5=zey[i1][j+1][m+2]+zey[i1][j-1][m+2]+zey[i1][j+1][m]+zey[i1][j-1][m];
       tempy=-zey[i1][j][m+3]+A*w1+B*w2+C*(w3+w4+w5);
       if(xf==X2-1) ey2[i][j][g]=tempy;
       else ey1[i][j][g]=tempy; }
    for (j=0;j<=Y;j++)
     for (i=xs-1;i<=xf+1;i++)
       {i1=i+tx;
        zex[i1][j][m+1]=zex[i1][j][m];
        zey[i1][j][m+1]=zey[i1][j][m];
        if(xf==X2-1) { zex[i1][j][m]=ex2[i][j][Z2];
                       zey[i1][j][m]=ey2[i][j][Z2];}
        else {zex[i1][j][m]=ex1[i][j][g];
              zey[i1][j][m]=ey1[i][j][g]; }
        zex[i1][j][m+3]=zex[i1][j][m+2];
        zex[i1][j][m+2]=zex[i1][j][m+4];
        zey[i1][j][m+3]=zey[i1][j][m+2];
        zey[i1][j][m+2]=zey[i1][j][m+4]; }

  }

/////////////////////////////////////////////////////////////////////////////////////////////
void liaoy(int xx,int zz)
 { int m,m0,tx,tx0,nl,nl0,ml,ml0,lm,l,i,j,i1,i2;
   float r,temp,tempy1[Y+1],tempy2[Y+1];
   if (xx==0) {m=0;tx0=0;}
   else {m=7;tx0=15;}
   if (zz==0) {m0=0;tx=0;}
   else {m0=7;tx=15;}
   for (j=0;j<=Y;j++)
    {ez1[xx][j][zz]=0;
     nl=m;
     for(l=1;l<=7;l++)
      {r=0;
       lm=2*l;
       for(ml=0;ml<=lm;ml++)
        {ml0=ml+tx;
         r=r+tt[l][ml]*yez1[j][ml0][nl];}
       temp=pow(-1,l+1)*c7[l]*r;
       ez1[xx][j][zz]=ez1[xx][j][zz]+temp;
       nl++;} }
   for (j=0;j<=Y;j++)
    {ex1[xx][j][zz]=0;
     nl=m0;
     for(l=1;l<=7;l++)
      {r=0;
       lm=2*l;
       for(ml=0;ml<=lm;ml++)
        {ml0=ml+tx0;
         r=r+tt[l][ml]*yex2[j][ml0][nl];}
       temp=pow(-1,l+1)*c7[l]*r;
       ex1[xx][j][zz]=ex1[xx][j][zz]+temp;
       nl++;} }
   for (j=0;j<=Y;j++)
    {tempy1[j]=0;
     nl=m;
     for(l=1;l<=7;l++)
      {r=0;
       lm=2*l;
       for(ml=0;ml<=lm;ml++)
        {ml0=ml+tx;
         r=r+tt[l][ml]*yey1[j][ml0][nl];}
       temp=pow(-1,l+1)*c7[l]*r;
       tempy1[j]=tempy1[j]+temp;
       nl++; }  }
   for (j=0;j<=Y;j++)
    {tempy2[j]=0;
     nl=m0;
     for(l=1;l<=7;l++)
      {r=0;
       lm=2*l;
       for(ml=0;ml<=lm;ml++)
        {ml0=ml+tx0;
         r=r+tt[l][ml]*yey2[j][ml0][nl];}
       temp=pow(-1,l+1)*c7[l]*r;
       tempy2[j]=tempy2[j]+temp;
       nl++; }  }
   for(j=0;j<=Y;j++)
     {ey1[xx][j][zz]=(tempy1[j]+tempy2[j])/2; }
   for(j=0;j<=Y;j++)
    for(i=0;i<=14;i++)
     for(nl=6;nl>=1;nl--)
     { i1=i+tx;
       nl0=nl+m;
       yey1[j][i1][nl0]=yey1[j][i1][nl0-1];
       yez1[j][i1][nl0]=yez1[j][i1][nl0-1]; }
   for(j=0;j<=Y;j++)
    for(i=0;i<=14;i++)
     for(nl=6;nl>=1;nl--)
     { i1=i+tx0;
       nl0=nl+m0;
       yey2[j][i1][nl0]=yey2[j][i1][nl0-1];
       yex2[j][i1][nl0]=yex2[j][i1][nl0-1]; }
   for(j=0;j<=Y;j++)
    for(i=0;i<=14;i++)
    { i1=i+tx;
      if(zz==0) i2=zz+i;
      else i2=zz-i;
      yey1[j][i1][m]=ey1[xx][j][i2];
      yez1[j][i1][m]=ez1[xx][j][i2];}
   for(j=0;j<=Y;j++)
    for(i=0;i<=14;i++)
    { i1=i+tx0;
      if(xx==0) i2=xx+i;
      else i2=xx-i;
      yey2[j][i1][m0]=ey1[i2][j][zz];
      yex2[j][i1][m0]=ex1[i2][j][zz]; }
 }

////////////////////////////////////////////////////////////////////////////////////
 void liaoz(int xx,int yy)
 { int m,m0,tx,tx0,nl,nl0,ml,ml0,lm,l,i,k,i1,i2;
   float r,temp,tempz1[Z1+1],tempz2[Z1+1];
   if (xx==0) {m=0;tx0=0;}
   else {m=7;tx0=15;}
   if (yy==0) {m0=0;tx=0;}
   else {m0=7;tx=15;}
   for (k=0;k<=Z1;k++)
    {ey1[xx][yy][k]=0;
     nl=m;
     for(l=1;l<=7;l++)
      {r=0;
       lm=2*l;
       for(ml=0;ml<=lm;ml++)
        {ml0=ml+tx;
         r=r+tt[l][ml]*zey1[k][ml0][nl];}
       temp=pow(-1,l+1)*c7[l]*r;
       ey1[xx][yy][k]=ey1[xx][yy][k]+temp;
       nl++;} }
   for (k=0;k<=Z1;k++)
    {ex1[xx][yy][k]=0;
     nl=m0;
     for(l=1;l<=7;l++)
      {r=0;
       lm=2*l;
       for(ml=0;ml<=lm;ml++)
        {ml0=ml+tx0;
         r=r+tt[l][ml]*zex2[k][ml0][nl];}
       temp=pow(-1,l+1)*c7[l]*r;
       ex1[xx][yy][k]=ex1[xx][yy][k]+temp;
       nl++;} }
   for (k=0;k<=Z1;k++)
    {tempz1[k]=0;
     nl=m;
     for(l=1;l<=7;l++)
      {r=0;
       lm=2*l;
       for(ml=0;ml<=lm;ml++)
        {ml0=ml+tx;
         r=r+tt[l][ml]*zez1[k][ml0][nl];}
       temp=pow(-1,l+1)*c7[l]*r;
       tempz1[k]=tempz1[k]+temp;
       nl++; }  }
   for (k=0;k<=Z1;k++)
    {tempz2[k]=0;
     nl=m0;
     for(l=1;l<=7;l++)
      {r=0;
       lm=2*l;
       for(ml=0;ml<=lm;ml++)
        {ml0=ml+tx0;
         r=r+tt[l][ml]*zez2[k][ml0][nl];}
       temp=pow(-1,l+1)*c7[l]*r;
       tempz2[k]=tempz2[k]+temp;
       nl++; }  }
   for(k=0;k<=Z1;k++)
     {ez1[xx][yy][k]=(tempz1[k]+tempz2[k])/2; }
   for(k=0;k<=Z1;k++)
    for(i=0;i<=14;i++)
     for(nl=6;nl>=1;nl--)
     { i1=i+tx;
       nl0=nl+m;
       zey1[k][i1][nl0]=zey1[k][i1][nl0-1];
       zez1[k][i1][nl0]=zez1[k][i1][nl0-1]; }
   for(k=0;k<=Z1;k++)
    for(i=0;i<=14;i++)
     for(nl=6;nl>=1;nl--)
     { i1=i+tx0;
       nl0=nl+m0;
       zez2[k][i1][nl0]=zez2[k][i1][nl0-1];
       zex2[k][i1][nl0]=zex2[k][i1][nl0-1]; }
   for(k=0;k<=Z1;k++)
    for(i=0;i<=14;i++)
    { i1=i+tx;
      if(yy==0) i2=yy+i;
      else i2=yy-i;
      zey1[k][i1][m]=ey1[xx][i2][k];
      zez1[k][i1][m]=ez1[xx][i2][k];}
   for(k=0;k<=Z1;k++)
    for(i=0;i<=14;i++)
    { i1=i+tx0;
      if(xx==0) i2=xx+i;
      else i2=xx-i;
      zez2[k][i1][m0]=ez1[i2][yy][k];
      zex2[k][i1][m0]=ex1[i2][yy][k]; }
 }

/////////////////////////////////////////////////////////////////////////////
 void liaox(int xs,int xf,int yy,int zz)
 { int m,m0,tx,tx0,nl,nl0,ml,ml0,lm,l,i,j,i1,i2;
   float r,temp,tempx1[X1+1],tempx2[X1+1],tempy[X1+1],tempz[X1+1];
   if (yy==0) {m=0;tx0=0;}
   else {m=7;tx0=15;}
   if (zz==Z1) {m0=0;tx=0;}
   else {m0=7;tx=15;}
   for (i=xs;i<=xf;i++)
    {if(zz==Z2) i1=i+30;
     else i1=i;
     tempy[i1]=0;
     nl=m;
     for(l=1;l<=7;l++)
      {r=0;
       lm=2*l;
       for(ml=0;ml<=lm;ml++)
        {ml0=ml+tx;
         r=r+tt[l][ml]*xey1[i1][ml0][nl];}
       temp=pow(-1,l+1)*c7[l]*r;
       tempy[i1]=tempy[i1]+temp;
       nl++;} }
   for(i=xs;i<=xf;i++)
     { if(zz==Z2) ey2[i][yy][zz]=tempy[i+30];
       else ey1[i][yy][zz]=tempy[i]; }
   for (i=xs;i<=xf;i++)                   
    {if(zz==Z2) i1=i+30;
     else i1=i;
     tempz[i1]=0;

⌨️ 快捷键说明

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