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

📄 并行源程序.txt

📁 计算并行运算的代码,用mpI实现并行运算,
💻 TXT
📖 第 1 页 / 共 4 页
字号:
     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]*xez2[i1][ml0][nl];}
       temp=pow(-1,l+1)*c7[l]*r;
       tempz[i1]=tempz[i1]+temp;
       nl++;} }
   for(i=xs;i<=xf;i++)
     { if(zz==Z2) ez2[i][yy][zz]=tempz[i+30];
       else ez1[i][yy][zz]=tempz[i]; }
   for (i=xs;i<=xf;i++)
    {if(zz==Z2) i1=i+30;
     else i1=i;
     tempx1[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]*xex1[i1][ml0][nl];}
       temp=pow(-1,l+1)*c7[l]*r;
       tempx1[i1]=tempx1[i1]+temp;
       nl++;} }
   for (i=xs;i<=xf;i++)
    {if(zz==Z2) i1=i+30;
     else i1=i;
     tempx2[i1]=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]*xex1[i1][ml0][nl];}
       temp=pow(-1,l+1)*c7[l]*r;
       tempx2[i1]=tempx2[i1]+temp;
       nl++;} }
   for(i=xs;i<=xf;i++)
     { if(zz==Z2) ex2[i][yy][zz]=(tempx1[i+30]+tempx2[i+30])/2;
       else ex1[i][yy][zz]=(tempx1[i]+tempx2[i])/2; }
   for(i=0;i<=X1;i++)
    for(j=0;j<=14;j++)
     for(nl=6;nl>=1;nl--)
     { i1=j+tx;
       nl0=nl+m;
       xey1[i][i1][nl0]=xey1[i][i1][nl0-1];
       xex1[i][i1][nl0]=xex1[i][i1][nl0-1]; }
   for(i=0;i<=X1;i++)
    for(j=0;j<=14;j++)
     for(nl=6;nl>=1;nl--)
     { i1=j+tx0;
       nl0=nl+m0;
       xez2[i][i1][nl0]=xez2[i][i1][nl0-1];
       xex2[i][i1][nl0]=xex2[i][i1][nl0-1]; }
   for(i=xs;i<=xf;i++)
    for(j=0;j<=14;j++)
    { i1=j+tx;
      if(yy==0) i2=yy+i;
      else i2=yy-i;
      if (zz==Z2){xey1[i+30][i1][m]=ey2[i][i2][zz];
                  xex1[i+30][i1][m]=ex2[i][i2][zz];}
      else {xey1[i][i1][m]=ey1[i][i2][zz];
            xex1[i][i1][m]=ex1[i][i2][zz];}    }
   for(i=xs;i<=xf;i++)
    for(j=0;j<=14;j++)
    { i1=j+tx0;
      if(yy==0) i2=yy+i;
      else i2=yy-i;
      if (zz==Z2){xez2[i+30][i1][m0]=ez2[i][i2][zz];
                  xex2[i+30][i1][m0]=ex2[i][i2][zz];}
      else {xez2[i][i1][m0]=ez1[i][i2][zz];
            xex2[i][i1][m0]=ex1[i][i2][zz];}    }

 }

