74template <
typename VectorType = Vector<
double>>
241#ifdef DEAL_II_TRILINOS_WITH_NOX
246 const Teuchos::RCP<Teuchos::ParameterList> ¶meters =
247 Teuchos::rcp(
new Teuchos::ParameterList));
254#ifdef DEAL_II_WITH_SUNDIALS
264#ifdef DEAL_II_WITH_PETSC
276 solve(VectorType &initial_guess_and_solution);
299 std::function<void(
const VectorType &src, VectorType &dst)>
residual;
351 void(
const VectorType &rhs, VectorType &dst,
const double tolerance)>
369#ifdef DEAL_II_WITH_SUNDIALS
376#ifdef DEAL_II_TRILINOS_WITH_NOX
380 Teuchos::rcp(
new Teuchos::ParameterList);
386#ifdef DEAL_II_WITH_PETSC
402template <
typename VectorType>
407#ifdef DEAL_II_WITH_SUNDIALS
411 additional_data_kinsol.strategy =
413 else if (additional_data.
strategy ==
415 additional_data_kinsol.strategy =
417 else if (additional_data.
strategy ==
419 additional_data_kinsol.strategy =
424 additional_data_kinsol.maximum_non_linear_iterations =
426 additional_data_kinsol.function_tolerance =
428 additional_data_kinsol.step_tolerance = additional_data.
step_tolerance;
429 additional_data_kinsol.anderson_subspace_size =
434#ifdef DEAL_II_TRILINOS_WITH_NOX
435 parameters_nox->set(
"Nonlinear Solver",
"Line Search Based");
436 Teuchos::ParameterList &Line_Search = parameters_nox->sublist(
"Line Search");
437 Line_Search.set(
"Method",
"Full Step");
444#ifdef DEAL_II_WITH_PETSC
445 additional_data_petsc_snes.options_prefix =
"";
451 additional_data_petsc_snes.snes_type =
"anderson";
454 else if (additional_data.
strategy ==
457 additional_data_petsc_snes.snes_type =
"newtonls";
458 additional_data_petsc_snes.snes_linesearch_type =
"bt";
460 else if (additional_data.
strategy ==
463 additional_data_petsc_snes.snes_linesearch_type =
"newtonls";
464 additional_data_petsc_snes.snes_linesearch_type =
"basic";
466 else if (additional_data.
strategy ==
468 additional_data_petsc_snes.snes_type =
"nrichardson";
470 additional_data_petsc_snes.absolute_tolerance =
472 additional_data_petsc_snes.relative_tolerance =
474 additional_data_petsc_snes.step_tolerance = additional_data.
step_tolerance;
475 additional_data_petsc_snes.maximum_non_linear_iterations =
477 additional_data_petsc_snes.max_n_function_evaluations = -1;
484template <
typename VectorType>
489template <
typename VectorType>
492 : additional_data(additional_data)
499template <
typename VectorType>
503 : additional_data(additional_data)
504 , mpi_communicator(mpi_communicator)
511template <
typename VectorType>
516 additional_data.solver_type = type;
521template <
typename VectorType>
525 const unsigned int maximum_non_linear_iterations,
526 const double function_tolerance,
527 const double relative_tolerance,
528 const double step_tolerance,
529 const unsigned int anderson_subspace_size)
530 : solver_type(solver_type)
532 , maximum_non_linear_iterations(maximum_non_linear_iterations)
533 , function_tolerance(function_tolerance)
534 , relative_tolerance(relative_tolerance)
535 , step_tolerance(step_tolerance)
536 , anderson_subspace_size(anderson_subspace_size)
541#ifdef DEAL_II_TRILINOS_WITH_NOX
542template <
typename VectorType>
547 const Teuchos::RCP<Teuchos::ParameterList> ¶meters)
556#ifdef DEAL_II_WITH_SUNDIALS
557template <
typename VectorType>
568template <
typename VectorType>
574 ExcMessage(
"PETSc SNES requires you to use PETSc vectors."));
579#ifdef DEAL_II_WITH_PETSC
585 PETScWrappers::NonlinearSolver<PETScWrappers::MPI::Vector> nonlinear_solver(
588 nonlinear_solver.residual =
residual;
592 nonlinear_solver.solve_with_jacobian =
597 const double tolerance = 1e-6;
601 nonlinear_solver.solve(initial_guess_and_solution);
607template <
typename VectorType>
610 VectorType &initial_guess_and_solution)
616#ifdef DEAL_II_WITH_PETSC
619#ifdef DEAL_II_TRILINOS_WITH_NOX
622#ifdef DEAL_II_WITH_SUNDIALS
633#ifdef DEAL_II_WITH_SUNDIALS
642 nonlinear_solver.
setup_jacobian = [&](
const VectorType ¤t_u,
643 const VectorType & ) {
649 nonlinear_solver.
solve(initial_guess_and_solution);
652 false,
ExcMessage(
"You do not have SUNDIALS configured with deal.II!"));
657#ifdef DEAL_II_TRILINOS_WITH_NOX
671 nonlinear_solver.
solve(initial_guess_and_solution);
674 false,
ExcMessage(
"You do not have Trilinos configured with deal.II"));
686 const std::string solvers =
687#ifdef DEAL_II_WITH_SUNDIALS
690#ifdef DEAL_II_TRILINOS_WITH_NOX
693#ifdef DEAL_II_WITH_PETSC
700 "Invalid nonlinear solver specified. "
701 "The solvers available in your installation are:\n" +
unsigned int anderson_subspace_size
SolutionStrategy strategy
AdditionalData(const SolverType &solver_type=automatic, const SolutionStrategy &strategy=linesearch, const unsigned int maximum_non_linear_iterations=200, const double function_tolerance=1e-8, const double relative_tolerance=1e-5, const double step_tolerance=0.0, const unsigned int anderson_subspace_size=0)
double function_tolerance
unsigned int maximum_non_linear_iterations
const double relative_tolerance
TrilinosWrappers::NOXSolver< VectorType >::AdditionalData additional_data_nox
void set_data(const AdditionalData &additional_data)
void solve_with_petsc(VectorType &initial_guess_and_solution)
void set_data(const typename PETScWrappers::NonlinearSolverData &additional_data)
SUNDIALS::KINSOL< VectorType >::AdditionalData additional_data_kinsol
std::function< void(const VectorType &src, VectorType &dst)> residual
std::function< void(VectorType &)> reinit_vector
AdditionalData additional_data
Teuchos::RCP< Teuchos::ParameterList > parameters_nox
PETScWrappers::NonlinearSolverData additional_data_petsc_snes
MPI_Comm mpi_communicator
void solve(VectorType &initial_guess_and_solution)
void select(const typename AdditionalData::SolverType &type)
NonlinearSolverSelector()
std::function< void(const VectorType ¤t_u)> setup_jacobian
std::function< void(const VectorType &rhs, VectorType &dst, const double tolerance)> solve_with_jacobian
std::function< void(const VectorType ¤t_u, const VectorType ¤t_f)> setup_jacobian
unsigned int solve(VectorType &initial_guess_and_solution)
std::function< void(const VectorType &src, VectorType &dst)> residual
std::function< void(const VectorType &rhs, VectorType &dst, const double tolerance)> solve_with_jacobian
std::function< void(VectorType &)> reinit_vector
std::function< void(const VectorType &y, VectorType &x, const double tolerance)> solve_with_jacobian
std::function< void(const VectorType &u, VectorType &F)> residual
unsigned int solve(VectorType &solution)
std::function< void(const VectorType ¤t_u)> setup_jacobian
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)