void ExampleBasisSystem::update_D(
  const MatrixOpNonsing   &C
  ,const MatrixOp         &N
  ,MatrixOp               *D
  ,EMatRelations          mat_rel
  ) const
{
  using Teuchos::dyn_cast;

  TEUCHOS_TEST_FOR_EXCEPTION(
    D == NULL, std::logic_error
    ,"ExampleBasisSystem::update_D(...): Error!" );

  const MatrixSymDiagStd
    &C_aggr = dyn_cast<const MatrixSymDiagStd>(C),
    &N_aggr = dyn_cast<const MatrixSymDiagStd>(N);
  MatrixSymDiagStd
    &D_sym_diag = dyn_cast<MatrixSymDiagStd>(*D);
  if( D_sym_diag.rows() != C.rows() )
    D_sym_diag.initialize(
      this->space_x()->sub_space(this->var_dep())->create_member()
      );
  AbstractLinAlgPack::ele_wise_divide(                           // D_diag = - N_diag ./ C_diag
    -1.0, N_aggr.diag(), C_aggr.diag(), &D_sym_diag.diag() );  // ...
}
void LinAlgOpPack::V_InvMtV(
  DVector* y, const MatrixOpNonsing& M
  ,BLAS_Cpp::Transp M_trans, const SpVectorSlice& x
  )
{
  y->resize(M.rows());
  LinAlgOpPack::V_InvMtV( &(*y)(), M, M_trans, x );
}