version 3.10-dev

Nonlinear solvers: Newton method. More...

Description

Files

file  multidomain/newtonconvergencewriter.hh
 This class provides the infrastructure to write the convergence behaviour of the Newton method for multidomain simulations into a VTK file.
 
file  multidomain/newtonsolver.hh
 
file  findscalarroot.hh
 Root finding algorithms for scalar functions.
 
file  leastsquares.hh
 Levenberg-Marquardt algorithm for solving nonlinear least squares problems.
 
file  nonlinear/newtonconvergencewriter.hh
 This class provides the infrastructure to write the convergence behaviour of the newton method into a VTK file.
 
file  nonlinear/newtonsolver.hh
 Reference implementation of a Newton solver.
 
file  primaryvariableswitchadapter.hh
 An adapter for the Newton to manage models with primary variable switch.
 
file  staggerednewtonconvergencewriter.hh
 This class provides the infrastructure to write the convergence behaviour of the newton method for the staggered discretization scheme into a VTK file.
 

Classes

class  Dumux::MultiDomainNewtonConvergenceWriter< MDTraits >
 Writes the intermediate solutions for every Newton iteration. More...
 
class  Dumux::MultiDomainNewtonSolver< Assembler, LinearSolver, CouplingManager, Reassembler, Comm >
 Newton solver for coupled problems. More...
 
class  Dumux::Optimization::Detail::LevenbergMarquardt< Assembler, LinearSolver >
 A nonlinear least squares solver with \(n\) model parameters and \(m\) observations. More...
 
struct  Dumux::ConvergenceWriterInterface< SolutionVector, ResidualVector >
 A convergence writer interface Provide an interface that show the minimal requirements a convergence write passed to a newton method has to fulfill. More...
 
class  Dumux::NewtonConvergenceWriter< GridGeometry, SolutionVector, ResidualVector >
 Writes the intermediate solutions for every Newton iteration. More...
 
class  Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >
 An implementation of a Newton solver. More...
 
class  Dumux::PrimaryVariableSwitchAdapter< Variables, isValid >
 An adapter for the Newton to manage models with primary variable switch. More...
 
class  Dumux::PrimaryVariableSwitchAdapter< Variables, false >
 An empty adapter for the Newton for models without primary variable switch. More...
 
class  Dumux::StaggeredNewtonConvergenceWriter< GridGeometry, SolutionVector, ResidualVector >
 Writes the intermediate solutions for every Newton iteration (for staggered grid scheme) More...
 

Functions

template<class Scalar , class ResFunc , class DerivFunc , typename std::enable_if_t< std::is_invocable_r_v< Scalar, ResFunc, Scalar > &&std::is_invocable_r_v< Scalar, DerivFunc, Scalar > > ...>
Scalar Dumux::findScalarRootNewton (Scalar xOld, const ResFunc &residual, const DerivFunc &derivative, const Scalar tol=1e-13, const int maxIter=200)
 Newton's root finding algorithm for scalar functions (secant method) More...
 
template<class Scalar , class ResFunc , typename std::enable_if_t< std::is_invocable_r_v< Scalar, ResFunc, Scalar > > ...>
Scalar Dumux::findScalarRootNewton (Scalar xOld, const ResFunc &residual, const Scalar tol=1e-13, const int maxIter=200)
 Newton's root finding algorithm for scalar functions (secant method) More...
 
template<class Scalar , class ResFunc , typename std::enable_if_t< std::is_invocable_r_v< Scalar, ResFunc, Scalar > > ...>
Scalar Dumux::findScalarRootBrent (Scalar a, Scalar b, const ResFunc &residual, const Scalar tol=1e-13, const int maxIter=200)
 Brent's root finding algorithm for scalar functions. More...
 

Variables

template<class Variables >
constexpr bool Dumux::hasPriVarsSwitch = Dune::Std::is_detected<Detail::DetectPVSwitch, Variables>()
 Helper boolean to check if the given variables involve primary variable switching. More...
 

Function Documentation

◆ findScalarRootBrent()

template<class Scalar , class ResFunc , typename std::enable_if_t< std::is_invocable_r_v< Scalar, ResFunc, Scalar > > ...>
Scalar Dumux::findScalarRootBrent ( Scalar  a,
Scalar  b,
const ResFunc &  residual,
const Scalar  tol = 1e-13,
const int  maxIter = 200 
)
Note
Modified from pseudo-code on wikipedia: https://en.wikipedia.org/wiki/Brent%27s_method
See also R.P. Brent "An algorithm with guaranteed convergence for finding a zero of a function", The Computer Journal (1971).
This is usually more robust than Newton's method
Parameters
aLower bound
bUpper bound
residualResidual function
tolRelative shift tolerance
maxIterMaximum number of iterations

◆ findScalarRootNewton() [1/2]

template<class Scalar , class ResFunc , class DerivFunc , typename std::enable_if_t< std::is_invocable_r_v< Scalar, ResFunc, Scalar > &&std::is_invocable_r_v< Scalar, DerivFunc, Scalar > > ...>
Scalar Dumux::findScalarRootNewton ( Scalar  xOld,
const ResFunc &  residual,
const DerivFunc &  derivative,
const Scalar  tol = 1e-13,
const int  maxIter = 200 
)
Parameters
xOldinitial guess
residualResidual function
derivativeDerivative of the residual
tolRelative shift tolerance
maxIterMaximum number of iterations

◆ findScalarRootNewton() [2/2]

template<class Scalar , class ResFunc , typename std::enable_if_t< std::is_invocable_r_v< Scalar, ResFunc, Scalar > > ...>
Scalar Dumux::findScalarRootNewton ( Scalar  xOld,
const ResFunc &  residual,
const Scalar  tol = 1e-13,
const int  maxIter = 200 
)
Note
The derivative is numerically computed. If the derivative is know use signature with derivative function.
Parameters
xOldinitial guess
residualResidual function
tolRelative shift tolerance
maxIterMaximum number of iterations

Variable Documentation

◆ hasPriVarsSwitch

template<class Variables >
constexpr bool Dumux::hasPriVarsSwitch = Dune::Std::is_detected<Detail::DetectPVSwitch, Variables>()
inlineconstexpr