version 3.10-dev
Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm > Class Template Reference

An implementation of a Newton solver. More...

#include <dumux/nonlinear/newtonsolver.hh>

Inheritance diagram for Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >:

Description

template<class Assembler, class LinearSolver, class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
class Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >
Template Parameters
Assemblerthe assembler
LinearSolverthe linear solver
Commthe communication object used to communicate with all processes
Note
If you want to specialize only some methods but are happy with the defaults of the reference solver, derive your solver from this class and simply overload the required methods.

Public Types

using Communication = Comm
 
using Assembler = Assembler
 export the assembler and linear solver types More...
 
using LinearSolver = LinearSolver
 
using Variables = Detail::PDESolver::AssemblerVariables< Assembler >
 export the type of variables that represent a numerical solution More...
 

Public Member Functions

 NewtonSolver (std::shared_ptr< Assembler > assembler, std::shared_ptr< LinearSolver > linearSolver, const Communication &comm=Dune::MPIHelper::getCommunication(), const std::string &paramGroup="", const std::string &paramGroupName="Newton", int verbosity=2)
 
const Communicationcomm () const
 the communicator for parallel runs More...
 
void setMaxRelativeShift (Scalar tolerance)
 Set the maximum acceptable difference of any primary variable between two iterations for declaring convergence. More...
 
void setMaxAbsoluteResidual (Scalar tolerance)
 Set the maximum acceptable absolute residual for declaring convergence. More...
 
void setResidualReduction (Scalar tolerance)
 Set the maximum acceptable residual norm reduction. More...
 
void setTargetSteps (int targetSteps)
 Set the number of iterations at which the Newton method should aim at. More...
 
void setMinSteps (int minSteps)
 Set the number of minimum iterations for the Newton method. More...
 
void setMaxSteps (int maxSteps)
 Set the number of iterations after which the Newton method gives up. More...
 
void solve (Variables &vars, TimeLoop &timeLoop) override
 Run the Newton method to solve a non-linear system. Does time step control when the Newton fails to converge. More...
 
void solve (Variables &vars) override
 Run the Newton method to solve a non-linear system. The solver is responsible for all the strategic decisions. More...
 
bool apply (Variables &vars) override
 Run the Newton method to solve a non-linear system. The solver is responsible for all the strategic decisions. More...
 
virtual void newtonBegin (Variables &initVars)
 Called before the Newton method is applied to an non-linear system of equations. More...
 
virtual bool newtonProceed (const Variables &varsCurrentIter, bool converged)
 Returns true if another iteration should be done. More...
 
virtual void newtonBeginStep (const Variables &vars)
 Indicates the beginning of a Newton iteration. More...
 
virtual void assembleLinearSystem (const Variables &vars)
 Assemble the linear system of equations \(\mathbf{A}x - b = 0\). More...
 
void solveLinearSystem (ResidualVector &deltaU)
 Solve the linear system of equations \(\mathbf{A}x - b = 0\). More...
 
void newtonUpdate (Variables &vars, const SolutionVector &uLastIter, const ResidualVector &deltaU)
 Update the current solution with a delta vector. More...
 
virtual void newtonEndStep (Variables &vars, const SolutionVector &uLastIter)
 Indicates that one Newton iteration was finished. More...
 
virtual void newtonEnd ()
 Called if the Newton method ended (not known yet if we failed or succeeded) More...
 
virtual bool newtonConverged () const
 Returns true if the error of the solution is below the tolerance. More...
 
virtual void newtonFail (Variables &u)
 Called if the Newton method broke down. This method is called after newtonEnd() More...
 
virtual void newtonSucceed ()
 Called if the Newton method ended successfully This method is called after newtonEnd() More...
 
void report (std::ostream &sout=std::cout) const
 output statistics / report More...
 
void resetReport ()
 reset the statistics More...
 
void reportParams (std::ostream &sout=std::cout) const
 Report the options and parameters this Newton is configured with. More...
 
Scalar suggestTimeStepSize (Scalar oldTimeStep) const
 Suggest a new time-step size based on the old time-step size. More...
 
void setVerbosity (int val)
 Specify the verbosity level. More...
 
