15#ifndef dealii_nonlinear_h
16#define dealii_nonlinear_h
79template <
typename VectorType = Vector<
double>>
249#ifdef DEAL_II_TRILINOS_WITH_NOX
254 const Teuchos::RCP<Teuchos::ParameterList> ¶meters =
262#ifdef DEAL_II_WITH_SUNDIALS
272#ifdef DEAL_II_WITH_PETSC
359 void(
const VectorType &
rhs, VectorType &dst,
const double tolerance)>
377#ifdef DEAL_II_WITH_SUNDIALS
384#ifdef DEAL_II_TRILINOS_WITH_NOX
394#ifdef DEAL_II_WITH_PETSC
410template <
typename VectorType>
415#ifdef DEAL_II_WITH_SUNDIALS
419 additional_data_kinsol.strategy =
421 else if (additional_data.
strategy ==
423 additional_data_kinsol.strategy =
425 else if (additional_data.
strategy ==
427 additional_data_kinsol.strategy =
432 additional_data_kinsol.maximum_non_linear_iterations =
434 additional_data_kinsol.function_tolerance =
436 additional_data_kinsol.step_tolerance = additional_data.
step_tolerance;
437 additional_data_kinsol.anderson_subspace_size =
442#ifdef DEAL_II_TRILINOS_WITH_NOX
443 parameters_nox->set(
"Nonlinear Solver",
"Line Search Based");
444 Teuchos::ParameterList &
Line_Search = parameters_nox->sublist(
"Line Search");
452#ifdef DEAL_II_WITH_PETSC
453 additional_data_petsc_snes.options_prefix =
"";
459 additional_data_petsc_snes.snes_type =
"anderson";
462 else if (additional_data.
strategy ==
465 additional_data_petsc_snes.snes_type =
"newtonls";
466 additional_data_petsc_snes.snes_linesearch_type =
"bt";
468 else if (additional_data.
strategy ==
471 additional_data_petsc_snes.snes_linesearch_type =
"newtonls";
472 additional_data_petsc_snes.snes_linesearch_type =
"basic";
474 else if (additional_data.
strategy ==
476 additional_data_petsc_snes.snes_type =
"nrichardson";
478 additional_data_petsc_snes.absolute_tolerance =
480 additional_data_petsc_snes.relative_tolerance =
482 additional_data_petsc_snes.step_tolerance = additional_data.
step_tolerance;
483 additional_data_petsc_snes.maximum_non_linear_iterations =
485 additional_data_petsc_snes.max_n_function_evaluations = -1;
492template <
typename VectorType>
499template <
typename VectorType>
502 : additional_data(additional_data)
510template <
typename VectorType>
514 : additional_data(additional_data)
515 , mpi_communicator(mpi_communicator)
522template <
typename VectorType>
527 additional_data.solver_type = type;
532template <
typename VectorType>
536 const unsigned int maximum_non_linear_iterations,
537 const double function_tolerance,
538 const double relative_tolerance,
539 const double step_tolerance,
540 const unsigned int anderson_subspace_size)
541 : solver_type(solver_type)
543 , maximum_non_linear_iterations(maximum_non_linear_iterations)
544 , function_tolerance(function_tolerance)
545 , relative_tolerance(relative_tolerance)
546 , step_tolerance(step_tolerance)
547 , anderson_subspace_size(anderson_subspace_size)
552#ifdef DEAL_II_TRILINOS_WITH_NOX
553template <
typename VectorType>
558 const Teuchos::RCP<Teuchos::ParameterList> ¶meters)
567#ifdef DEAL_II_WITH_SUNDIALS
568template <
typename VectorType>
579template <
typename VectorType>
585 ExcMessage(
"PETSc SNES requires you to use PETSc vectors."));
590#ifdef DEAL_II_WITH_PETSC
608 const double tolerance = 1e-6;
618template <
typename VectorType>
627#ifdef DEAL_II_WITH_PETSC
630#ifdef DEAL_II_TRILINOS_WITH_NOX
633#ifdef DEAL_II_WITH_SUNDIALS
644#ifdef DEAL_II_WITH_SUNDIALS
654 const VectorType & ) {
663 false,
ExcMessage(
"You do not have SUNDIALS configured with deal.II!"));
668#ifdef DEAL_II_TRILINOS_WITH_NOX
685 false,
ExcMessage(
"You do not have Trilinos configured with deal.II"));
698#ifdef DEAL_II_WITH_SUNDIALS
701#ifdef DEAL_II_TRILINOS_WITH_NOX
704#ifdef DEAL_II_WITH_PETSC
711 "Invalid nonlinear solver specified. "
712 "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
#define DEAL_II_DEPRECATED
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)