• 大小: 319KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: 其他
  • 标签:

资源简介

mp实现源码 并行计算课的实验源码,二维的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
{
/*读文件中的数据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 {
/*读文件的数据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);//找到进程数
MPI_Type_contiguous(7 MPI_DOUBLE &M

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     410344  2008-12-11 22:04  nbody的MPI&OPENMP多种实现源码\bin\mpi\nbody

     文件        163  2008-12-13 20:07  nbody的MPI&OPENMP多种实现源码\bin\mpi\nbody Run_Readme.txt

     文件        174  2008-12-13 20:06  nbody的MPI&OPENMP多种实现源码\bin\mpi_and_omp\nbody Run_Readme.txt

     文件     410323  2008-12-11 22:03  nbody的MPI&OPENMP多种实现源码\bin\mpi_and_omp\nbody.a

     文件      27771  2008-12-14 18:29  nbody的MPI&OPENMP多种实现源码\bin\omp\nbody

     文件        224  2008-12-14 19:26  nbody的MPI&OPENMP多种实现源码\bin\omp\nbody Run_Readme.txt

     文件      60416  2008-12-14 19:24  nbody的MPI&OPENMP多种实现源码\doc\report.doc

     文件      56329  2008-12-13 20:01  nbody的MPI&OPENMP多种实现源码\result\result1000.data

     文件      56329  2008-12-14 18:29  nbody的MPI&OPENMP多种实现源码\result\result2.data

     文件         85  2008-12-20 22:14  nbody的MPI&OPENMP多种实现源码\src\mpi\Compile_README.txt

     文件       4972  2008-12-13 19:56  nbody的MPI&OPENMP多种实现源码\src\mpi\nbody.c

     文件        215  2008-12-20 22:14  nbody的MPI&OPENMP多种实现源码\src\mpi_and_omp\Compile_README.txt

     文件       4082  2008-12-11 22:03  nbody的MPI&OPENMP多种实现源码\src\mpi_and_omp\nbody.c

     文件        445  2008-12-20 22:14  nbody的MPI&OPENMP多种实现源码\src\omp\Compile_README.txt

     文件       4154  2008-12-14 19:19  nbody的MPI&OPENMP多种实现源码\src\omp\nbody.c

     目录          0  2011-01-01 10:52  nbody的MPI&OPENMP多种实现源码\bin\mpi

     目录          0  2011-01-01 10:52  nbody的MPI&OPENMP多种实现源码\bin\mpi_and_omp

     目录          0  2011-01-01 10:52  nbody的MPI&OPENMP多种实现源码\bin\omp

     目录          0  2011-01-01 10:52  nbody的MPI&OPENMP多种实现源码\src\mpi

     目录          0  2011-01-01 10:52  nbody的MPI&OPENMP多种实现源码\src\mpi_and_omp

     目录          0  2011-01-01 10:52  nbody的MPI&OPENMP多种实现源码\src\omp

     目录          0  2011-01-01 10:52  nbody的MPI&OPENMP多种实现源码\bin

     目录          0  2011-01-01 10:53  nbody的MPI&OPENMP多种实现源码\doc

     目录          0  2011-01-01 10:52  nbody的MPI&OPENMP多种实现源码\result

     目录          0  2011-01-01 10:52  nbody的MPI&OPENMP多种实现源码\src

     目录          0  2011-01-01 10:52  nbody的MPI&OPENMP多种实现源码

----------- ---------  ---------- -----  ----

              1036026                    26


评论

共有 条评论

相关资源