///////////////////////////////////////////////////////////////////////////////
 void  fourier(float e[X2+1][Y+1][rn+1])
  {  int    n,k,i,j;
     float  gk,gre[X2+1][Y+1][4],gim[X2+1][Y+1][4],a[rn+1];
     gk=8.5/df;
     for (k=0;k<=3;k++)
      for(i=0;i<=X2;i++)
       for(j=0;j<=Y;j++)
          {gre[i][j][k]=0;
           gim[i][j][k]=0;}
     for(k=0;k<=3;k++)
      { for(n=0;n<=rn;n++)
        { a[n]=(2*pi*gk*n)/rn; }
        for(i=0;i<=X2;i++)
         for(j=0;j<=Y;j++)
          for(n=0;n<=rn;n++)
            {gre[i][j][k]=gre[i][j][k]+e[i][j][n]*cos(a[n]);
             gim[i][j][k]=gim[i][j][k]+e[i][j][n]*sin(a[n]); }
        gk=gk+1/df; }
     if (e==rex)
        {  for (i=0;i<=X2;i++)
            for (j=0;j<=Y;j++)
                { fex[i][j][0]=gre[i][j][1];
                  fex[i][j][1]=gim[i][j][1];}    }
     if (e==rey)
        {  for (i=0;i<=X2;i++)
            for (j=0;j<=Y;j++)
                { fey[i][j][0]=gre[i][j][1];
                  fey[i][j][1]=gim[i][j][1];}    }
     if (e==rhx)
        {  for (i=0;i<=X2;i++)
            for (j=0;j<=Y;j++)
                { fhx[i][j][0]=gre[i][j][1];
                  fhx[i][j][1]=gim[i][j][1];}    }
     if (e==rhy)
        {  for (i=0;i<=X2;i++)
            for (j=0;j<=Y;j++)
                { fhy[i][j][0]=gre[i][j][1];
                  fhy[i][j][1]=gim[i][j][1];}    }
  }

//////////////////////////////////////////////////////////////////////////////////////////
 void sss()
{ int a,b,c0;
  float k,gr1,gi1,gr2,gi2,temp;
  float gr[X2+1][Y+1][46],gi[X2+1][Y+1][46];
  k=2*pi/ld;
  for(c0=-45;c0<=-1;c0++)
   for(a=0;a<=X2;a++)
    for(b=0;b<=Y;b++)
     { gr1=fey[a][b][0]-ita*fhx[a][b][0]*cos(c0*dc);
       gi1=fey[a][b][1]-ita*fhx[a][b][1]*cos(c0*dc);
       temp=k*((-1)*(b-50)*dr*sin(c0*dc)+z0*cos(c0*dc));
       gr2=cos(temp);
       gi2=sin(temp);
       gr[a][b][c0+45]=(gr1*gr2-gi1*gi2);
       gi[a][b][c0+45]=(gr1*gi2+gi1*gr2);
       Er1[a][b][c0+45]=gi[a][b][c0+45]*(k/(4*pi));
       Ei1[a][b][c0+45]=(-1)*gr[a][b][c0+45]*(k/(4*pi));  }
  for(c0=0;c0<=45;c0++)
   for(a=0;a<=X2;a++)
    for(b=0;b<=Y;b++)
     { gr1=-fey[a][b][0]+ita*fhx[a][b][0]*cos(c0*dc);
       gi1=-fey[a][b][1]+ita*fhx[a][b][1]*cos(c0*dc);
       temp=k*((b-50)*dr*sin(c0*dc)+z0*cos(c0*dc));
       gr2=cos(temp);
       gi2=sin(temp);
       gr[a][b][c0]=(gr1*gr2-gi1*gi2);
       gi[a][b][c0]=(gr1*gi2+gi1*gr2);
       Er1[a][b][c0+45]=gi[a][b][c0]*(k/(4*pi));
       Ei1[a][b][c0+45]=(-1)*gr[a][b][c0]*(k/(4*pi));}
  for(c0=0;c0<=90;c0++)
   for(a=0;a<=X2;a++)
    for(b=0;b<=Y;b++)
     { se1[c0][0]=se1[c0][0]+Er1[a][b][c0];
       se1[c0][1]=se1[c0][1]+Ei1[a][b][c0];}
  for(c0=-45;c0<=-1;c0++)
   for(a=0;a<=X2;a++)
    for(b=0;b<=Y;b++)
     { gr1=fex[a][b][0]*cos(c0*dc)+ita*fhy[a][b][0];
       gi1=fex[a][b][1]*cos(c0*dc)+ita*fhy[a][b][1];
       temp=k*((-1)*(b-50)*dr*sin(c0*dc)+z0*cos(c0*dc));
       gr2=cos(temp);
       gi2=sin(temp);
       gr[a][b][c0+45]=(gr1*gr2-gi1*gi2);
       gi[a][b][c0+45]=(gr1*gi2+gi1*gr2);
       Er2[a][b][c0+45]=(-1)*gi[a][b][c0+45]*(k/(4*pi));
       Ei2[a][b][c0+45]=gr[a][b][c0+45]*(k/(4*pi));    }
  for(c0=0;c0<=45;c0++)
   for(a=0;a<=X2;a++)
    for(b=0;b<=Y;b++)
     { gr1=-fex[a][b][0]*cos(c0*dc)-ita*fhy[a][b][0];
       gi1=-fex[a][b][1]*cos(c0*dc)-ita*fhy[a][b][1];
       temp=k*((b-50)*dr*sin(c0*dc)+z0*cos(c0*dc));
       gr2=cos(temp);
       gi2=sin(temp);
       gr[a][b][c0]=(gr1*gr2-gi1*gi2);
       gi[a][b][c0]=(gr1*gi2+gi1*gr2);
       Er2[a][b][c0+45]=(-1)*gi[a][b][c0]*(k/(4*pi));
       Ei2[a][b][c0+45]=gr[a][b][c0]*(k/(4*pi));       }
  for(c0=0;c0<=90;c0++)
   for(a=0;a<=X2;a++)
    for(b=0;b<=Y;b++)
     { se2[c0][0]=se2[c0][0]+Er2[a][b][c0];
       se2[c0][1]=se2[c0][1]+Ei2[a][b][c0];}
  for(c0=0;c0<=90;c0++)
   {  Me1[c0]=sqrt(pow(se1[c0][0],2)+pow(se1[c0][1],2));
      Me2[c0]=sqrt(pow(se2[c0][0],2)+pow(se2[c0][1],2)); }
}

