virtual void apply(const NumericVector<Real> & x, NumericVector<Real> & y) override
 {
   y.pointwise_mult(_diag_inverse, x);
 }
void TensorShellMatrix<T>::get_diagonal (NumericVector<T>& dest) const
{
  dest.pointwise_mult(_v,_w);
}