资源简介
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
- 上一篇:用labview写的CRC校验
- 下一篇:友价T5免签约支付接口插件
评论
共有 条评论