亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? nbody_1000.cpp

?? MPI編程-Nbody問題并行程序(計算1000個天體的移動
?? CPP
字號:
#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <fstream.h>
#include <iostream.h>

/*-------------------構造點的類型-------------------*/
struct Point{
        double x;
        double y;
};

/*--------------------全局變量----------------------*/
double G;               //萬有引力常量  
int N;                  //天體的數目
Point* P;               //每個天體的位置
Point* v;               //每個天體的速度
Point* f;               //每個天體受到的力
double* m;              //每個天體的質量
Point size;             //空間的大小
float C;                //一常數
double dt;              //很小的時間周期

/*---------------初始化各天體的情況-----------------*/
void Initial(char* filename){
	ifstream f1(filename);
	if(!f1){
		cout<<"open file fail!"<<endl;
		return;
	}
	f1>>N;         //從文件讀入天體的數目      
	P = new Point[N];
	v = new Point[N];
	f = new Point[N];
	m = new double[N];
	f1>>G>>size.x>>size.y>>dt>>C;      //從文件讀入G,size,dt
	for(int i=0;i<N;i++){
		f1>>m[i]>>P[i].x>>P[i].y>>v[i].x>>v[i].y;     //從文件讀入各天體的質量,位置和速度
	}
	for(int j=0;j<N;j++) { f[j].x = 0.0; f[j].y = 0.0; }   //初始化每個天體的受力為0
	f1.close();
}

/*-----------計算dt時間內每個天體受到的力-----------*/
void calculateForces(int i){
	double distance,magnitude;
	Point direction;
	for(int j=0;j<N;j++){
		if(j!=i){
			distance = (float)sqrt((P[i].x-P[j].x)*(P[i].x-P[j].x)+(P[i].y-P[j].y)*(P[i].y-P[j].y));    //計算兩點間距離
			if(distance!=0){
				magnitude = (G*m[i]*m[j])/(distance*distance+C*C);   //計算萬有引力
				direction.x = P[j].x-P[i].x;                         //記錄力的x方向
				direction.y = P[j].y-P[i].y;                         //記錄力的y方向
				f[i].x = f[i].x+magnitude*direction.x/distance;      //把收到的所有萬有引力累加
				f[i].y = f[i].y+magnitude*direction.y/distance;
			}
		}
	}
}

/*----------計算dt時間后,天體的位置和速度----------*/
void moveBodies(int i){
	Point dv;
	Point dp;
	Point tempPoint;
	dv.x = f[i].x/m[i]*dt;       dv.y = f[i].y/m[i]*dt;         //計算x,y方向的dv=a*dt,a=F/m
	dp.x = (v[i].x+dv.x/2)*dt;   dp.y = (v[i].y+dv.y/2)*dt;     //計算x,y偏移量dp=(v+dv/2)dt
	tempPoint.x=P[i].x+dp.x;     tempPoint.y = P[i].y+dp.y;     //對位置的偏移量進行累加
	if(tempPoint.x<0||tempPoint.x>size.x||tempPoint.y<0||tempPoint.y>size.y){  //判斷下一位置是否越界
		P[i].x = P[i].x;     //如果越界,天體保留原來位置,速度方向取反
		P[i].y = P[i].y;
		v[i].x = -v[i].x;
		v[i].y = -v[i].y;
	}else{                   //記錄新的位置和方向
		P[i].x = tempPoint.x;
		P[i].y = tempPoint.y;
		v[i].x = v[i].x + dv.x;
		v[i].y = v[i].y + dv.y;
	}
	f[i].x = 0.0; f[i].y = 0.0;
}

/*-------------------輸出各天體的情況---------------*/
void End(char* filename){
	ofstream f2(filename);
	if(!f2){
		cout<<"open file fail!"<<endl;
		return;
	}
	f2<<N<<endl<<G<<endl<<size.x<<" "<<size.y<<endl<<dt<<endl<<C<<endl;        //輸出n,G,size,dt到結果文件
	for(int i=0;i<N;i++){
		f2<<m[i]<<" "<<P[i].x<<" "<<P[i].y<<" "<<v[i].x<<" "<<v[i].y<<endl;    //輸出各天體的新情況到結果文件
	}
	delete[] P;
	delete[] v;
	delete[] f;
	delete[] m;
	f2.close();
}




/*--------------------------主函數------------------*/
int main(int argc,char* argv[]){
	int myid,numprocs;
    double starttime,endtime;               //記錄運行的開始時間和結束時間

    MPI_Init(&argc,&argv);                  //啟動MPI計算   
    MPI_Comm_size(MPI_COMM_WORLD,&numprocs);//確定進程數
    MPI_Comm_rank(MPI_COMM_WORLD,&myid);    //確定自己的進程標識
    starttime=MPI_Wtime();                  //記錄當前時間
    Initial("sample_input.in");             //讀取數據
	double* PP = new double[2*N];           //記錄天體的x,y坐標
	double* vv = new double[2*N];           //記錄天體的x,y方向
	int d=N/numprocs;                       //記錄每個進程分配到的天體的數目
	for(int time=0; time<1000;time+=1){     //進行循環計算1000次
		for(int i=myid*d;i<(myid+1)*d;i++){ //每個進程計算d個天體
			calculateForces(i);             //計算第i個天體的力
			moveBodies(i);                  //計算第i個天體新的位置和力
			PP[2*i]=P[i].x;                 //記錄天體的坐標,方向
			PP[2*i+1]=P[i].y;
			vv[2*i]=v[i].x;
			vv[2*i+1]=v[i].y;
		}
		if(myid==(numprocs-1)){             //如果是最后一個進程,把剩下的沒分配的天體進行計算
			for(int j=(myid+1)*d;j<N;j++){
				calculateForces(j);
				moveBodies(j);
				PP[2*j]=P[j].x;
				PP[2*j+1]=P[j].y;
				vv[2*j]=v[j].x;
				vv[2*j+1]=v[j].y;
			}
		}
		MPI_Barrier(MPI_COMM_WORLD);        //進行各進程同步
		for(int j=0;j<numprocs;j++){        //各進程依次廣播自己計算的位置
			MPI_Barrier(MPI_COMM_WORLD);    
			if (j!=(numprocs-1))	MPI_Bcast(&PP[j*2*d],2*d,MPI_DOUBLE,j,MPI_COMM_WORLD);    
			else MPI_Bcast(&PP[j*2*d],(N-j*d)*2,MPI_DOUBLE,j,MPI_COMM_WORLD);
			MPI_Barrier(MPI_COMM_WORLD);    //廣播完各進程同步
			for(int k=j*d;k<(j+1)*d;k++){   //收到廣播信息后,其他進程更新自己的值
				P[k].x=PP[2*k];
				P[k].y=PP[2*k+1];
			}
			MPI_Barrier(MPI_COMM_WORLD);    //更新完成后同步
		}
	}
	MPI_Barrier(MPI_COMM_WORLD);            //計算完1000后同步
	for(int j=0;j<numprocs;j++){            //各進程依次廣播自己的速度
		MPI_Barrier(MPI_COMM_WORLD);        //發送速度前同步
		if (j!=(numprocs-1))	MPI_Bcast(&vv[j*2*d],2*d,MPI_DOUBLE,j,MPI_COMM_WORLD);   
		else MPI_Bcast(&vv[j*2*d],(N-j*d)*2,MPI_DOUBLE,j,MPI_COMM_WORLD);
		MPI_Barrier(MPI_COMM_WORLD);        //廣播完同步
		for(int k=j*d;k<(j+1)*d;k++){       //收到廣播信息后,其他進程更新自己的值
			v[k].x=vv[2*k];
			v[k].y=vv[2*k+1];
		}
	}
	MPI_Barrier(MPI_COMM_WORLD);            //計算完成后同步
	if(myid==0)     End("result1000.data"); //如果是0進程,輸出運行結果到文件中
	endtime=MPI_Wtime();                    //計算每個進程整個程序的運行時間
	if(myid==0) cout<<"總的運行時間:"<<endtime-starttime<<"s"<<endl;     //輸出每個進程的運行時間 
	delete[] PP;
	delete[] vv; 
	MPI_Finalize();                         //結束MPI運算 
	return 0;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲va在线va天堂| 不卡欧美aaaaa| 成人午夜视频网站| 欧美人与禽zozo性伦| 国产日韩欧美综合在线| 视频一区视频二区中文字幕| 成人三级在线视频| 精品免费国产一区二区三区四区| 国产精品麻豆网站| 国产一区二区免费看| 欧美日韩国产综合一区二区三区| 国产欧美精品一区aⅴ影院| 视频一区国产视频| 欧美性色黄大片| 椎名由奈av一区二区三区| 国产一区二区三区美女| 3d动漫精品啪啪| 亚洲成人免费电影| 欧美亚洲高清一区| 亚洲精品视频在线观看免费| 国产成+人+日韩+欧美+亚洲| 日韩免费观看2025年上映的电影| 亚洲国产一区二区三区| 97久久超碰国产精品| 久久久精品国产免费观看同学| 日本伊人色综合网| 欧美一区二区三区视频在线| 亚洲高清免费在线| 欧美日韩亚洲综合一区二区三区| 亚洲精品一二三| 色综合久久中文综合久久牛| 亚洲国产岛国毛片在线| 国产福利一区二区三区在线视频| 精品日韩av一区二区| 麻豆一区二区99久久久久| 91精品国产欧美日韩| 奇米色777欧美一区二区| 欧美久久高跟鞋激| 日本欧美久久久久免费播放网| 欧美日韩激情一区| 男男视频亚洲欧美| 91精品一区二区三区在线观看| 丝袜a∨在线一区二区三区不卡| 欧美美女激情18p| 奇米影视一区二区三区小说| 日韩欧美你懂的| 国产精品影视在线观看| 国产人成一区二区三区影院| 国产99精品国产| 亚洲男人电影天堂| 欧美三级一区二区| 蜜臀久久99精品久久久久宅男| 精品美女一区二区三区| 国产·精品毛片| 一区二区三区影院| 日韩一区二区视频| 国产成人免费在线观看| 亚洲乱码国产乱码精品精98午夜| 欧美色老头old∨ideo| 日本va欧美va精品发布| 久久九九国产精品| 色婷婷国产精品综合在线观看| 天涯成人国产亚洲精品一区av| 欧美变态tickle挠乳网站| 国产精品正在播放| 亚洲午夜免费福利视频| 精品乱码亚洲一区二区不卡| 国产成人免费xxxxxxxx| 亚洲综合色视频| 亚洲精品在线电影| 欧美在线一二三四区| 激情成人综合网| 夜夜嗨av一区二区三区网页 | 久久精品国产第一区二区三区| 国产日产欧美精品一区二区三区| 91在线视频观看| 久久福利视频一区二区| 亚洲精品日日夜夜| 久久久久久97三级| 欧美日韩日日夜夜| 99久久精品国产毛片| 日产国产高清一区二区三区| 日韩美女久久久| 久久亚洲欧美国产精品乐播| 欧美日韩免费不卡视频一区二区三区 | 懂色av一区二区三区蜜臀| 亚洲午夜在线视频| 国产精品午夜在线观看| 精品日本一线二线三线不卡| 91搞黄在线观看| voyeur盗摄精品| 国内精品自线一区二区三区视频| 亚洲福利视频一区二区| 国产精品污污网站在线观看| 欧美一区二区美女| 精品视频在线看| 91在线小视频| 国产成a人亚洲| 国模大尺度一区二区三区| 性做久久久久久久免费看| 日韩理论在线观看| 中文字幕+乱码+中文字幕一区| 欧美r级在线观看| 日韩一区二区在线观看| 欧美午夜精品一区二区蜜桃| 色综合天天综合在线视频| 粉嫩绯色av一区二区在线观看| 久草精品在线观看| 美国三级日本三级久久99| 天堂资源在线中文精品| 一区二区日韩电影| 亚洲综合在线视频| 一区二区三区欧美日| 亚洲精品乱码久久久久久| 一区二区三区中文字幕在线观看| 亚洲视频香蕉人妖| 亚洲欧洲制服丝袜| 一区二区三区四区高清精品免费观看| 中文字幕一区三区| 亚洲精品午夜久久久| 亚洲一区中文日韩| 婷婷中文字幕综合| 蜜臀a∨国产成人精品| 麻豆精品国产传媒mv男同| 韩国在线一区二区| 国产精品主播直播| 99久久综合色| 欧美日韩在线观看一区二区| 欧美亚洲一区二区三区四区| 欧美日韩情趣电影| 欧美一区二区视频免费观看| 日韩女同互慰一区二区| 久久―日本道色综合久久| 中文字幕不卡在线播放| 综合欧美一区二区三区| 一区二区三区免费看视频| 亚洲第一在线综合网站| 伦理电影国产精品| 成人综合日日夜夜| 欧美特级限制片免费在线观看| 欧美日韩国产综合久久| 日韩精品中文字幕一区| 中文字幕国产一区| 无码av中文一区二区三区桃花岛| 麻豆传媒一区二区三区| 国产91在线看| 欧美日韩1区2区| 久久嫩草精品久久久精品一| 亚洲特黄一级片| 免费欧美高清视频| 成人aa视频在线观看| 欧美高清激情brazzers| 国产欧美日韩中文久久| 一区二区三区四区蜜桃| 九九精品一区二区| 欧美在线影院一区二区| 亚洲精品一区二区精华| 伊人开心综合网| 国产精品99久久久久久似苏梦涵 | 国产午夜精品福利| 一区二区欧美精品| 国产乱理伦片在线观看夜一区| 色中色一区二区| 久久综合色综合88| 天堂va蜜桃一区二区三区漫画版| 风间由美性色一区二区三区| 欧美日韩高清不卡| 中文字幕一区不卡| 国产美女在线观看一区| 欧美日韩国产综合一区二区 | 国产69精品一区二区亚洲孕妇| 在线观看日韩一区| 欧美国产精品一区| 韩日欧美一区二区三区| 欧美人与性动xxxx| 亚洲与欧洲av电影| 99久久99精品久久久久久| 久久久不卡影院| 久久精品国产一区二区| 欧美揉bbbbb揉bbbbb| 亚洲欧美日韩一区二区三区在线观看| 精品一区二区三区的国产在线播放| 欧美影视一区二区三区| 中文字幕制服丝袜成人av| 国产精品小仙女| 精品国产一区二区三区四区四| 丝袜亚洲精品中文字幕一区| 欧洲亚洲精品在线| 亚洲另类在线制服丝袜| 91小视频在线免费看| 国产精品女同一区二区三区| 国产精品中文字幕一区二区三区| 91精品国产综合久久精品app| 一区二区欧美在线观看| 在线精品视频一区二区三四 | 喷水一区二区三区| 51精品国自产在线| 青青草国产成人av片免费| 8x8x8国产精品| 免费美女久久99|