///////////////////////////////////////////////////////////////////////////////////////////
 void sss1()
{ int a,b,c0;
  float k,gr1,gi1,gr2,gi2,temp;
  float gr[X2+1][Y+1][46],gi[X2+1][Y+1][46];
  k=2*pi/ld;
  for(c0=-45;c0<=-1;c0++)
   for(a=0;a<=X2;a++)
    for(b=0;b<=Y;b++)
     { gr1=-fex[a][b][0]-ita*fhy[a][b][0]*cos(c0*dc);
       gi1=-fex[a][b][1]-ita*fhy[a][b][1]*cos(c0*dc);
       temp=k*((-1)*(a-10)*dr*sin(c0*dc)+z0*cos(c0*dc));
       gr2=cos(temp);
       gi2=sin(temp);
       gr[a][b][c0+45]=(gr1*gr2-gi1*gi2);
       gi[a][b][c0+45]=(gr1*gi2+gi1*gr2);
       Er3[a][b][c0+45]=gi[a][b][c0+45]*(k/(4*pi));
       Ei3[a][b][c0+45]=(-1)*gr[a][b][c0+45]*(k/(4*pi));  }
  for(c0=0;c0<=45;c0++)
   for(a=0;a<=X2;a++)
    for(b=0;b<=Y;b++)
     { gr1=fex[a][b][0]+ita*fhy[a][b][0]*cos(c0*dc);
       gi1=fex[a][b][1]+ita*fhy[a][b][1]*cos(c0*dc);
       temp=k*((a-10)*dr*sin(c0*dc)+z0*cos(c0*dc));
       gr2=cos(temp);
       gi2=sin(temp);
       gr[a][b][c0]=(gr1*gr2-gi1*gi2);
       gi[a][b][c0]=(gr1*gi2+gi1*gr2);
       Er3[a][b][c0+45]=gi[a][b][c0]*(k/(4*pi));
       Ei3[a][b][c0+45]=(-1)*gr[a][b][c0]*(k/(4*pi));}
  for(c0=0;c0<=90;c0++)
   for(a=0;a<=X2;a++)
    for(b=0;b<=Y;b++)
     { se3[c0][0]=se3[c0][0]+Er3[a][b][c0];
       se3[c0][1]=se3[c0][1]+Ei3[a][b][c0];}
  for(c0=-45;c0<=-1;c0++)
   for(a=0;a<=X2;a++)
    for(b=0;b<=Y;b++)
     { gr1=fey[a][b][0]*cos(c0*dc)-ita*fhx[a][b][0];
       gi1=fey[a][b][1]*cos(c0*dc)-ita*fhx[a][b][1];
       temp=k*((-1)*(a-10)*dr*sin(c0*dc)+z0*cos(c0*dc));
       gr2=cos(temp);
       gi2=sin(temp);
       gr[a][b][c0+45]=(gr1*gr2-gi1*gi2);
       gi[a][b][c0+45]=(gr1*gi2+gi1*gr2);
       Er4[a][b][c0+45]=(-1)*gi[a][b][c0+45]*(k/(4*pi));
       Ei4[a][b][c0+45]=gr[a][b][c0+45]*(k/(4*pi));    }
  for(c0=0;c0<=45;c0++)
   for(a=0;a<=X2;a++)
    for(b=0;b<=Y;b++)
     { gr1=-fey[a][b][0]*cos(c0*dc)+ita*fhx[a][b][0];
       gi1=-fey[a][b][1]*cos(c0*dc)+ita*fhx[a][b][1];
       temp=k*((a-10)*dr*sin(c0*dc)+z0*cos(c0*dc));
       gr2=cos(temp);
       gi2=sin(temp);
       gr[a][b][c0]=(gr1*gr2-gi1*gi2);
       gi[a][b][c0]=(gr1*gi2+gi1*gr2);
       Er4[a][b][c0+45]=(-1)*gi[a][b][c0]*(k/(4*pi));
       Ei4[a][b][c0+45]=gr[a][b][c0]*(k/(4*pi));       }
  for(c0=0;c0<=90;c0++)
   for(a=0;a<=X2;a++)
    for(b=0;b<=Y;b++)
     { se4[c0][0]=se4[c0][0]+Er4[a][b][c0];
       se4[c0][1]=se4[c0][1]+Ei4[a][b][c0];}
  for(c0=0;c0<=90;c0++)
   {  Me3[c0]=sqrt(pow(se3[c0][0],2)+pow(se3[c0][1],2));
      Me4[c0]=sqrt(pow(se4[c0][0],2)+pow(se4[c0][1],2)); }
}

