22 #include "NOX_Epetra.H"
23 #include "NOX_Epetra_LinearSystem_Stratimikos.H"
36 #include "EpetraExt_VectorOut.h"
67 "KL-Reduced-Matrix-Free",
76 "Approx-Gauss-Seidel",
78 "Approx-Schur-Complement",
86 const char *
sg_rf_names[] = {
"Uniform",
"Rys",
"Log-Normal" };
92 MPI_Init(&argc,&argv);
102 int MyPID = globalComm->
MyPID();
109 "This example runs a variety of stochastic Galerkin solvers.\n");
112 CLP.
setOption(
"num_mesh", &n,
"Number of mesh points in each direction");
114 bool symmetric =
false;
115 CLP.
setOption(
"symmetric",
"unsymmetric", &symmetric,
116 "Symmetric discretization");
118 int num_spatial_procs = -1;
119 CLP.
setOption(
"num_spatial_procs", &num_spatial_procs,
"Number of spatial processors (set -1 for all available procs)");
121 bool rebalance_stochastic_graph =
false;
122 CLP.
setOption(
"rebalance",
"no-rebalance", &rebalance_stochastic_graph,
123 "Rebalance parallel stochastic graph (requires Isorropia)");
128 "Random field type");
134 CLP.
setOption(
"std_dev", &sigma,
"Standard deviation");
136 double weightCut = 1.0;
137 CLP.
setOption(
"weight_cut", &weightCut,
"Weight cut");
140 CLP.
setOption(
"num_kl", &num_KL,
"Number of KL terms");
143 CLP.
setOption(
"order", &p,
"Polynomial order");
145 bool normalize_basis =
true;
146 CLP.
setOption(
"normalize",
"unnormalize", &normalize_basis,
147 "Normalize PC basis");
150 CLP.
setOption(
"sg_solver", &solve_method,
155 CLP.
setOption(
"outer_krylov_method", &outer_krylov_method,
157 "Outer Krylov method (for Krylov-based SG solver)");
160 CLP.
setOption(
"outer_krylov_solver", &outer_krylov_solver,
162 "Outer linear solver");
164 double outer_tol = 1e-12;
165 CLP.
setOption(
"outer_tol", &outer_tol,
"Outer solver tolerance");
167 int outer_its = 1000;
168 CLP.
setOption(
"outer_its", &outer_its,
"Maximum outer iterations");
171 CLP.
setOption(
"inner_krylov_method", &inner_krylov_method,
173 "Inner Krylov method (for G-S, Jacobi, etc...)");
176 CLP.
setOption(
"inner_krylov_solver", &inner_krylov_solver,
178 "Inner linear solver");
180 double inner_tol = 3e-13;
181 CLP.
setOption(
"inner_tol", &inner_tol,
"Inner solver tolerance");
183 int inner_its = 1000;
184 CLP.
setOption(
"inner_its", &inner_its,
"Maximum inner iterations");
187 CLP.
setOption(
"sg_operator_method", &opMethod,
192 CLP.
setOption(
"sg_prec_method", &precMethod,
194 "Preconditioner method");
196 double gs_prec_tol = 1e-1;
197 CLP.
setOption(
"gs_prec_tol", &gs_prec_tol,
"Gauss-Seidel preconditioner tolerance");
200 CLP.
setOption(
"gs_prec_its", &gs_prec_its,
"Maximum Gauss-Seidel preconditioner iterations");
202 CLP.
parse( argc, argv );
205 std::cout <<
"Summary of command line options:" << std::endl
206 <<
"\tnum_mesh = " << n << std::endl
207 <<
"\tsymmetric = " << symmetric << std::endl
208 <<
"\tnum_spatial_procs = " << num_spatial_procs << std::endl
209 <<
"\trebalance = " << rebalance_stochastic_graph
213 <<
"\tmean = " << mean << std::endl
214 <<
"\tstd_dev = " << sigma << std::endl
215 <<
"\tweight_cut = " << weightCut << std::endl
216 <<
"\tnum_kl = " << num_KL << std::endl
217 <<
"\torder = " << p << std::endl
218 <<
"\tnormalize_basis = " << normalize_basis << std::endl
221 <<
"\touter_krylov_method = "
223 <<
"\touter_krylov_solver = "
225 <<
"\touter_tol = " << outer_tol << std::endl
226 <<
"\touter_its = " << outer_its << std::endl
227 <<
"\tinner_krylov_method = "
229 <<
"\tinner_krylov_solver = "
231 <<
"\tinner_tol = " << inner_tol << std::endl
232 <<
"\tinner_its = " << inner_its << std::endl
233 <<
"\tsg_operator_method = " <<
sg_op_names[opMethod]
237 <<
"\tgs_prec_tol = " << gs_prec_tol << std::endl
238 <<
"\tgs_prec_its = " << gs_prec_its << std::endl;
241 bool nonlinear_expansion =
false;
243 nonlinear_expansion =
false;
245 nonlinear_expansion =
true;
253 for (
int i=0; i<num_KL; i++)
256 else if (randField ==
RYS)
264 int sz = basis->size();
266 if (nonlinear_expansion)
267 Cijk = basis->computeTripleProductTensor();
269 Cijk = basis->computeLinearTripleProductTensor();
274 std::cout <<
"Stochastic Galerkin expansion size = " << sz << std::endl;
278 parallelParams.
set(
"Number of Spatial Processors", num_spatial_procs);
279 parallelParams.
set(
"Rebalance Stochastic Graph",
280 rebalance_stochastic_graph);
292 mean, basis, nonlinear_expansion,
300 noxParams->
set(
"Nonlinear Solver",
"Line Search Based");
304 printParams.
set(
"MyPID", MyPID);
305 printParams.
set(
"Output Precision", 3);
306 printParams.
set(
"Output Processor", 0);
307 printParams.
set(
"Output Information",
308 NOX::Utils::OuterIteration +
309 NOX::Utils::OuterIterationStatusTest +
310 NOX::Utils::InnerIteration +
312 NOX::Utils::Details +
313 NOX::Utils::LinearSolverDetails +
314 NOX::Utils::Warning +
318 NOX::Utils utils(printParams);
322 searchParams.
set(
"Method",
"Full Step");
326 dirParams.
set(
"Method",
"Newton");
328 newtonParams.
set(
"Forcing Term Method",
"Constant");
335 newtonParams.
sublist(
"Stratimikos Linear Solver");
339 stratLinSolParams.
sublist(
"Stratimikos");
343 statusParams.
set(
"Test Type",
"Combo");
344 statusParams.
set(
"Number of Tests", 2);
345 statusParams.
set(
"Combo Type",
"OR");
347 normF.
set(
"Test Type",
"NormF");
348 normF.
set(
"Tolerance", outer_tol);
349 normF.
set(
"Scale Type",
"Scaled");
351 maxIters.
set(
"Test Type",
"MaxIters");
352 maxIters.
set(
"Maximum Iterations", 1);
356 Teuchos::rcp(
new NOX::Epetra::ModelEvaluatorInterface(model));
364 det_printParams.
set(
"MyPID", MyPID);
365 det_printParams.
set(
"Output Precision", 3);
366 det_printParams.
set(
"Output Processor", 0);
367 det_printParams.
set(
"Output Information", NOX::Utils::Error);
371 det_lsParams.
sublist(
"Stratimikos");
372 if (inner_krylov_solver ==
AZTECOO) {
373 det_stratParams.
set(
"Linear Solver Type",
"AztecOO");
375 det_stratParams.
sublist(
"Linear Solver Types").sublist(
"AztecOO").sublist(
"Forward Solve");
377 aztecOOParams.
sublist(
"AztecOO Settings");
378 if (inner_krylov_method ==
GMRES) {
379 aztecOOSettings.
set(
"Aztec Solver",
"GMRES");
381 else if (inner_krylov_method ==
CG) {
382 aztecOOSettings.
set(
"Aztec Solver",
"CG");
384 aztecOOSettings.
set(
"Output Frequency", 0);
385 aztecOOSettings.
set(
"Size of Krylov Subspace", 100);
386 aztecOOParams.
set(
"Max Iterations", inner_its);
387 aztecOOParams.
set(
"Tolerance", inner_tol);
389 det_stratParams.
sublist(
"Linear Solver Types").sublist(
"AztecOO").sublist(
"VerboseObject");
390 verbParams.
set(
"Verbosity Level",
"none");
392 else if (inner_krylov_solver ==
BELOS) {
393 det_stratParams.
set(
"Linear Solver Type",
"Belos");
395 det_stratParams.
sublist(
"Linear Solver Types").sublist(
"Belos");
397 if (inner_krylov_method ==
GMRES || inner_krylov_method ==
FGMRES) {
398 belosParams.
set(
"Solver Type",
"Block GMRES");
400 &(belosParams.
sublist(
"Solver Types").sublist(
"Block GMRES"));
401 if (inner_krylov_method ==
FGMRES)
402 belosSolverParams->
set(
"Flexible Gmres",
true);
404 else if (inner_krylov_method ==
CG) {
405 belosParams.
set(
"Solver Type",
"Block CG");
407 &(belosParams.
sublist(
"Solver Types").sublist(
"Block CG"));
409 else if (inner_krylov_method ==
RGMRES) {
410 belosParams.
set(
"Solver Type",
"GCRODR");
412 &(belosParams.
sublist(
"Solver Types").sublist(
"GCRODR"));
414 belosSolverParams->
set(
"Convergence Tolerance", inner_tol);
415 belosSolverParams->
set(
"Maximum Iterations", inner_its);
416 belosSolverParams->
set(
"Output Frequency",0);
417 belosSolverParams->
set(
"Output Style",1);
418 belosSolverParams->
set(
"Verbosity",0);
420 verbParams.
set(
"Verbosity Level",
"none");
422 det_stratParams.
set(
"Preconditioner Type",
"ML");
424 det_stratParams.
sublist(
"Preconditioner Types").sublist(
"ML").sublist(
"ML Settings");
425 ML_Epetra::SetDefaults(
"SA", det_ML);
426 det_ML.
set(
"ML output", 0);
427 det_ML.
set(
"max levels",5);
428 det_ML.
set(
"increasing or decreasing",
"increasing");
429 det_ML.
set(
"aggregation: type",
"Uncoupled");
430 det_ML.
set(
"smoother: type",
"ML symmetric Gauss-Seidel");
431 det_ML.
set(
"smoother: sweeps",2);
432 det_ML.
set(
"smoother: pre or post",
"both");
433 det_ML.
set(
"coarse: max size", 200);
434 #ifdef HAVE_ML_AMESOS
435 det_ML.
set(
"coarse: type",
"Amesos-KLU");
437 det_ML.
set(
"coarse: type",
"Jacobi");
441 det_printParams, det_lsParams, det_iJac,
448 sgParams->
sublist(
"SG Operator");
450 sgParams->
sublist(
"SG Preconditioner");
452 if (!nonlinear_expansion) {
453 sgParams->
set(
"Parameter Expansion Type",
"Linear");
454 sgParams->
set(
"Jacobian Expansion Type",
"Linear");
457 sgOpParams.
set(
"Operator Method",
"Matrix Free");
459 sgOpParams.
set(
"Operator Method",
"KL Matrix Free");
461 sgOpParams.
set(
"Operator Method",
"KL Reduced Matrix Free");
463 sgOpParams.
set(
"Number of KL Terms", num_KL);
465 sgOpParams.
set(
"Number of KL Terms", basis->size());
466 sgOpParams.
set(
"KL Tolerance", outer_tol);
467 sgOpParams.
set(
"Sparse 3 Tensor Drop Tolerance", outer_tol);
468 sgOpParams.
set(
"Do Error Tests",
true);
471 sgOpParams.
set(
"Operator Method",
"Fully Assembled");
474 "Error! Unknown operator method " << opMethod
475 <<
"." << std::endl);
476 if (precMethod ==
MEAN) {
477 sgPrecParams.
set(
"Preconditioner Method",
"Mean-based");
478 sgPrecParams.
set(
"Mean Preconditioner Type",
"ML");
480 sgPrecParams.
sublist(
"Mean Preconditioner Parameters");
483 else if(precMethod ==
GS) {
484 sgPrecParams.
set(
"Preconditioner Method",
"Gauss-Seidel");
485 sgPrecParams.
sublist(
"Deterministic Solver Parameters") = det_lsParams;
486 sgPrecParams.
set(
"Deterministic Solver", det_linsys);
487 sgPrecParams.
set(
"Max Iterations", gs_prec_its);
488 sgPrecParams.
set(
"Tolerance", gs_prec_tol);
490 else if (precMethod ==
AGS) {
491 sgPrecParams.
set(
"Preconditioner Method",
"Approximate Gauss-Seidel");
492 if (outer_krylov_method ==
CG)
493 sgPrecParams.
set(
"Symmetric Gauss-Seidel",
true);
494 sgPrecParams.
set(
"Mean Preconditioner Type",
"ML");
496 sgPrecParams.
sublist(
"Mean Preconditioner Parameters");
499 else if (precMethod ==
AJ) {
500 sgPrecParams.
set(
"Preconditioner Method",
"Approximate Jacobi");
501 sgPrecParams.
set(
"Mean Preconditioner Type",
"ML");
503 sgPrecParams.
sublist(
"Mean Preconditioner Parameters");
506 sgPrecParams.
sublist(
"Jacobi SG Operator");
507 jacobiOpParams.
set(
"Only Use Linear Terms",
true);
509 else if (precMethod ==
ASC) {
510 sgPrecParams.
set(
"Preconditioner Method",
"Approximate Schur Complement");
511 sgPrecParams.
set(
"Mean Preconditioner Type",
"ML");
513 sgPrecParams.
sublist(
"Mean Preconditioner Parameters");
516 else if (precMethod ==
KP) {
517 sgPrecParams.
set(
"Preconditioner Method",
"Kronecker Product");
518 sgPrecParams.
set(
"Only Use Linear Terms",
true);
519 sgPrecParams.
set(
"Mean Preconditioner Type",
"ML");
521 sgPrecParams.
sublist(
"Mean Preconditioner Parameters");
522 meanPrecParams = det_ML;
523 sgPrecParams.
set(
"G Preconditioner Type",
"Ifpack");
525 sgPrecParams.
sublist(
"G Preconditioner Parameters");
526 if (outer_krylov_method ==
GMRES || outer_krylov_method ==
FGMRES)
527 GPrecParams.
set(
"Ifpack Preconditioner",
"ILUT");
528 if (outer_krylov_method ==
CG)
529 GPrecParams.
set(
"Ifpack Preconditioner",
"ICT");
530 GPrecParams.
set(
"Overlap", 1);
531 GPrecParams.
set(
"fact: drop tolerance", 1e-4);
532 GPrecParams.
set(
"fact: ilut level-of-fill", 1.0);
533 GPrecParams.
set(
"schwarz: combine mode",
"Add");
535 else if (precMethod ==
NONE) {
536 sgPrecParams.
set(
"Preconditioner Method",
"None");
540 "Error! Unknown preconditioner method " << precMethod
541 <<
"." << std::endl);
546 expansion, sg_parallel_data,
548 EpetraExt::ModelEvaluator::InArgs sg_inArgs = sg_model->
createInArgs();
549 EpetraExt::ModelEvaluator::OutArgs sg_outArgs =
557 basis->evaluateBases(point, basis_vals);
560 for (
int i=0; i<num_KL; i++) {
561 sg_p_init->
term(i,0)[i] = 0.0;
562 sg_p_init->
term(i,1)[i] = 1.0 / basis_vals[i+1];
569 sg_x_init->
init(0.0);
574 Teuchos::rcp(
new NOX::Epetra::ModelEvaluatorInterface(sg_model));
588 sg_outArgs.supports(EpetraExt::ModelEvaluator::OUT_ARG_WPrec);
593 iPrec = nox_interface;
595 stratParams.
set(
"Preconditioner Type",
"None");
596 if (outer_krylov_solver ==
AZTECOO) {
597 stratParams.
set(
"Linear Solver Type",
"AztecOO");
599 stratParams.
sublist(
"Linear Solver Types").sublist(
"AztecOO").sublist(
"Forward Solve");
601 aztecOOParams.
sublist(
"AztecOO Settings");
602 if (outer_krylov_method ==
GMRES) {
603 aztecOOSettings.
set(
"Aztec Solver",
"GMRES");
605 else if (outer_krylov_method ==
CG) {
606 aztecOOSettings.
set(
"Aztec Solver",
"CG");
608 aztecOOSettings.
set(
"Output Frequency", 1);
609 aztecOOSettings.
set(
"Size of Krylov Subspace", 100);
610 aztecOOParams.
set(
"Max Iterations", outer_its);
611 aztecOOParams.
set(
"Tolerance", outer_tol);
612 stratLinSolParams.
set(
"Preconditioner",
"User Defined");
616 printParams, stratLinSolParams, iJac, A, iPrec, M,
621 printParams, stratLinSolParams, iJac, A, *u));
623 else if (outer_krylov_solver ==
BELOS){
624 stratParams.
set(
"Linear Solver Type",
"Belos");
626 stratParams.
sublist(
"Linear Solver Types").sublist(
"Belos");
628 if (outer_krylov_method ==
GMRES || outer_krylov_method ==
FGMRES) {
629 belosParams.
set(
"Solver Type",
"Block GMRES");
631 &(belosParams.
sublist(
"Solver Types").sublist(
"Block GMRES"));
632 if (outer_krylov_method ==
FGMRES)
633 belosSolverParams->
set(
"Flexible Gmres",
true);
635 else if (outer_krylov_method ==
CG) {
636 belosParams.
set(
"Solver Type",
"Block CG");
638 &(belosParams.
sublist(
"Solver Types").sublist(
"Block CG"));
640 else if (inner_krylov_method ==
RGMRES) {
641 belosParams.
set(
"Solver Type",
"GCRODR");
643 &(belosParams.
sublist(
"Solver Types").sublist(
"GCRODR"));
645 belosSolverParams->
set(
"Convergence Tolerance", outer_tol);
646 belosSolverParams->
set(
"Maximum Iterations", outer_its);
647 belosSolverParams->
set(
"Output Frequency",1);
648 belosSolverParams->
set(
"Output Style",1);
649 belosSolverParams->
set(
"Verbosity",33);
650 stratLinSolParams.
set(
"Preconditioner",
"User Defined");
654 printParams, stratLinSolParams, iJac, A, iPrec, M,
659 printParams, stratLinSolParams, iJac, A, *u));
663 else if (solve_method==
SG_GS) {
664 lsParams.
sublist(
"Deterministic Solver Parameters") = det_lsParams;
665 lsParams.
set(
"Max Iterations", outer_its);
666 lsParams.
set(
"Tolerance", outer_tol);
669 printParams, lsParams, det_linsys, iReq, iJac,
670 basis, sg_parallel_data, A, base_map, sg_map));
673 lsParams.
sublist(
"Deterministic Solver Parameters") = det_lsParams;
674 lsParams.
set(
"Max Iterations", outer_its);
675 lsParams.
set(
"Tolerance", outer_tol);
677 lsParams.
sublist(
"Jacobi SG Operator");
678 jacobiOpParams.
set(
"Only Use Linear Terms",
true);
681 printParams, lsParams, det_linsys, iReq, iJac,
682 basis, sg_parallel_data, A, base_map, sg_map));
687 Teuchos::rcp(
new NOX::Epetra::Group(printParams, iReq, *u, linsys));
691 NOX::StatusTest::buildStatusTests(statusParams, utils);
695 NOX::Solver::buildSolver(grp, statusTests, noxParams);
698 NOX::StatusTest::StatusType status;
701 status = solver->solve();
705 const NOX::Epetra::Group& finalGroup =
706 dynamic_cast<const NOX::Epetra::Group&
>(solver->getSolutionGroup());
708 (
dynamic_cast<const NOX::Epetra::Vector&
>(finalGroup.getX())).getEpetraVector();
711 EpetraExt::VectorToMatrixMarketFile(
"nox_solver_stochastic_solution.mm",
721 EpetraExt::VectorToMatrixMarketFile(
"mean_gal.mm", mean);
722 EpetraExt::VectorToMatrixMarketFile(
"std_dev_gal.mm", std_dev);
728 sg_inArgs.set_p(1, sg_p);
730 sg_outArgs.set_g(0, sg_g);
731 sg_model->
evalModel(sg_inArgs, sg_outArgs);
740 std::cout.precision(16);
744 std::cout << std::endl;
745 std::cout <<
"Response Mean = " << std::endl << g_mean << std::endl;
746 std::cout <<
"Response Std. Dev. = " << std::endl << g_std_dev << std::endl;
748 if (status == NOX::StatusTest::Converged && MyPID == 0)
749 utils.out() <<
"Example Passed!" << std::endl;
758 catch (std::exception& e) {
759 std::cout << e.what() << std::endl;
761 catch (std::string& s) {
762 std::cout << s << std::endl;
765 std::cout << s << std::endl;
768 std::cout <<
"Caught unknown exception!" << std::endl;
Teuchos::RCP< Stokhos::EpetraVectorOrthogPoly > create_x_sg(Epetra_DataAccess CV=Copy, const Epetra_Vector *v=NULL) const
Create vector orthog poly using x map and owned sg map.
Teuchos::RCP< Stokhos::EpetraVectorOrthogPoly > create_p_sg(int l, Epetra_DataAccess CV=Copy, const Epetra_Vector *v=NULL) const
Create vector orthog poly using p map.
Teuchos::RCP< const Epetra_Vector > get_x_init() const
Return initial solution.
Teuchos::RCP< const Epetra_Map > get_x_map() const
Return solution vector map.
#define TEUCHOS_FUNC_TIME_MONITOR(FUNCNAME)
Hermite polynomial basis.
const Krylov_Method krylov_method_values[]
void computeStandardDeviation(Epetra_Vector &v) const
Compute standard deviation.
Teuchos::RCP< const Epetra_Map > get_g_map(int l) const
Return response map.
Teuchos::RCP< const EpetraExt::MultiComm > getMultiComm() const
Get global comm.
double uniform_weight(const double &x)
void evalModel(const InArgs &inArgs, const OutArgs &outArgs) const
Evaluate model on InArgs.
void computeMean(Epetra_Vector &v) const
Compute mean.
void init(const value_type &val)
Initialize coefficients.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
const SG_Prec sg_prec_values[]
RCP< ParameterList > sublist(const RCP< ParameterList > ¶mList, const std::string &name, bool mustAlreadyExist=false, const std::string &docString="")
const char * sg_op_names[]
ParameterList & set(std::string const &name, T &&value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
const char * krylov_solver_names[]
virtual int MyPID() const =0
Nonlinear, stochastic Galerkin ModelEvaluator.
OutArgs createOutArgs() const
Create OutArgs.
Teuchos::RCP< Stokhos::EpetraVectorOrthogPoly > create_g_sg(int l, Epetra_DataAccess CV=Copy, const Epetra_Vector *v=NULL) const
Create vector orthog poly using g map.
ModelEvaluator for a linear 2-D diffusion problem.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
const int num_krylov_method
static void summarize(Ptr< const Comm< int > > comm, std::ostream &out=std::cout, const bool alwaysWriteLocal=false, const bool writeGlobalStats=true, const bool writeZeroTimers=true, const ECounterSetOp setOp=Intersection, const std::string &filter="", const bool ignoreZeroTimers=false)
Teuchos::RCP< const Epetra_Vector > get_x_init() const
Return initial solution.
void setOption(const char option_true[], const char option_false[], bool *option_val, const char documentation[]=NULL)
const SG_RF sg_rf_values[]
void set_p_sg_init(int i, const Stokhos::EpetraVectorOrthogPoly &p_sg_in)
Set initial parameter polynomial.
EParseCommandLineReturn parse(int argc, char *argv[], std::ostream *errout=&std::cerr) const
const char * sg_solver_names[]
const int num_krylov_solver
const SG_Op sg_op_values[]
Teuchos::RCP< const Epetra_Map > get_g_map(int j) const
Return response function map.
Legendre polynomial basis.
InArgs createInArgs() const
Create InArgs.
void set_x_sg_init(const Stokhos::EpetraVectorOrthogPoly &x_sg_in)
Set initial solution polynomial.
int main(int argc, char **argv)
Teuchos::RCP< Epetra_Operator > create_W() const
Create W = alpha*M + beta*J matrix.
const char * sg_rf_names[]
void setDocString(const char doc_string[])
const char * sg_prec_names[]
Teuchos::RCP< const Epetra_Comm > getSpatialComm() const
Get spatial comm.
Teuchos::RCP< const Epetra_Map > get_x_map() const
Return solution vector map.
Teuchos::RCP< Epetra_Operator > create_W() const
Create W = alpha*M + beta*J matrix.
const Krylov_Solver krylov_solver_values[]
coeff_type & term(ordinal_type dimension, ordinal_type order)
Get term for dimension dimension and order order.
const SG_Solver sg_solver_values[]
Teuchos::RCP< const Epetra_Vector > get_p_init(int l) const
Return initial parameters.
Teuchos::RCP< EpetraExt::ModelEvaluator::Preconditioner > create_WPrec() const
Create preconditioner operator.
static void zeroOutTimers()
const char * krylov_method_names[]