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

Definition at line 192 of file matmgnt3d.cpp.

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

00193 {
00194   NumTns<DblNumMat>& _DE2DC = (_hom==true) ? _dwnEqu2DwnChk[0] : _dwnEqu2DwnChk[l];
00195   double R = (_hom==true) ? 1 : 1.0/pow(2.0, l);  //OffTns<DblNumMat>& _DwnEqu2DwnChk = _de2DwnChk[l];  double R       = 1.0/pow(2.0, l);
00196   if(_DE2DC.m()==0)      _DE2DC.resize(2,2,2);
00197   DblNumMat& _DE2DCii = _DE2DC(idx[0], idx[1], idx[2]);
00198   
00199   //---------compute matrix
00200   if(_DE2DCii.m()==0) {  //cerr<<"DwnEqu2DwnChk compute"<<endl;
00201          _DE2DCii.resize(plnDatSze(DC), plnDatSze(DE)); //_memused[3] += plndncnum()*dof()*plndnenum()*dof()*sizeof(double);
00202          DblNumMat denPos(dim(),samPos(DE).n());                  clear(denPos);         iC( daxpy(R, samPos(DE), denPos) ); //scale
00203          DblNumMat chkPos(dim(),samPos(DC).n());                  clear(chkPos);         iC( daxpy(0.5*R, samPos(DC), chkPos) ); //scale
00204          for(int i=0; i<dim(); i++) for(int j=0; j<samPos(DC).n(); j++) chkPos(i,j) = chkPos(i,j) + (double(idx(i))-0.5)*R;
00205          
00206          iC( _knl.kernel(denPos, denPos, chkPos, _DE2DCii) );
00207   }
00208   //---------matvec
00209   if(_hom==true) {
00210          int srcDOF = this->srcDOF();
00211          DblNumVec tmpDen(srcDOF*samPos(DE).n(), false, _wsbuf);         clear(tmpDen);
00212          vector<double> sclvec(srcDOF);  for(int s=0; s<srcDOF; s++)            sclvec[s] = pow(2.0, l*_degVec[s]);
00213          int cnt = 0;
00214          for(int i=0; i<samPos(DE).n(); i++)
00215                 for(int s=0; s<srcDOF; s++) {
00216                   tmpDen(cnt) = den(cnt) * sclvec[s];
00217                   cnt++;
00218                 }
00219          iC( dgemv(1.0, _DE2DCii, tmpDen, 1.0, chk) );
00220   } else {
00221          iC( dgemv(1.0, _DE2DCii, den, 1.0, chk) );
00222   }
00223   return (0);
00224 }


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