int verbosity () const
 Return the verbosity level. More...
 
void setUseLineSearch (bool val=true)
 Specify whether line search is enabled or not. More...
 
bool useLineSearch () const
 Return whether line search is enabled or not. More...
 
const std::string & paramGroup () const
 Returns the parameter group. More...
 
void attachConvergenceWriter (std::shared_ptr< ConvergenceWriter > convWriter)
 Attach a convergence writer to write out intermediate results after each iteration. More...
 
void detachConvergenceWriter ()
 Detach the convergence writer to stop the output. More...
 
Scalar retryTimeStepReductionFactor () const
 Return the factor for reducing the time step after a Newton iteration has failed. More...
 
void setRetryTimeStepReductionFactor (const Scalar factor)
 Set the factor for reducing the time step after a Newton iteration has failed. More...
 
const Assemblerassembler () const
 Access the assembler. More...
 
Assemblerassembler ()
 Access the assembler. More...
 
const LinearSolverlinearSolver () const
 Access the linear solver. More...
 

Protected Types

using Backend = VariablesBackend< typename ParentType::Variables >
 
using SolutionVector = typename Backend::DofVector
 
using ResidualVector = typename Assembler::ResidualType
 
using LinearAlgebraNativeBackend = VariablesBackend< ResidualVector >
 

Protected Member Functions

virtual void solutionChanged_ (Variables &vars, const SolutionVector &uCurrentIter)
 Update solution-dependent quantities like grid variables after the solution has changed. More...
 
void computeResidualReduction_ (const Variables &vars)
 
bool enableResidualCriterion () const
 
LinearSolverlinearSolver ()
 Access the linear solver. More...
 
bool checkSizesOfSubMatrices (const Dune::MultiTypeBlockMatrix< FirstRow, Args... > &matrix) const
 Helper function to assure the MultiTypeBlockMatrix's sub-blocks have the correct sizes. More...
 
bool checkSizesOfSubMatrices (const M &) const
 Default implementation for any matrix type. More...
 

Protected Attributes

int targetSteps_
 optimal number of iterations we want to achieve More...
 
int minSteps_
 minimum number of iterations we do More...
 
int maxSteps_
 maximum number of iterations we do before giving up More...
 
int numSteps_
 actual number of steps done so far More...
 
Scalar reduction_
 
Scalar residualNorm_
 
Scalar lastReduction_
 
Scalar initialResidual_
 
Scalar shift_
 
Scalar lastShift_
 
std::ostringstream endIterMsgStream_
 message stream to be displayed at the end of iterations More...
 

Member Typedef Documentation

◆ Assembler

using Dumux::PDESolver< Assembler , LinearSolver >::Assembler = Assembler
inherited

◆ Backend

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
using Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::Backend = VariablesBackend<typename ParentType::Variables>
protected

◆ Communication

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
using Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::Communication = Comm

◆ LinearAlgebraNativeBackend

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
using Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::LinearAlgebraNativeBackend = VariablesBackend<ResidualVector>
protected

◆ LinearSolver

using Dumux::PDESolver< Assembler , LinearSolver >::LinearSolver = LinearSolver
inherited

◆ ResidualVector

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
using Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::ResidualVector = typename Assembler::ResidualType
protected

◆ SolutionVector

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
using Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::SolutionVector = typename Backend::DofVector
protected

◆ Variables

Constructor & Destructor Documentation

◆ NewtonSolver()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::NewtonSolver ( std::shared_ptr< Assembler assembler,
std::shared_ptr< LinearSolver linearSolver,
const Communication comm = Dune::MPIHelper::getCommunication(),
const std::string &  paramGroup = "",
const std::string &  paramGroupName = "Newton",
int  verbosity = 2 
)
inline

Member Function Documentation

◆ apply()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
bool Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::apply ( Variables vars)
inlineoverridevirtual
Parameters
varsThe variables object representing the current state of the numerical solution (primary and possibly secondary variables).
Postcondition
If converged, the Variables will represent the solution. If convergence fails, they are in some intermediate, undefined state.

Implements Dumux::PDESolver< Assembler, LinearSolver >.

