int 
Stokhos::MPMeanBasedPreconditioner::
Apply(const Epetra_MultiVector& Input, Epetra_MultiVector& Result) const
{
  EpetraExt::BlockMultiVector mp_input(View, *base_map, Input);
  EpetraExt::BlockMultiVector mp_result(View, *base_map, Result);
  for (int i=0; i<num_mp_blocks; i++) {
    mean_prec->Apply(*(mp_input.GetBlock(i)), *(mp_result.GetBlock(i)));
  }

  return 0;
}
int
Stokhos::BlockDiagonalOperator::
Apply(const Epetra_MultiVector& Input, Epetra_MultiVector& Result) const
{
  Teuchos::RCP<const Epetra_BlockMap> input_base_map, result_base_map;
  if (useTranspose) {
    input_base_map = range_base_map;
    result_base_map = domain_base_map;
  }
  else {
    input_base_map = domain_base_map;
    result_base_map = range_base_map;
  }
  EpetraExt::BlockMultiVector mp_input(View, *input_base_map, Input);
  EpetraExt::BlockMultiVector mp_result(View, *result_base_map, Result);
  for (int i=0; i<num_mp_blocks; i++) {
    (*block_ops)[i].Apply(*(mp_input.GetBlock(i)), *(mp_result.GetBlock(i)));
  }

  return 0;
}