Loading [MathJax]/extensions/tex2jax.js
https://mooseframework.inl.gov
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
NonlinearSystem.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 #include "NonlinearSystemBase.h"
13 #include "ComputeResidualFunctor.h"
16 #include "SubProblem.h"
17 #include "MooseError.h"
18 
19 #include "libmesh/transient_system.h"
20 #include "libmesh/nonlinear_implicit_system.h"
21 
29 {
30 public:
31  NonlinearSystem(FEProblemBase & problem, const std::string & name);
32  virtual ~NonlinearSystem();
33 
34  virtual void solve() override;
35 
36  virtual void preInit() override;
37 
41  virtual void stopSolve(const ExecFlagType & exec_flag,
42  const std::set<TagID> & vector_tags_to_close) override;
43 
48  virtual unsigned int getCurrentNonlinearIterationNumber() override
49  {
51  }
52 
53  virtual void setupFiniteDifferencedPreconditioner() override;
54 
59  virtual bool converged() override;
60 
61  virtual NumericVector<Number> & RHS() override { return *_nl_implicit_sys.rhs; }
62 
64  {
66  }
67 
68  virtual SNES getSNES() override;
69 
71 
72  virtual void attachPreconditioner(libMesh::Preconditioner<Number> * preconditioner) override;
73 
74  virtual void residualAndJacobianTogether() override;
75 
76  virtual void precheck(const NumericVector<Number> & precheck_soln,
77  NumericVector<Number> & search_direction,
78  bool & changed,
80 
81  virtual void potentiallySetupFiniteDifferencing() override;
82 
83 protected:
84  void computeScalingJacobian() override;
85  void computeScalingResidual() override;
86 
91 
92 private:
99 
111 
112  virtual bool matrixFromColoring() const override { return _use_coloring_finite_difference; }
113 
115 };
virtual libMesh::NonlinearSolver< Number > * nonlinearSolver() override
std::unique_ptr< NonlinearSolver< Number > > nonlinear_solver
virtual void solve() override
Solve the system (using libMesh magic)
libMesh::NonlinearImplicitSystem & _nl_implicit_sys
NonlinearSystem(FEProblemBase &problem, const std::string &name)
virtual void setupFiniteDifferencedPreconditioner() override
NumericVector< Number > * rhs
ComputeResidualFunctor _nl_residual_functor
virtual void precheck(const NumericVector< Number > &precheck_soln, NumericVector< Number > &search_direction, bool &changed, libMesh::NonlinearImplicitSystem &S) override
virtual void preInit() override
This is called prior to the libMesh system has been init&#39;d.
virtual void residualAndJacobianTogether() override
Call this method if you want the residual and Jacobian to be computed simultaneously.
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
Nonlinear system to be solved.
virtual const std::string & name() const
Definition: SystemBase.C:1301
virtual void stopSolve(const ExecFlagType &exec_flag, const std::set< TagID > &vector_tags_to_close) override
Quit the current solve as soon as possible.
ComputeFDResidualFunctor _fd_residual_functor
ComputeResidualAndJacobian _resid_and_jac_functor
void setupColoringFiniteDifferencedPreconditioner()
According to the nonzero pattern provided in the matrix, a graph is constructed.
virtual unsigned int getCurrentNonlinearIterationNumber() override
Returns the current nonlinear iteration number.
bool _use_coloring_finite_difference
void computeScalingResidual() override
Compute a "residual" for automatic scaling purposes.
virtual libMesh::NonlinearImplicitSystem & sys()
virtual NumericVector< Number > & RHS() override
virtual bool converged() override
Returns the convergence state.
unsigned get_current_nonlinear_iteration_number() const
virtual SNES getSNES() override
virtual void attachPreconditioner(libMesh::Preconditioner< Number > *preconditioner) override
Attach a customized preconditioner that requires physics knowledge.
virtual void potentiallySetupFiniteDifferencing() override
Create finite differencing contexts for assembly of the Jacobian and/or approximating the action of t...
Class for containing MooseEnum item information.
Definition: MooseEnumItem.h:18
Nonlinear system to be solved.
void setupStandardFiniteDifferencedPreconditioner()
Form preconditioning matrix via a standard finite difference method column-by-column.
void computeScalingJacobian() override
Compute a "Jacobian" for automatic scaling purposes.
virtual bool matrixFromColoring() const override
Whether a system matrix is formed from coloring.
virtual ~NonlinearSystem()