//////////////////////////////////////////////////////////////////////////////////////////////////
void fourier1(float e[rn+1])
{ int n,k;
  float gk,gr[4],gi[4],a[rn+1];
  gk=8.5/df;
  for (k=0;k<=3;k++)
   { for(n=0;n<=rn;n++)
      { a[n]=(2*pi*gk*n)/rn;  }
     gr[k]=0;gi[k]=0;
     for(n=0;n<=rn;n++)
      { gr[k]=gr[k]+e[n]*cos(a[n]);
        gi[k]=gi[k]+e[n]*sin(a[n]);}
     gk=gk+1/df; }
  if (e==Vs) {Vsw[0]=gr[1];
              Vsw[1]=gi[1];}
  if (e==Is) {Isw[0]=gr[1];
              Isw[1]=gi[1];}
}

//////////////////////////////////////////////////////////////////////////////////////////////
void mo(float e[X2+1][Y+1][2])
{FILE *fp;
 int i,j;
 float mod[X2+1][Y+1];
 for(i=0;i<=X2;i++)
  for(j=0;j<=Y;j++)
  { mod[i][j]=sqrt(pow(e[i][j][0],2)+pow(e[i][j][1],2)); }
 if (e==fex){ fp=fopen("mex.m","w");
             for(i=0;i<=X2;i++)
              for(j=0;j<=Y;j++)
               { mex[i][j]=mod[i][j];
                 fprintf(fp,"mex(%d,%d)=%.12f;\n",i+1,j+1,mex[i][j]);}
             fprintf(fp,"mesh(mex);");
             fclose(fp);}
 if (e==fey){ fp=fopen("mey.m","w");
             for(i=0;i<=X2;i++)
              for(j=0;j<=Y;j++)
               { mey[i][j]=mod[i][j];
                 fprintf(fp,"mey(%d,%d)=%.12f;\n",i+1,j+1,mey[i][j]);}
             fprintf(fp,"mesh(mey);");
             fclose(fp);}
 if (e==fhx){ fp=fopen("mhx.m","w");
             for(i=0;i<=X2;i++)
              for(j=0;j<=Y;j++)
               { mhx[i][j]=mod[i][j];
                 fprintf(fp,"mhx(%d,%d)=%.12f;\n",i+1,j+1,mhx[i][j]);}
             fprintf(fp,"mesh(mhx);");
             fclose(fp);}
 if (e==fhy){ fp=fopen("mhy.m","w");
             for(i=0;i<=X2;i++)
              for(j=0;j<=Y;j++)
               { mhy[i][j]=mod[i][j];
                 fprintf(fp,"mhy(%d,%d)=%.12f;\n",i+1,j+1,mhy[i][j]);}
             fprintf(fp,"mesh(mhy);");
             fclose(fp);}
}

