52 #include "Teuchos_Assert.hpp" 65 return prec_method !=
"None";
68 Teuchos::RCP<Stokhos::SGPreconditioner>
70 build(
const Teuchos::RCP<const EpetraExt::MultiComm>& sg_comm,
72 const Teuchos::RCP<const Stokhos::EpetraSparse3Tensor>& epetraCijk,
73 const Teuchos::RCP<const Epetra_Map>& base_map,
74 const Teuchos::RCP<const Epetra_Map>& sg_map)
76 Teuchos::RCP<Stokhos::SGPreconditioner> sg_prec;
78 if (prec_method ==
"Mean-based") {
79 Teuchos::RCP<Stokhos::AbstractPreconditionerFactory> prec_factory =
80 buildMeanPreconditionerFactory();
82 sg_comm, sg_basis, epetraCijk,
83 base_map, sg_map, prec_factory,
86 else if (prec_method ==
"Approximate Gauss-Seidel") {
87 Teuchos::RCP<Stokhos::AbstractPreconditionerFactory> prec_factory =
88 buildMeanPreconditionerFactory();
90 sg_comm, sg_basis, epetraCijk,
91 base_map, sg_map, prec_factory,
94 else if (prec_method ==
"Approximate Jacobi") {
95 Teuchos::RCP<Stokhos::AbstractPreconditionerFactory> prec_factory =
96 buildMeanPreconditionerFactory();
98 sg_comm, sg_basis, epetraCijk,
99 base_map, sg_map, prec_factory,
102 else if (prec_method ==
"Approximate Schur Complement") {
103 Teuchos::RCP<Stokhos::AbstractPreconditionerFactory> prec_factory =
104 buildMeanPreconditionerFactory();
106 sg_comm, sg_basis, epetraCijk,
107 base_map, sg_map, prec_factory,
110 #ifdef HAVE_STOKHOS_NOX 111 else if (prec_method ==
"Gauss-Seidel") {
112 Teuchos::RCP<NOX::Epetra::LinearSystem> det_solver =
113 params->get< Teuchos::RCP<NOX::Epetra::LinearSystem> >(
"Deterministic Solver");
114 sg_prec = Teuchos::rcp(
new Stokhos::GaussSeidelPreconditioner(
115 sg_comm, sg_basis, epetraCijk,
116 base_map, sg_map, det_solver,
120 else if (prec_method ==
"Kronecker Product") {
121 Teuchos::RCP<Stokhos::AbstractPreconditionerFactory> mean_prec_factory =
122 buildMeanPreconditionerFactory();
123 std::string G_prec_name =
124 params->get(
"G Preconditioner Type",
"Ifpack");
125 Teuchos::RCP<Teuchos::ParameterList> G_prec_params =
126 Teuchos::rcp(&(params->sublist(
"G Preconditioner Parameters")),
false);
127 Teuchos::RCP<Stokhos::AbstractPreconditionerFactory> G_prec_factory =
131 sg_comm, sg_basis, epetraCijk, base_map, sg_map,
132 mean_prec_factory, G_prec_factory, params));
134 else if (prec_method ==
"Fully Assembled") {
135 std::string prec_name =
136 params->get(
"Fully Assembled Preconditioner Type",
"Ifpack");
137 Teuchos::RCP<Teuchos::ParameterList> prec_params =
138 Teuchos::rcp(&(params->sublist(
"Fully Assembled Preconditioner Parameters")),
false);
139 Teuchos::RCP<Stokhos::AbstractPreconditionerFactory> prec_factory =
142 prec_factory, params));
144 else if (prec_method ==
"None")
145 sg_prec = Teuchos::null;
147 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
148 "Error! Unknown preconditioner method " << prec_method
149 <<
"." << std::endl);
154 Teuchos::RCP<Stokhos::AbstractPreconditionerFactory>
158 std::string prec_name =
159 params->get(
"Mean Preconditioner Type",
"Ifpack");
160 Teuchos::RCP<Teuchos::ParameterList> precParams =
161 Teuchos::rcp(¶ms->sublist(
"Mean Preconditioner Parameters"),
false);
A stochastic preconditioner based on applying one iteration of approximate Gauss-Seidel.
A stochastic preconditioner based on applying two iterations of approximate Jacobi.
A stochastic preconditioner based on applying the inverse of the mean.
virtual bool isPrecSupported() const
Return whether a preconditioner will be supported.
A stochastic preconditioner based on applying a preconditioner to the fully assembled operator...
SGPreconditionerFactory(const Teuchos::RCP< Teuchos::ParameterList > ¶ms)
Constructor.
virtual Teuchos::RCP< Stokhos::SGPreconditioner > build(const Teuchos::RCP< const EpetraExt::MultiComm > &sg_comm, const Teuchos::RCP< const Stokhos::OrthogPolyBasis< int, double > > &sg_basis, const Teuchos::RCP< const Stokhos::EpetraSparse3Tensor > &epetraCijk, const Teuchos::RCP< const Epetra_Map > &base_map, const Teuchos::RCP< const Epetra_Map > &sg_map)
Build preconditioner operator.
Teuchos::RCP< Teuchos::ParameterList > params
Preconditioner parameters.
Teuchos::RCP< Stokhos::AbstractPreconditionerFactory > buildMeanPreconditionerFactory()
Build preconditioner factory for mean.
An class for building preconditioners.
std::string prec_method
Preconditioner method.
A stochastic preconditioner based on applying the approximate Schur complement preconditioner as defi...
An Epetra operator representing applying the mean in a block stochastic Galerkin expansion.