WarpX
NonlinearSolver.H
Go to the documentation of this file.
1 #ifndef WARPX_NONLINEAR_SOLVER_H_
2 #define WARPX_NONLINEAR_SOLVER_H_
3 
4 #include <AMReX_GpuContainers.H>
5 #include <AMReX_REAL.H>
6 
7 #include <AMReX_BaseFwd.H>
8 
9 #include <string>
10 #include <array>
11 #include <memory>
12 
26 template<class Vec, class Ops>
28 {
29 public:
30 
31  NonlinearSolver<Vec,Ops>() = default;
32 
33  virtual ~NonlinearSolver<Vec,Ops>() = default;
34 
35  // Prohibit Move and Copy operations
36  NonlinearSolver(const NonlinearSolver&) = delete;
38  NonlinearSolver(NonlinearSolver&&) noexcept = delete;
39  NonlinearSolver& operator=(NonlinearSolver&&) noexcept = delete;
40 
46  virtual void Define ( const Vec&,
47  Ops* ) = 0;
48 
52  [[nodiscard]] bool IsDefined () const { return m_is_defined; }
53 
59  virtual void Solve ( Vec&,
60  const Vec&,
61  amrex::Real,
62  amrex::Real ) const = 0;
63 
67  virtual void PrintParams () const = 0;
68 
72  virtual void GetSolverParams (amrex::Real&, amrex::Real&, int&) = 0;
73 
78  void Verbose ( bool a_verbose ) { m_verbose = a_verbose; }
79 
80 protected:
81 
82  bool m_is_defined = false;
83  mutable bool m_verbose = true;
84 
85 };
86 
87 #endif
Top-level class for the nonlinear solver.
Definition: NonlinearSolver.H:28
virtual void Solve(Vec &, const Vec &, amrex::Real, amrex::Real) const =0
Solve the specified nonlinear equation for U. Picard: U = b + R(U). Newton: F(U) = U - b - R(U) = 0.
NonlinearSolver(const NonlinearSolver &)=delete
virtual void PrintParams() const =0
Print parameters used by the nonlinear solver.
bool m_is_defined
Definition: NonlinearSolver.H:82
bool IsDefined() const
Check if the nonlinear solver has been defined.
Definition: NonlinearSolver.H:52
virtual void GetSolverParams(amrex::Real &, amrex::Real &, int &)=0
Return the convergence parameters used by the nonlinear solver.
void Verbose(bool a_verbose)
Allow caller to dynamically change the verbosity flag. For example, one may want to only print solver...
Definition: NonlinearSolver.H:78
virtual void Define(const Vec &, Ops *)=0
Read user-provided parameters that control the nonlinear solver. Allocate intermediate data container...
NonlinearSolver & operator=(const NonlinearSolver &)=delete
NonlinearSolver(NonlinearSolver &&) noexcept=delete
bool m_verbose
Definition: NonlinearSolver.H:83