◆ assembleLinearSystem()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
virtual void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::assembleLinearSystem ( const Variables vars)
inlinevirtual
Parameters
varsThe current iteration's variables

◆ assembler() [1/2]

Assembler & Dumux::PDESolver< Assembler , LinearSolver >::assembler ( )
inlineinherited

◆ assembler() [2/2]

const Assembler & Dumux::PDESolver< Assembler , LinearSolver >::assembler ( ) const
inlineinherited

◆ attachConvergenceWriter()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::attachConvergenceWriter ( std::shared_ptr< ConvergenceWriter convWriter)
inline

◆ checkSizesOfSubMatrices() [1/2]

bool Dumux::PDESolver< Assembler , LinearSolver >::checkSizesOfSubMatrices ( const Dune::MultiTypeBlockMatrix< FirstRow, Args... > &  matrix) const
inlineprotectedinherited

◆ checkSizesOfSubMatrices() [2/2]

bool Dumux::PDESolver< Assembler , LinearSolver >::checkSizesOfSubMatrices ( const M &  ) const
inlineprotectedinherited

◆ comm()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
const Communication & Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::comm ( ) const
inline

◆ computeResidualReduction_()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::computeResidualReduction_ ( const Variables vars)
inlineprotected

◆ detachConvergenceWriter()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::detachConvergenceWriter ( )
inline

◆ enableResidualCriterion()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
bool Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::enableResidualCriterion ( ) const
inlineprotected

◆ linearSolver() [1/2]

LinearSolver & Dumux::PDESolver< Assembler , LinearSolver >::linearSolver ( )
inlineprotectedinherited

◆ linearSolver() [2/2]

const LinearSolver & Dumux::PDESolver< Assembler , LinearSolver >::linearSolver ( ) const
inlineinherited

◆ newtonBegin()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
virtual void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::newtonBegin ( Variables initVars)
inlinevirtual
Parameters
initVarsThe variables representing the initial solution

Reimplemented in Dumux::MultiDomainNewtonSolver< Assembler, LinearSolver, CouplingManager, Reassembler, Comm >.

◆ newtonBeginStep()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
virtual void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::newtonBeginStep ( const Variables vars)
inlinevirtual

◆ newtonConverged()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
virtual bool Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::newtonConverged ( ) const
inlinevirtual

◆ newtonEnd()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
virtual void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::newtonEnd ( )
inlinevirtual

◆ newtonEndStep()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
virtual void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::newtonEndStep ( Variables vars,
const SolutionVector uLastIter 
)
inlinevirtual
Parameters
varsThe variables after the current Newton iteration
uLastIterThe solution at the beginning of the current Newton iteration

Reimplemented in Dumux::NonEquilibriumNewtonSolver< Assembler, LinearSolver >, and Dumux::MultiDomainNewtonSolver< Assembler, LinearSolver, CouplingManager, Reassembler, Comm >.

◆ newtonFail()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
virtual void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::newtonFail ( Variables u)
inlinevirtual

◆ newtonProceed()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
virtual bool Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::newtonProceed ( const Variables varsCurrentIter,
bool  converged 
)
inlinevirtual
Parameters
varsCurrentIterThe variables of the current Newton iteration
convergedif the Newton method's convergence criterion was met in this step

◆ newtonSucceed()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
virtual void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::newtonSucceed ( )
inlinevirtual

◆ newtonUpdate()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::newtonUpdate ( Variables vars,
const SolutionVector uLastIter,
const ResidualVector deltaU 
)
inline

The error estimates required for the newtonConverged() and newtonProceed() methods should be updated inside this method.

Different update strategies, such as line search and chopped updates can be implemented. The default behavior is just to subtract deltaU from uLastIter, i.e.

\[ u^{k+1} = u^k - \Delta u^k \]

Parameters
varsThe variables after the current iteration
uLastIterThe solution vector after the last iteration
deltaUThe delta as calculated from solving the linear system of equations. This parameter also stores the updated solution.

◆ paramGroup()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
const std::string & Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::paramGroup ( ) const
inline

◆ report()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::report ( std::ostream &  sout = std::cout) const
inline

◆ reportParams()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::reportParams ( std::ostream &  sout = std::cout) const
inline

