Example #1
0
void matrix_mul::thread(void) {
 while (1) {
  readOperand();
  multiplyMat();
  sendResult();
 }
}
Example #2
0
void levelGen<T>::generateLevelsGalerkinCoarsening(vector<FixedSparseMatrix<T> *> &A_L, 
	vector<FixedSparseMatrix<T> *> &R_L, 
	vector<FixedSparseMatrix<T> *> &P_L, 
	vector<Vec3i> &S_L, int & total_level, 
	FixedSparseMatrix<T> &A, 
	int ni,int nj,int nk)
{
	cout<<"building levels ...... "<<endl;
	A_L.resize(0);
	R_L.resize(0);
	P_L.resize(0);
	S_L.resize(0);
	total_level = 1;
	A_L.push_back(&A);
	S_L.push_back(Vec3i(ni,nj,nk));
	int nni = ni, nnj = nj, nnk = nk;
	unsigned int unknowns = ni*nj*nk;
	while (unknowns > 16*16*16)
	{
		A_L.push_back(new FixedSparseMatrix<T>);
		R_L.push_back(new FixedSparseMatrix<T>);
		P_L.push_back(new FixedSparseMatrix<T>);
		nni = ceil((float)nni/2.0);
		nnj = ceil((float)nnj/2.0);
		nnk = ceil((float)nnk/2.0);

		S_L.push_back(Vec3i(nni,nnj,nnk));
		unknowns = nni*nnj*nnk;
		total_level++;
	}

	for (int i=0;i<total_level-1;i++)
	{
		generateRP(*(A_L[i]), *(R_L[i]),*(P_L[i]),S_L[i].v[0], S_L[i].v[1],S_L[i].v[2]);
		FixedSparseMatrix<T> temp;
		multiplyMat(*(A_L[i]),*(P_L[i]),temp,1.0);
		multiplyMat(*(R_L[i]),temp, *(A_L[i+1]),0.5);
		temp.resize(0);
		temp.clear();
	}

	cout<<"build levels done"<<endl;
}