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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? multigrid.cpp

?? pic 模擬程序!面向?qū)ο?
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/**********************************************************************  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;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品国产成人国产三级粉色 | 在线免费观看成人短视频| 国产精品高清亚洲| 91在线小视频| 亚洲成人www| 欧美一区二区三区系列电影| 极品少妇一区二区| 国产精品入口麻豆九色| 99精品视频在线播放观看| 亚洲自拍偷拍综合| 日韩一区二区在线观看视频| 国产精品2024| 亚洲精品乱码久久久久| 91精品国产色综合久久不卡电影 | 欧美男同性恋视频网站| 捆绑紧缚一区二区三区视频| 久久久久久免费网| 一本一道久久a久久精品综合蜜臀| 午夜精品久久久久久久久| 精品国产一区二区三区四区四| 国产精品亚洲午夜一区二区三区| 国产精品成人免费在线| 91精品婷婷国产综合久久性色| 国产在线精品免费av| 亚洲欧洲另类国产综合| 欧美一级免费观看| 99久久久久免费精品国产| 五月婷婷激情综合| 中文一区二区在线观看| 91精品国产福利在线观看| 粉嫩13p一区二区三区| 亚洲午夜精品17c| 久久综合久久久久88| 色视频一区二区| 韩国中文字幕2020精品| 亚洲自拍偷拍图区| 中文字幕av资源一区| 欧美丰满嫩嫩电影| 色综合天天综合网天天看片| 国内成+人亚洲+欧美+综合在线| 夜夜爽夜夜爽精品视频| 欧美激情中文不卡| 日韩一区二区不卡| 欧美视频一区二区三区在线观看 | 亚洲永久免费av| 久久久精品免费免费| 欧美精品丝袜中出| 91片黄在线观看| 国产成人亚洲综合色影视| 热久久久久久久| 亚洲国产成人高清精品| 亚洲欧洲精品成人久久奇米网| 精品久久免费看| 欧美一级在线观看| 欧美日韩精品欧美日韩精品一| 99久久伊人精品| 成人av综合在线| 国产91对白在线观看九色| 裸体一区二区三区| 亚洲成国产人片在线观看| 一区二区三区美女| 自拍偷拍欧美精品| 国产精品另类一区| 中文字幕第一区第二区| 国产欧美精品一区| 国产欧美精品一区二区色综合| 精品处破学生在线二十三| 欧美一级在线视频| 欧美变态口味重另类| 日韩视频不卡中文| 日韩欧美一区在线| 精品卡一卡二卡三卡四在线| 欧美va亚洲va香蕉在线| 91精品在线观看入口| 欧美一二三四在线| 日韩精品在线一区二区| 久久伊人蜜桃av一区二区| 欧美精品一区二区三区蜜桃 | 美女视频黄a大片欧美| 美女网站在线免费欧美精品| 人人精品人人爱| 国产专区综合网| 丁香另类激情小说| 福利一区福利二区| 色婷婷av久久久久久久| 欧美三级资源在线| 欧美一级生活片| 久久久精品综合| 自拍偷自拍亚洲精品播放| 亚洲欧美另类图片小说| 亚欧色一区w666天堂| 热久久免费视频| 国产高清久久久| 成人久久视频在线观看| 在线视频一区二区三区| 欧美日韩dvd在线观看| 日韩精品一区二区三区三区免费| 亚洲精品一区二区三区在线观看| 久久久久99精品一区| 亚洲人成伊人成综合网小说| 亚洲福利视频导航| 国产综合久久久久久久久久久久| 成人av网站在线| 欧美日韩国产免费一区二区| 26uuu色噜噜精品一区二区| 国产精品激情偷乱一区二区∴| 亚洲日本一区二区三区| 丝袜亚洲另类丝袜在线| 国内欧美视频一区二区| 色综合网站在线| 精品精品欲导航| 一区免费观看视频| 免费久久99精品国产| 懂色av噜噜一区二区三区av| 一本久道中文字幕精品亚洲嫩| 日韩欧美自拍偷拍| 综合激情网...| 欧美a一区二区| 99久久夜色精品国产网站| 欧美一区二区三区喷汁尤物| 国产精品美女久久久久久久网站| 三级欧美在线一区| 成人久久18免费网站麻豆| 欧美一区二区免费观在线| 中文字幕一区二区三区乱码在线| 日本vs亚洲vs韩国一区三区二区 | 亚洲欧洲三级电影| 精品一区二区三区蜜桃| 91福利精品视频| 中文字幕免费不卡在线| 日本v片在线高清不卡在线观看| www.性欧美| 久久影院视频免费| 日韩国产欧美视频| 色婷婷久久一区二区三区麻豆| 久久久午夜精品| 日韩国产精品久久| 欧美亚洲国产一区二区三区| 国产精品天干天干在线综合| 久久97超碰国产精品超碰| 欧美视频一二三区| 亚洲欧美日韩在线播放| 国产91清纯白嫩初高中在线观看 | 午夜精品一区二区三区免费视频| 成av人片一区二区| 国产女主播在线一区二区| 韩国av一区二区三区在线观看| 欧美精品在线一区二区| 亚洲国产另类av| 欧美日韩在线直播| 一区二区三区.www| 色综合色狠狠天天综合色| 国产精品电影一区二区| 高清在线成人网| 久久精品男人天堂av| 国产揄拍国内精品对白| 欧美mv日韩mv| 九色porny丨国产精品| 日韩欧美一级二级三级| 日韩av在线发布| 日韩欧美在线1卡| 麻豆精品一区二区av白丝在线| 欧美一级理论性理论a| 日韩精品视频网| 日韩三级电影网址| 轻轻草成人在线| 日韩免费看的电影| 国产又粗又猛又爽又黄91精品| 欧美电影精品一区二区 | 国产精品夜夜嗨| 国产喷白浆一区二区三区| 粉嫩aⅴ一区二区三区四区五区| 欧美—级在线免费片| 99精品欧美一区二区三区小说| 中文字幕中文字幕在线一区| 97国产一区二区| 亚洲一区二区高清| 欧美一区在线视频| 国产精品一区久久久久| 国产精品女同互慰在线看| 99久久精品免费看国产免费软件| 综合久久一区二区三区| 欧美日韩一区二区三区在线 | 国产欧美一区二区精品忘忧草| 成人综合日日夜夜| 亚洲素人一区二区| 欧美日韩亚洲综合一区二区三区| 日韩国产欧美在线播放| 久久麻豆一区二区| 93久久精品日日躁夜夜躁欧美| 亚洲一区影音先锋| 日韩精品最新网址| 成人福利视频在线| 亚洲国产精品久久人人爱| 欧美刺激脚交jootjob| 成熟亚洲日本毛茸茸凸凹| 亚洲一区二区欧美| 久久在线观看免费| 在线亚洲免费视频| 国产在线看一区|