void matrix_mul::thread(void) { while (1) { readOperand(); multiplyMat(); sendResult(); } }
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; }