//////////////////////////////////////////////////////////////////////////////
//输出数据
void putdata() {
  FILE  *fp14,*fp15,*fp16,*fp17,*fp18;
 int n;
  float tmp;
 fp14=fopen("pin.txt","w");
 pin[0]=Vsw[0]*Isw[0]+Vsw[1]*Isw[1];
 pin[1]=-Vsw[0]*Isw[1]+Vsw[1]*Isw[0];
 Mp=sqrt(pow(pin[0],2)+pow(pin[1],2));
 fprintf(fp14,"pin=%.12f+j%.12f\nMode=%.12f\n",pin[0],pin[1],Mp);
 fclose(fp14);
 for(n=0;n<=90;n++)
  { tmp=fabs(pow(Me1[n],2)*pow(dr,2)/(30*Mp));
    G1[n]=10*log10(tmp); }
 for(n=0;n<=90;n++)
  {tmp=fabs(pow(Me2[n],2)*pow(dr,2)/(30*Mp));
   G2[n]=10*log10(tmp); }
 for(n=0;n<=90;n++)
  {tmp=fabs(pow(Me3[n],2)*pow(dr,2)*cos((n0-45)*dc)/(30*Mp));
   G3[n]=10*log10(tmp);}
 for(n=0;n<=90;n++)
  {tmp=fabs(pow(Me4[n],2)*pow(dr,2)/(30*Mp));
   G4[n]=10*log10(tmp);}
 fp15=fopen("G1.m","w");
 for(n=0;n<=90;n++)
  fprintf(fp15,"y(%d)=%.12f;\n",n+1,G1[n]);
 fprintf(fp15,"plot(y);");
 fclose(fp15);
 fp16=fopen("G2.m","w");
 for(n=0;n<=90;n++)
  fprintf(fp16,"y(%d)=%.12f;\n",n+1,G2[n]);
 fprintf(fp16,"plot(y);");
 fclose(fp16);
 fp17=fopen("G3.m","w");
 for(n=0;n<=90;n++)
  fprintf(fp17,"y(%d)=%.12f;\n",n+1,G3[n]);
 fprintf(fp17,"plot(y);");
 fclose(fp17);
 fp18=fopen("G4.m","w");
 for(n=0;n<=90;n++)
  fprintf(fp18,"y(%d)=%.12f;\n",n+1,G4[n]);
 fprintf(fp18,"plot(y);");
 fclose(fp18);
}




⌨️ 快捷键说明

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