◆ resetReport()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::resetReport ( )
inline

◆ retryTimeStepReductionFactor()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
Scalar Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::retryTimeStepReductionFactor ( ) const
inline

◆ setMaxAbsoluteResidual()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::setMaxAbsoluteResidual ( Scalar  tolerance)
inline
Parameters
toleranceThe maximum absolute residual at which the scheme is considered finished

◆ setMaxRelativeShift()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::setMaxRelativeShift ( Scalar  tolerance)
inline
Parameters
toleranceThe maximum relative shift between two Newton iterations at which the scheme is considered finished

◆ setMaxSteps()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::setMaxSteps ( int  maxSteps)
inline
Parameters
maxStepsNumber of iterations after we give up

◆ setMinSteps()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::setMinSteps ( int  minSteps)
inline
Parameters
minStepsMinimum number of iterations

◆ setResidualReduction()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::setResidualReduction ( Scalar  tolerance)
inline
Parameters
toleranceThe maximum reduction of the residual norm at which the scheme is considered finished

◆ setRetryTimeStepReductionFactor()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::setRetryTimeStepReductionFactor ( const Scalar  factor)
inline

◆ setTargetSteps()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::setTargetSteps ( int  targetSteps)
inline

This is used to control the time-step size. The heuristic used is to scale the last time-step size by the deviation of the number of iterations used from the target steps.

Parameters
targetStepsNumber of iterations which are considered "optimal"

◆ setUseLineSearch()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::setUseLineSearch ( bool  val = true)
inline

◆ setVerbosity()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::setVerbosity ( int  val)
inline

◆ solutionChanged_()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
virtual void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::solutionChanged_ ( Variables vars,
const SolutionVector uCurrentIter 
)
inlineprotectedvirtual

◆ solve() [1/2]

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::solve ( Variables vars)
inlineoverridevirtual
Parameters
varsThe variables object representing the current state of the numerical solution (primary and possibly secondary variables).

Implements Dumux::PDESolver< Assembler, LinearSolver >.

◆ solve() [2/2]

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::solve ( Variables vars,
TimeLoop timeLoop 
)
inlineoverridevirtual
Parameters
varsThe variables object representing the current state of the numerical solution (primary and possibly secondary variables).
timeLoopThe time loop.

Reimplemented from Dumux::PDESolver< Assembler, LinearSolver >.

◆ solveLinearSystem()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
void Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::solveLinearSystem ( ResidualVector deltaU)
inline

Throws Dumux::NumericalProblem if the linear solver didn't converge.

If the linear solver doesn't accept multitype matrices we copy the matrix into a 1x1 block BCRS matrix for solving.

Parameters
deltaUThe difference between the current and the next solution

◆ suggestTimeStepSize()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
Scalar Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::suggestTimeStepSize ( Scalar  oldTimeStep) const
inline

The default behavior is to suggest the old time-step size scaled by the ratio between the target iterations and the iterations required to actually solve the last time-step.

◆ useLineSearch()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
bool Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::useLineSearch ( ) const
inline

◆ verbosity()

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
int Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::verbosity ( ) const
inline

Member Data Documentation

◆ endIterMsgStream_

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
std::ostringstream Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::endIterMsgStream_
protected

◆ initialResidual_

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
Scalar Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::initialResidual_
protected

◆ lastReduction_

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
Scalar Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::lastReduction_
protected

◆ lastShift_

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
Scalar Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::lastShift_
protected

◆ maxSteps_

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
int Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::maxSteps_
protected

◆ minSteps_

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
int Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::minSteps_
protected

◆ numSteps_

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
int Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::numSteps_
protected

◆ reduction_

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
Scalar Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::reduction_
protected

◆ residualNorm_

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
Scalar Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::residualNorm_
protected

◆ shift_

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
Scalar Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::shift_
protected

◆ targetSteps_

template<class Assembler , class LinearSolver , class Reassembler = PartialReassembler<Assembler>, class Comm = Dune::Communication<Dune::MPIHelper::MPICommunicator>>
int Dumux::NewtonSolver< Assembler, LinearSolver, Reassembler, Comm >::targetSteps_
protected

The documentation for this class was generated from the following file: