www.mooseframework.org
NonlinearSystem.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 
28 {
29 public:
30  NonlinearSystem(FEProblemBase & problem, const std::string & name);
31  virtual ~NonlinearSystem();
32 
33  virtual void solve() override;
34 
35  void init() override;
36 
40  virtual void stopSolve(const ExecFlagType & exec_flag) override;
41 
46  virtual unsigned int getCurrentNonlinearIterationNumber() override
47  {
48  return _nl_implicit_sys.get_current_nonlinear_iteration_number();
49  }
50 
51  virtual void setupFiniteDifferencedPreconditioner() override;
52 
57  virtual bool converged() override;
58 
59  virtual NumericVector<Number> & RHS() override { return *_nl_implicit_sys.rhs; }
60 
62  {
63  return _nl_implicit_sys.nonlinear_solver.get();
64  }
65 
66  virtual SNES getSNES() override;
67 
68  virtual NonlinearImplicitSystem & sys() { return _nl_implicit_sys; }
69 
70  virtual void attachPreconditioner(Preconditioner<Number> * preconditioner) override;
71 
72  void residualAndJacobianTogether() override;
73 
74 protected:
75  void computeScalingJacobian() override;
76  void computeScalingResidual() override;
77 
78  NonlinearImplicitSystem & _nl_implicit_sys;
82 
83 private:
90 
102 
104 
106 };
virtual void solve() override
Solve the system (using libMesh magic)
NonlinearImplicitSystem & _nl_implicit_sys
NonlinearSystem(FEProblemBase &problem, const std::string &name)
virtual void setupFiniteDifferencedPreconditioner() override
ComputeResidualFunctor _nl_residual_functor
void residualAndJacobianTogether() override
Call this method if you want the residual and Jacobian to be computed simultaneously.
void init() override
Initialize the system.
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
virtual NonlinearSolver< Number > * nonlinearSolver() override
Nonlinear system to be solved.
virtual const std::string & name() const
Definition: SystemBase.C:1297
ComputeFDResidualFunctor _fd_residual_functor
virtual void attachPreconditioner(Preconditioner< Number > *preconditioner) override
Attach a customized preconditioner that requires physics knowledge.
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 NumericVector< Number > & RHS() override
virtual bool converged() override
Returns the convergence state.
virtual SNES getSNES() override
Class for containing MooseEnum item information.
Definition: MooseEnumItem.h:18
Nonlinear system to be solved.
virtual NonlinearImplicitSystem & sys()
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 void stopSolve(const ExecFlagType &exec_flag) override
Quit the current solve as soon as possible.
virtual ~NonlinearSystem()