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

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

?? multigrid.cpp

?? pic 模擬程序!面向對象
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/**********************************************************************  see write up on multigrid  **********************************************************************/#include <math.h>#include "multigrid.h"#include "grid.h"#include "mg_utils.h"#ifdef MGRID_DEBUGextern "C" {#include <xgrafix.h>}#endif#ifdef _MSC_VERusing std::cout;using std::cerr;using std::endl;#endifextern "C++" void printf(char *);void GSRB(Scalar**, Scalar**, const intVector2&, Scalar***, const int&, const int&);Scalar Norm(Scalar**, const intVector2&,  Grid*);void Residual(Scalar**, Scalar**, Scalar**, const intVector2&, 							Scalar***, const int&, const int&);void Average(Scalar**, Scalar**, const intVector2&, const intVector2&, const int&, const int&);void CellAve(Scalar**, Scalar**, const intVector2&, const intVector2&);void Sample(Scalar**, Scalar**, const intVector2&, const intVector2&);void Interpolate(Scalar**, Scalar**, const intVector2&, const intVector2&, Scalar***);void Insert(Scalar**, Scalar**, const intVector2&, const intVector2&, Scalar***);Multigrid::Multigrid() {}Multigrid::Multigrid(Scalar **_epsi,Grid *grid)		  {  	intVector2 temp_upper = intVector2(grid->getJ(),grid->getK());	PeriodicFlagX1 = grid->getPeriodicFlagX1();	PeriodicFlagX2 = grid->getPeriodicFlagX2();	intVector2 temp_length = temp_upper;	BoltzmannShift = 0;	int tree_size1 = 1;	int size1 = temp_length.e1();	while ((size1%2)==0){		size1/=2;		tree_size1++;	}	int i;	if (size1==1) tree_size1--;	if (size1>=13)		cout << "Multigrid may not be the Poisson solve for you.  Try to have 2^N = Jmax and 2^M = Kmax." << endl;	int tree_size2 = 1;	int size2 = temp_length.e2();	while (size2%2==0){		size2/=2;		tree_size2++;	}	if (size2==1) tree_size2--;	if (size2>=13)		cout << "Multigrid may not be the Poisson solve for you.  Try to have 2^N = Jmax and 2^M = Kmax." << endl;	tree_size = MAX(tree_size1,tree_size2);//	tree_size = MIN(tree_size1,tree_size2);	if (tree_size == 0) tree_size = 1;	BadnessFactor = size1*size2;		//		 Allocating the memory for all the levels.	MultiGrid = new Grid*[tree_size];	length = new intVector2[tree_size];	//	setng up coeff for del(epsi(del())) operator	//        N	//     W  C  E	//        S	//	size1 = temp_length.e1();	size2 = temp_length.e2();	oldphi = new Scalar*[size1+1];	for (i=0;i<=size1;i++){		oldphi[i] = new Scalar[size2+1];		for (int j=0;j<=size2;j++)			oldphi[i][j]=0.0;	}		epsi_local = new Scalar**[tree_size];	resCoeff = new Scalar***[tree_size];	GSRBCoeff = new Scalar***[tree_size];	soln = new Scalar**[tree_size];	rhs = new Scalar**[tree_size];	res = new Scalar**[tree_size];	for (level=0; level < tree_size; level++){	  	soln[level] = new Scalar*[size1+1];		rhs[level] = new Scalar*[size1+1];		res[level] = new Scalar*[size1+1];		resCoeff[level] = new Scalar**[size1+1];		GSRBCoeff[level] = new Scalar**[size1+1];		for (i=0;i<=size1;i++){			soln[level][i] = new Scalar[size2+1];			rhs[level][i] = new Scalar[size2+1]; 			res[level][i] = new Scalar[size2+1]; 			resCoeff[level][i] = new Scalar*[size2+1];			GSRBCoeff[level][i] = new Scalar*[size2+1];			for (int j=0;j<=size2;j++){				resCoeff[level][i][j] = new Scalar[5];				GSRBCoeff[level][i][j] = new Scalar[5];			}		}		epsi_local[level] = new Scalar*[size1];		for (i=0;i<size1;i++)			epsi_local[level][i] = new Scalar[size2];				if ((size1%2==0)&&(size1>2))			size1/=2;		if ((size2%2==0)&&(size2>2))			size2/=2;	}		level = 0;	MultiGrid[level] = grid;	length[level] = temp_upper;	for (i=0;i<(length[0].e1());i++)		for (int j=0;j<(length[0].e2());j++)			epsi_local[level][i][j] = _epsi[i][j];	for (level=1; level < tree_size; level++){		if (((length[level-1].e1()%2==0)&&(length[level-1].e1()>2))&&				((length[level-1].e2()%2==0)&&(length[level-1].e2()>2))){			coarsen(length[level-1],length[level],2,2);			MultiGrid[level] = new Grid(length[level].e1(),length[level].e2(),						    GridCoarsen(MultiGrid[level-1],2,2),						    MultiGrid[level-1]->query_geometry(),						    MultiGrid[level-1]->getPeriodicFlagX1(),						    MultiGrid[level-1]->getPeriodicFlagX2());			for(int j=0;j<=length[level-1].e1(); j++)				for(int k=0;k<=length[level-1].e2(); k++){					Boundary *B = MultiGrid[level-1]->GetNodeBoundary()[j][k];					if (B!=NULL) 						MultiGrid[level]->SetNodeBoundary(B,j/2,k/2);					B = MultiGrid[level-1]->GetCellMask()[j][k];					if (B!=NULL) 						MultiGrid[level]->setCellMask(j/2,k/2,B);				}			}		else if ((length[level-1].e1()%2==0)&&(length[level-1].e1()>2)){			coarsen(length[level-1],length[level],2,0);			MultiGrid[level] = new Grid(length[level].e1(),length[level].e2(),						    GridCoarsen(MultiGrid[level-1],2,1),						    MultiGrid[level-1]->query_geometry(),						    MultiGrid[level-1]->getPeriodicFlagX1(),						    MultiGrid[level-1]->getPeriodicFlagX2());			for(int j=0;j<=length[level-1].e1(); j++)				for(int k=0;k<=length[level-1].e2(); k++){					Boundary *B = MultiGrid[level-1]->GetNodeBoundary()[j][k];					if (B!=NULL) 						MultiGrid[level]->SetNodeBoundary(B,j/2,k);					B = MultiGrid[level-1]->GetCellMask()[j][k];					if (B!=NULL) 						MultiGrid[level]->setCellMask(j/2,k,B);				}			}		else if ((length[level-1].e2()%2==0)&&(length[level-1].e2()>2)){			coarsen(length[level-1],length[level],0,2);			MultiGrid[level] = new Grid(length[level].e1(),length[level].e2(),						    GridCoarsen(MultiGrid[level-1],1,2),						    MultiGrid[level-1]->query_geometry(),						    MultiGrid[level-1]->getPeriodicFlagX1(),						    MultiGrid[level-1]->getPeriodicFlagX2());			for(int j=0;j<=length[level-1].e1(); j++)				for(int k=0;k<=length[level-1].e2(); k++){					Boundary *B = MultiGrid[level-1]->GetNodeBoundary()[j][k];//					BCTypes type;					if (B!=NULL) 						MultiGrid[level]->SetNodeBoundary(B,j,k/2);					B = MultiGrid[level-1]->GetCellMask()[j][k];					if (B!=NULL) 						MultiGrid[level]->setCellMask(j,k/2,B);			}			}				CellAve(epsi_local[level-1],epsi_local[level],						length[level-1],length[level]);			}#ifdef MGRID_DEBUG  char buffer[50];	x1_array = new Scalar*[tree_size];	x2_array = new Scalar*[tree_size];	Jmax = new int[tree_size];	Kmax = new int[tree_size];#endif	for (level=0; level < tree_size; level++){		int J,K;		J = length[level].e1();		K = length[level].e2();#ifdef MGRID_DEBUG		Jmax[level] = J+1;		Kmax[level] = K+1;		x1_array[level] = new Scalar[J+1];		x2_array[level] = new Scalar[K+1];		for(int j=0;j<=J;j++)			x1_array[level][j]=MultiGrid[level]->getMKS(j,0).e1();		for(int k=0;k<=K;k++)			x2_array[level][k]=MultiGrid[level]->getMKS(0,k).e2();#endif		for(int j=0;j<=J; j++)			for(int k=0;k<=K; k++){				for(int s=0; s<5; s++){					resCoeff[level][j][k][s] = 0;					GSRBCoeff[level][j][k][s] = 0;				}				BCTypes type;				Boundary *B = MultiGrid[level]->GetNodeBoundary()[j][k];				if (B!=NULL) 					type = B->getBCType();				else if 					(((0<k)&&(k<K))&&((0<j)&&(j<J))) type = FREESPACE;				else type = CONDUCTING_BOUNDARY;				MGSetCoeff(j,k,type,level);			}#ifdef MGRID_DEBUG		sprintf(buffer, "Residual level %d", level);		XGSet3D( "linlinlin","X1","X2",strdup(buffer),45.0,225.0,"closed",1,1,						1.0,1.0,1.0,1,1,1,0,1.0,0,1.0,0.0,1.0);		XGSurf( x1_array[level],x2_array[level],res[level], &Jmax[level], 					 &Kmax[level], 1 );		sprintf(buffer, "Soln level %d", level);		XGSet3D( "linlinlin","X1","X2",strdup(buffer),45.0,225.0,"closed",1,1,						1.0,1.0,1.0,1,1,1,0,1.0,0,1.0,0.0,1.0);		XGSurf( x1_array[level],x2_array[level],soln[level], &Jmax[level], 					 &Kmax[level], 1 );		sprintf(buffer, "RHS level %d", level);		XGSet3D( "linlinlin","X1","X2",strdup(buffer),45.0,225.0,"closed",1,1,						1.0,1.0,1.0,1,1,1,0,1.0,0,1.0,0.0,1.0);		XGSurf( x1_array[level],x2_array[level],rhs[level], &Jmax[level], 					 &Kmax[level], 1 );#endif	}	for (int l=0; l < tree_size; l++)		for(i=0;i<=length[l].e1(); i++)			for(int j=0;j<=length[l].e2(); j++){				soln[l][i][j] = 0.0;				rhs[l][i][j] = 0.0;				res[l][i][j] = 0.0;			}// the lower level grid are not needed anymore all the needed info is saved locally// Boltzmann model needs it//	for (level=1; level < tree_size; level++) //MultiGrid[0] is grid from fields//		delete MultiGrid[level];	//	delete [] MultiGrid;}/******************************************************/Multigrid::~Multigrid(){	for (level=0; level < tree_size; level++)		for (int j=0; j<=length[level].e1();j++)			for (int k=0; k<=length[level].e2();k++){				delete [] resCoeff[level][j][k];				delete [] GSRBCoeff[level][j][k];			}	for (level=0; level < tree_size; level++) {		for (int j=0; j<=length[level].e1();j++){			delete [] soln[level][j];			delete [] res[level][j];			delete [] rhs[level][j];			delete [] resCoeff[level][j];			delete [] GSRBCoeff[level][j];		}	}		for (level=0; level < tree_size; level++){		delete [] soln[level];		delete [] res[level];		delete [] rhs[level];		delete [] resCoeff[level];		delete [] GSRBCoeff[level];	}	delete [] soln;	delete [] res;	delete [] rhs;	delete [] resCoeff;	delete [] GSRBCoeff;	for (level=1; level < tree_size; level++) //MultiGrid[0] is grid from fields		delete MultiGrid[level];		delete [] MultiGrid;	for (int j=0; j<=length[0].e1();j++)			delete [] oldphi[j];	delete [] oldphi;	for (level=0; level < tree_size; level++)		for (int j=0; j<length[level].e1();j++)			delete [] epsi_local[level][j];	for (level=0; level < tree_size; level++)		delete [] epsi_local[level];	delete [] epsi_local;	delete [] length;}/******************************************************/void Multigrid::mgrelax()   // Recursive relaxation step.{  int i;	//     Call point relaxation step.	for (i=0; i<(20*level+20); i++)		GSRB(soln[level], rhs[level], length[level], GSRBCoeff[level], 				 PeriodicFlagX1, PeriodicFlagX2);	//		 Check to see whether the coarsest level has been reached.	//		 If not, call mgrelax on the next level.	if ((level+1)<tree_size){//	if (level<MIN(1,tree_size-1)){		//			  Initialize coarse grid correction to zero.		for (i = 0;i <= length[level+1].e1(); i++) 			for (int j = 0;j <= length[level+1].e2(); j++) 				soln[level+1][i][j] = 0.;		//       compute residual on fine grid.		Residual(soln[level],rhs[level],res[level],length[level],resCoeff[level],						 PeriodicFlagX1, PeriodicFlagX2);		//		  Average residual onto coarse grid.		Average(res[level],rhs[level+1], length[level], length[level+1], 						PeriodicFlagX1, PeriodicFlagX2);		//		  Call mgrelax recursively on coarse grid data.				level++;		mgrelax();		level--;		//		  Interpolate correction onto fine grid.		Interpolate(soln[level],soln[level+1],length[level], length[level+1], resCoeff[level]);	}	//	 Call relaxation step again, and exit.	for (i=0; i<(4*level*level+2); i++){//	for (i=0; i<2; i++)		GSRB(soln[level],rhs[level],length[level],GSRBCoeff[level],				 PeriodicFlagX1, PeriodicFlagX2);	}}Scalar Multigrid::errorest(){	Scalar norm;	Residual(soln[0],rhs[0],res[0],length[0],resCoeff[0], PeriodicFlagX1, PeriodicFlagX2);	norm = Norm(res[0],length[0],MultiGrid[0]);	return norm;}int Multigrid::solve(Scalar **phi, Scalar **rho, int itermax, Scalar tol) {	register int i,j;	for (i = 0; i <= length[0].e1(); i++) 		for (j = 0; j <= length[0].e2(); j++) {			if (GSRBCoeff[0][i][j][SOURCE]==0.0)				soln[0][i][j] = phi[i][j];			else				soln[0][i][j] = 0.0;			rhs[0][i][j] = rho[i][j];		}	Scalar error0 = errorest();	Scalar error = error0;	if (error0!=0){			for (i = 0; i <= length[0].e1(); i++) 			for (j = 0; j <= length[0].e2(); j++) 				if (!(GSRBCoeff[0][i][j][SOURCE]==0.0)){//					soln[0][i][j] = phi[i][j];					soln[0][i][j] = oldphi[i][j];				}		int iter2 = 10*BadnessFactor*itermax;		level = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产日韩精品| 亚洲成av人影院| wwwwxxxxx欧美| 亚洲精品在线免费播放| 精品国产电影一区二区| 精品噜噜噜噜久久久久久久久试看| 欧美日韩大陆在线| 日韩欧美一二三区| 日韩一区二区高清| 日韩一区二区三区av| 日韩欧美一区中文| 国产区在线观看成人精品 | 国产1区2区3区精品美女| 国产一区久久久| 99综合电影在线视频| 色94色欧美sute亚洲线路一ni| 色婷婷av久久久久久久| 欧美日韩日本视频| 久久久精品人体av艺术| 亚洲欧洲日韩在线| 日韩中文字幕1| 国模冰冰炮一区二区| 99久久777色| 日韩欧美中文字幕一区| 中文字幕乱码日本亚洲一区二区 | 成人短视频下载| 在线观看一区二区精品视频| 日韩一级视频免费观看在线| 久久免费国产精品| 亚洲高清免费观看| 国产成人综合亚洲91猫咪| 欧美在线免费播放| 久久久久久久久久久黄色| 亚洲欧美成aⅴ人在线观看 | 国产91精品精华液一区二区三区| 97久久超碰精品国产| 日韩视频中午一区| 亚洲精品videosex极品| 精品一区二区三区在线视频| 成人国产精品免费| 欧美日本国产一区| 国产精品毛片久久久久久久| 欧美aaaaaa午夜精品| 色婷婷av一区二区三区软件 | 国产精品自拍在线| 欧美亚洲精品一区| 国产欧美久久久精品影院| 丝袜美腿高跟呻吟高潮一区| 99视频国产精品| 日韩欧美国产午夜精品| 亚洲一区在线看| 99久久综合99久久综合网站| 精品国内片67194| 热久久国产精品| 欧美色图天堂网| 亚洲男人的天堂在线aⅴ视频| 国产一区二区三区在线观看精品 | 亚洲三级视频在线观看| 国产一区二区三区在线观看免费 | 97超碰欧美中文字幕| 久久精品网站免费观看| 男男成人高潮片免费网站| 欧美午夜一区二区三区免费大片| 自拍偷拍国产精品| 94-欧美-setu| 中文字幕日韩一区| 91网址在线看| 亚洲精选一二三| 色94色欧美sute亚洲线路二| 亚洲精品高清在线观看| 91麻豆国产自产在线观看| 1024成人网| 在线观看区一区二| 午夜精品久久久久久久99樱桃| 在线免费不卡电影| 一区二区国产视频| 欧美日韩一区二区三区四区五区| 亚洲一区二区在线视频| 欧美日韩精品欧美日韩精品| 一区二区三区91| 制服丝袜亚洲色图| 精品在线亚洲视频| 国产亚洲一区二区三区四区 | 国内外成人在线视频| 日韩欧美精品在线| 精品系列免费在线观看| 久久综合狠狠综合久久综合88| 国产伦精品一区二区三区在线观看| 久久午夜国产精品| av午夜精品一区二区三区| 亚洲精品免费在线| 欧美一区三区四区| 国产精选一区二区三区 | 欧美日产国产精品| 美日韩一区二区| 久久毛片高清国产| 91日韩精品一区| 日本不卡视频在线| 国产精品免费视频网站| 欧美午夜影院一区| 国产精品1区2区3区在线观看| 国产精品国产自产拍在线| 欧美日韩精品一区二区三区蜜桃 | 亚洲一区二区精品3399| 欧美一区二区在线免费播放| 国产传媒久久文化传媒| 亚洲精品va在线观看| 欧美电影精品一区二区| caoporen国产精品视频| 日本亚洲一区二区| 成人免费在线播放视频| 精品久久久影院| 色婷婷久久久久swag精品| 蜜臀av性久久久久蜜臀aⅴ| 国产日韩三级在线| 日韩一区二区三区免费看| 成人av综合在线| 日韩av电影天堂| 国产精品福利影院| 精品日韩av一区二区| 99精品久久只有精品| 精品一区免费av| 亚洲成av人片一区二区三区 | 欧美日韩中文另类| 成人美女视频在线看| 麻豆一区二区99久久久久| 亚洲欧洲国产日本综合| ww亚洲ww在线观看国产| 欧美三级三级三级爽爽爽| 成年人国产精品| 国产乱理伦片在线观看夜一区| 日产精品久久久久久久性色| 一区二区欧美精品| 亚洲老司机在线| 中文字幕欧美一区| 国产精品传媒在线| 国产欧美一区二区在线| 久久久一区二区三区捆绑**| 日韩一级片网站| 91麻豆精品国产91久久久久| 欧美色电影在线| 99视频一区二区| 9色porny自拍视频一区二区| 国产成人精品免费一区二区| 国内一区二区在线| 国产一区二区伦理| 久久99蜜桃精品| 日韩和欧美的一区| 日本一道高清亚洲日美韩| 三级成人在线视频| 视频一区中文字幕| 麻豆精品视频在线| 久久精品国产99| 国内久久婷婷综合| 国产成人丝袜美腿| 97成人超碰视| 欧美午夜在线观看| 制服丝袜亚洲网站| 337p粉嫩大胆噜噜噜噜噜91av| 日韩精品一区在线| 国产亚洲欧美日韩俺去了| 久久久电影一区二区三区| 国产精品视频线看| 亚洲人吸女人奶水| 亚洲高清视频中文字幕| 美女高潮久久久| 国产美女视频91| 成人福利视频在线| 欧美在线不卡视频| 精品福利一二区| 成人欧美一区二区三区小说| 亚洲成人一二三| 精品影院一区二区久久久| 成人中文字幕合集| 欧美视频一区二区三区四区| 精品日韩成人av| 国产精品久久久久久久午夜片| 亚洲欧美激情插| 蜜桃久久av一区| 99久久综合狠狠综合久久| 欧美日韩国产综合一区二区三区| 欧美本精品男人aⅴ天堂| 欧美国产欧美综合| 日韩高清一级片| 99久久婷婷国产| 日韩色视频在线观看| 亚洲欧美日韩国产综合在线| 美女视频黄频大全不卡视频在线播放| 成人免费av在线| 日韩精品专区在线影院重磅| 亚洲色图清纯唯美| 久久66热偷产精品| 在线精品视频免费播放| 久久综合狠狠综合| 日韩不卡免费视频| 91免费看片在线观看| 欧美大片在线观看| 亚洲不卡av一区二区三区| 懂色中文一区二区在线播放| 日韩亚洲欧美高清|