int MatMgnt3d::UpwEqu2UpwChk_dgemv int  level,
Index3  ii,
const DblNumVec &  ,
DblNumVec & 
 

Definition at line 125 of file matmgnt3d.cpp.

References _degVec, _hom, _knl, _upwEqu2UpwChk, _wsbuf, dim(), Kernel3d::kernel(), plnDatSze(), samPos(), srcDOF(), and UC.

00126 {
00127   NumTns<DblNumMat>& _UE2UC = (_hom==true) ? _upwEqu2UpwChk[0] : _upwEqu2UpwChk[l];
00128   double R = (_hom==true) ? 1 : 1.0/pow(2.0, l);  
00129   if(_UE2UC.m()==0)      _UE2UC.resize(2,2,2);
00130   DblNumMat& _UE2UCii = _UE2UC(idx(0), idx(1), idx(2));
00131   //---------compute matrix
00132   if(_UE2UCii.m()==0) {  //cerr<<"UpwEqu2UpwChk compute"<<endl;
00133          _UE2UCii.resize(plnDatSze(UC), plnDatSze(UE)); //_memused[1] += plnnum(UC)*dof()*plnnum(UE)*dof()*sizeof(double);
00134          DblNumMat chkPos(dim(),samPos(UC).n());         clear(chkPos);  iC( daxpy(2.0*R, samPos(UC), chkPos) ); //scale
00135          DblNumMat denPos(dim(),samPos(UE).n());         clear(denPos);  iC( daxpy(R, samPos(UE), denPos) ); //scale
00136          for(int i=0; i<dim(); i++) for(int j=0; j<samPos(UE).n(); j++) denPos(i,j) = denPos(i,j) + (2*idx(i)-1)*R;//shift
00137          
00138          iC( _knl.kernel(denPos, denPos, chkPos, _UE2UCii) );
00139   }
00140   //---------matvec
00141   if(_hom==true) {
00142          int srcDOF = this->srcDOF();
00143          DblNumVec tmpDen(srcDOF*samPos(UE).n(), false, _wsbuf);         clear(tmpDen);
00144          vector<double> sclvec(srcDOF);  for(int s=0; s<srcDOF; s++)            sclvec[s] = pow(2.0, l*_degVec[s]);
00145          int cnt = 0;
00146          for(int i=0; i<samPos(UE).n(); i++)
00147                 for(int s=0; s<srcDOF; s++) {
00148                   tmpDen(cnt) = den(cnt) * sclvec[s];
00149                   cnt++;
00150                 }
00151          iC( dgemv(1.0, _UE2UCii, tmpDen, 1.0, chk) );
00152   } else {
00153          iC( dgemv(1.0, _UE2UCii, den, 1.0, chk) );
00154   }
00155   return (0);
00156 }


Generated on Sun Dec 4 19:24:41 2005 for fmm3d by  doxygen 1.4.5