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; }