3.5-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
Files | Classes | Functions | Variables

Nonlinear solvers: Newton method. More...

Description

Nonlinear solvers: Newton method.

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  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 sover for coupled problems. More...
 
class  Dumux::NewtonConvergenceWriter< GridGeometry, SolutionVector >
 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 >
 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 = typename Detail::GetPVSwitch<Variables>::value_t()
 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 
)

Brent's root finding algorithm for scalar functions.

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 
)

Newton's root finding algorithm for scalar functions (secant method)

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 
)

Newton's root finding algorithm for scalar functions (secant method)

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 = typename Detail::GetPVSwitch<Variables>::value_t()
inlineconstexpr

Helper boolean to check if the given variables involve primary variable switching.