46#include "Teuchos_Assert.hpp"
54Teuchos::RCP<Stokhos::MPPreconditioner>
56build(
const Teuchos::RCP<const EpetraExt::MultiComm>& mp_comm,
58 const Teuchos::RCP<const Epetra_Map>& base_map,
59 const Teuchos::RCP<const Epetra_Map>& mp_map)
61 Teuchos::RCP<Stokhos::MPPreconditioner> mp_prec;
62 std::string prec_method = params->get(
"Preconditioner Method",
64 if (prec_method ==
"Block Diagonal") {
65 Teuchos::RCP<Stokhos::AbstractPreconditionerFactory> prec_factory =
66 buildPointPreconditionerFactory();
68 mp_comm, num_mp_blocks,
69 base_map, mp_map, prec_factory,
72 else if (prec_method ==
"Mean-based") {
73 Teuchos::RCP<Stokhos::AbstractPreconditionerFactory> prec_factory =
74 buildPointPreconditionerFactory();
76 mp_comm, num_mp_blocks,
77 base_map, mp_map, prec_factory,
80 else if (prec_method ==
"None")
81 mp_prec = Teuchos::null;
83 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
84 "Error! Unknown preconditioner method " << prec_method
90Teuchos::RCP<Stokhos::AbstractPreconditionerFactory>
94 std::string prec_name =
95 params->get(
"MP Preconditioner Type",
"Ifpack");
96 Teuchos::RCP<Teuchos::ParameterList> precParams =
97 Teuchos::rcp(¶ms->sublist(
"MP Preconditioner Parameters"),
false);
A multi-point preconditioner based on applying the inverse of the diagonal.
A multi-point preconditioner based on applying the inverse of the mean.
MPPreconditionerFactory(const Teuchos::RCP< Teuchos::ParameterList > ¶ms)
Constructor.
virtual Teuchos::RCP< Stokhos::MPPreconditioner > build(const Teuchos::RCP< const EpetraExt::MultiComm > &mp_comm, int num_mp_blocks, const Teuchos::RCP< const Epetra_Map > &base_map, const Teuchos::RCP< const Epetra_Map > &mp_map)
Build preconditioner operator.
Teuchos::RCP< Stokhos::AbstractPreconditionerFactory > buildPointPreconditionerFactory()
Build preconditioner factory for each point.
An class for building preconditioners.