-
大小: 319KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-05-10
- 語言: 其他
- 標(biāo)簽:
資源簡介
mp實現(xiàn)源碼
并行計算課的實驗源碼,二維的nbody實驗源碼運用mpi,openmp以及兩者的混合實驗源碼。

代碼片段和文件信息
#include
#include
#include
#include
#include“mpi.h“
typedef?struct
{
double?x;
double?y;
}Point;
typedef?struct
{
double?m;
double?fx;
double?fy;
double?px;
double?py;
double?vx;
double?vy;
}Bodies;
typedef?struct
{
double?G;
double?sizex;
double?sizey;
double?dt;
double?c;
}Para;
Para?para;
int?n;
MPI_Datatype?MPI_PARA;
MPI_Datatype?MPI_BODY;
MPI_Status?status;
int?steps=1000;
int?*start;
int?*end;
int?numprocs;
int?myid;
Point?size;
Point?delv;
Point?delp;
Bodies?*body;
Point?*temPoint;
void?init()
{
int?k=0;
int?j=0;
FILE?*file;
/*打開文件*/
file=fopen(“//home//200820110945//MPI/sample_input.in““r“);
if(!file)
{
printf(“cannot?open?file\n“);
}
else
{
/*讀文件中的數(shù)據(jù)nGsize.xsize.ydtc*/
fscanf(file“%d%lf%lf%lf%lf%lf“&n¶.G¶.sizex¶.sizey¶.dt¶.c);
body=(Bodies*)malloc(sizeof(Bodies)*n);
for(j=0;j {
/*讀文件的數(shù)據(jù)mpxpyvxvy*/
fscanf(file“%lf%lf%lf%lf%lf“&body[j].m&body[j].px&body[j].py&body[j].vx&body[j].vy);
body[j].fx=body[j].fy=0;
}
}
fclose(file);
}
void?calForces()
{
double?distancemagnitude;
double?temp;
int?ij;
Point?direction;
for(i=start[myid];i for(j=0;i {
if(i==j)?continue;
/*計算星體距離*/
distance=sqrt((body[i].px-body[j].px)*(body[i].px-body[j].px)+(body[i].py-body[j].py)*(body[i].py-body[j].py));
temp=(distance*distance)+(para.c*para.c);
/*計算星體萬有引力*/
magnitude=(para.G*body[i].m*body[j].m)/temp;
/*x和y分量上的距離*/
direction.x=body[j].px-body[i].px;
direction.y=body[j].py-body[i].py;
/*x和y分量上的萬有引力*/
body[i].fx=body[i].fx+magnitude*direction.x/distance;
body[j].fx=body[j].fx+magnitude*direction.x/distance;
body[i].fy=body[i].fy+magnitude*direction.y/distance;
body[j].fy=body[j].fy+magnitude*direction.y/distance;
}
}
}
void?calnbody()
{
int?i;
temPoint=(Point*)malloc(sizeof(Point)*n);
for(i=start[myid];i {
/*x和y分量上的速度*/
delv.x=(body[i].fx/body[i].m)*para.dt;
delv.y=(body[i].fy/body[i].m)*para.dt;
delp.x=(body[i].vx+delv.x/2)*para.dt;
delp.y=(body[i].vy+delv.y/2)*para.dt;
/*臨時變量*/
temPoint[i].x=body[i].px+delp.x;
temPoint[i].y=body[i].py+delp.y;
/*越界檢查*/
if(temPoint[i].x<0||temPoint[i].x>para.sizex||temPoint[i].y<0||temPoint[i].y>para.sizey)
{
body[i].px=body[i].px;
body[i].py=body[i].py;
body[i].vx=-body[i].vx;
body[i].vy=-body[i].vy;
}
else
{
body[i].px=temPoint[i].x;
body[i].py=temPoint[i].y;
body[i].vx=body[i].vx+delv.x;
body[i].vy=body[i].vy+delv.y;
}
body[i].fx=body[i].fy=0.0;
}
}
int?main(int?argcchar?*argv[])
{
int?iqjstepkrp;
double?stimeetime;
MPI_Init(&argc&argv);//初始化
MPI_Comm_rank(MPI_COMM_WORLD?&myid);//找到自己的id
MPI_Comm_size(MPI_COMM_WORLD?&numprocs);//找到進(jìn)程數(shù)
MPI_Type_contiguous(7?MPI_DOUBLE?&M
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????410344??2008-12-11?22:04??nbody的MPI&OPENMP多種實現(xiàn)源碼\bin\mpi\nbody
?????文件????????163??2008-12-13?20:07??nbody的MPI&OPENMP多種實現(xiàn)源碼\bin\mpi\nbody?Run_Readme.txt
?????文件????????174??2008-12-13?20:06??nbody的MPI&OPENMP多種實現(xiàn)源碼\bin\mpi_and_omp\nbody?Run_Readme.txt
?????文件?????410323??2008-12-11?22:03??nbody的MPI&OPENMP多種實現(xiàn)源碼\bin\mpi_and_omp\nbody.a
?????文件??????27771??2008-12-14?18:29??nbody的MPI&OPENMP多種實現(xiàn)源碼\bin\omp\nbody
?????文件????????224??2008-12-14?19:26??nbody的MPI&OPENMP多種實現(xiàn)源碼\bin\omp\nbody?Run_Readme.txt
?????文件??????60416??2008-12-14?19:24??nbody的MPI&OPENMP多種實現(xiàn)源碼\doc\report.doc
?????文件??????56329??2008-12-13?20:01??nbody的MPI&OPENMP多種實現(xiàn)源碼\result\result1000.data
?????文件??????56329??2008-12-14?18:29??nbody的MPI&OPENMP多種實現(xiàn)源碼\result\result2.data
?????文件?????????85??2008-12-20?22:14??nbody的MPI&OPENMP多種實現(xiàn)源碼\src\mpi\Compile_README.txt
?????文件???????4972??2008-12-13?19:56??nbody的MPI&OPENMP多種實現(xiàn)源碼\src\mpi\nbody.c
?????文件????????215??2008-12-20?22:14??nbody的MPI&OPENMP多種實現(xiàn)源碼\src\mpi_and_omp\Compile_README.txt
?????文件???????4082??2008-12-11?22:03??nbody的MPI&OPENMP多種實現(xiàn)源碼\src\mpi_and_omp\nbody.c
?????文件????????445??2008-12-20?22:14??nbody的MPI&OPENMP多種實現(xiàn)源碼\src\omp\Compile_README.txt
?????文件???????4154??2008-12-14?19:19??nbody的MPI&OPENMP多種實現(xiàn)源碼\src\omp\nbody.c
?????目錄??????????0??2011-01-01?10:52??nbody的MPI&OPENMP多種實現(xiàn)源碼\bin\mpi
?????目錄??????????0??2011-01-01?10:52??nbody的MPI&OPENMP多種實現(xiàn)源碼\bin\mpi_and_omp
?????目錄??????????0??2011-01-01?10:52??nbody的MPI&OPENMP多種實現(xiàn)源碼\bin\omp
?????目錄??????????0??2011-01-01?10:52??nbody的MPI&OPENMP多種實現(xiàn)源碼\src\mpi
?????目錄??????????0??2011-01-01?10:52??nbody的MPI&OPENMP多種實現(xiàn)源碼\src\mpi_and_omp
?????目錄??????????0??2011-01-01?10:52??nbody的MPI&OPENMP多種實現(xiàn)源碼\src\omp
?????目錄??????????0??2011-01-01?10:52??nbody的MPI&OPENMP多種實現(xiàn)源碼\bin
?????目錄??????????0??2011-01-01?10:53??nbody的MPI&OPENMP多種實現(xiàn)源碼\doc
?????目錄??????????0??2011-01-01?10:52??nbody的MPI&OPENMP多種實現(xiàn)源碼\result
?????目錄??????????0??2011-01-01?10:52??nbody的MPI&OPENMP多種實現(xiàn)源碼\src
?????目錄??????????0??2011-01-01?10:52??nbody的MPI&OPENMP多種實現(xiàn)源碼
-----------?---------??----------?-----??----
??????????????1036026????????????????????26
- 上一篇:用labview寫的CRC校驗
- 下一篇:友價T5免簽約支付接口插件
評論
共有 條評論