DOLFINx
0.5.1
DOLFINx C++ interface
|
This class defines a Newton solver for nonlinear systems of equations of the form \(F(x) = 0\). More...
#include <NewtonSolver.h>
Public Member Functions | |
NewtonSolver (MPI_Comm comm) | |
Create nonlinear solver. More... | |
NewtonSolver (NewtonSolver &&solver)=delete | |
NewtonSolver (const NewtonSolver &solver)=delete | |
NewtonSolver & | operator= (const NewtonSolver &solver)=delete |
NewtonSolver & | operator= (const NewtonSolver &&solver)=delete |
~NewtonSolver () | |
Destructor. | |
void | setF (const std::function< void(const Vec, Vec)> &F, Vec b) |
Set the function for computing the residual and the vector to the assemble the residual into. More... | |
void | setJ (const std::function< void(const Vec, Mat)> &J, Mat Jmat) |
Set the function for computing the Jacobian (dF/dx) and the matrix to assemble the residual into. More... | |
void | setP (const std::function< void(const Vec, Mat)> &P, Mat Pmat) |
Set the function for computing the preconditioner matrix (optional) More... | |
const la::petsc::KrylovSolver & | get_krylov_solver () const |
Get the internal Krylov solver used to solve for the Newton updates const version The Krylov solver prefix is nls_solve_. More... | |
la::petsc::KrylovSolver & | get_krylov_solver () |
Get the internal Krylov solver used to solve for the Newton updates non-const version The Krylov solver prefix is nls_solve_. More... | |
void | set_form (const std::function< void(Vec)> &form) |
Set the function that is called before the residual or Jacobian are computed. It is commonly used to update ghost values. More... | |
void | set_convergence_check (const std::function< std::pair< double, bool >(const NewtonSolver &, const Vec)> &c) |
Set function that is called at the end of each Newton iteration to test for convergence. More... | |
void | set_update (const std::function< void(const NewtonSolver &solver, const Vec, Vec)> &update) |
Set function that is called after each Newton iteration to update the solution. More... | |
std::pair< int, bool > | solve (Vec x) |
Solve the nonlinear problem \(`F(x) = 0\) for given \(F\) and Jacobian \(\dfrac{\partial F}{\partial x}\). More... | |
int | iteration () const |
The number of Newton interations. It can can called by functions that check for convergence during a solve. More... | |
int | krylov_iterations () const |
Return number of Krylov iterations elapsed since solve started. More... | |
double | residual () const |
Return current residual. More... | |
double | residual0 () const |
Return initial residual. More... | |
MPI_Comm | comm () const |
Return MPI communicator. | |
Public Attributes | |
int | max_it = 50 |
Maximum number of iterations. | |
double | rtol = 1e-9 |
Relative tolerance. | |
double | atol = 1e-10 |
Absolute tolerance. | |
std::string | convergence_criterion = "residual" |
Convergence criterion. | |
bool | report = true |
Monitor convergence. | |
bool | error_on_nonconvergence = true |
Throw error if solver fails to converge. | |
double | relaxation_parameter = 1.0 |
Relaxation parameter. | |
This class defines a Newton solver for nonlinear systems of equations of the form \(F(x) = 0\).
|
explicit |
Create nonlinear solver.
[in] | comm | The MPI communicator for the solver |
la::petsc::KrylovSolver & get_krylov_solver | ( | ) |
Get the internal Krylov solver used to solve for the Newton updates non-const version The Krylov solver prefix is nls_solve_.
const la::petsc::KrylovSolver & get_krylov_solver | ( | ) | const |
Get the internal Krylov solver used to solve for the Newton updates const version The Krylov solver prefix is nls_solve_.
int iteration | ( | ) | const |
The number of Newton interations. It can can called by functions that check for convergence during a solve.
int krylov_iterations | ( | ) | const |
Return number of Krylov iterations elapsed since solve started.
double residual | ( | ) | const |
Return current residual.
double residual0 | ( | ) | const |
Return initial residual.
void set_convergence_check | ( | const std::function< std::pair< double, bool >(const NewtonSolver &, const Vec)> & | c | ) |
Set function that is called at the end of each Newton iteration to test for convergence.
[in] | c | The function that tests for convergence |
void set_form | ( | const std::function< void(Vec)> & | form | ) |
Set the function that is called before the residual or Jacobian are computed. It is commonly used to update ghost values.
[in] | form | The function to call. It takes the latest solution vector x as an argument |
void set_update | ( | const std::function< void(const NewtonSolver &solver, const Vec, Vec)> & | update | ) |
Set function that is called after each Newton iteration to update the solution.
[in] | update | The function that updates the solution |
void setF | ( | const std::function< void(const Vec, Vec)> & | F, |
Vec | b | ||
) |
Set the function for computing the residual and the vector to the assemble the residual into.
[in] | F | Function to compute the residual vector b (x, b) |
[in] | b | The vector to assemble to residual into |
void setJ | ( | const std::function< void(const Vec, Mat)> & | J, |
Mat | Jmat | ||
) |
Set the function for computing the Jacobian (dF/dx) and the matrix to assemble the residual into.
[in] | J | Function to compute the Jacobian matrix b (x, A) |
[in] | Jmat | The matrix to assemble the Jacobian into |
void setP | ( | const std::function< void(const Vec, Mat)> & | P, |
Mat | Pmat | ||
) |
Set the function for computing the preconditioner matrix (optional)
[in] | P | Function to compute the preconditioner matrix b (x, P) |
[in] | Pmat | The matrix to assemble the preconditioner into |
std::pair< int, bool > solve | ( | Vec | x | ) |
Solve the nonlinear problem \(`F(x) = 0\) for given \(F\) and Jacobian \(\dfrac{\partial F}{\partial x}\).
[in,out] | x | The vector |