WarpX
Loading...
Searching...
No Matches
NonlinearSolver.H
Go to the documentation of this file.
1#ifndef WARPX_NONLINEAR_SOLVER_H_
2#define WARPX_NONLINEAR_SOLVER_H_
3
5#include <AMReX_REAL.H>
6
7#include <AMReX_BaseFwd.H>
8
9#include <string>
10#include <array>
11#include <memory>
12
25
26template<class Vec, class Ops>
28{
29public:
30
31 NonlinearSolver() = default;
32
33 virtual ~NonlinearSolver() = default;
34
35 // Prohibit Move and Copy operations
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,
63 int) const = 0;
64
68 virtual void PrintParams () const = 0;
69
73 virtual void GetSolverParams (amrex::Real&, amrex::Real&, int&) = 0;
74
78 virtual bool UsePreconditioner () { return m_usePC; }
79
84 virtual void Verbose ( bool a_verbose ) { m_verbose = a_verbose; }
85
86protected:
87
88 bool m_is_defined = false;
89 mutable bool m_verbose = true;
90 std::string m_diagnostic_file;
92 bool m_usePC = false;
93
94};
95
96#endif
NonlinearSolver(const NonlinearSolver &)=delete
virtual void PrintParams() const =0
Print parameters used by the nonlinear solver.
bool m_usePC
Definition NonlinearSolver.H:92
bool m_is_defined
Definition NonlinearSolver.H:88
std::string m_diagnostic_file
Definition NonlinearSolver.H:90
virtual ~NonlinearSolver()=default
virtual bool UsePreconditioner()
Whether a preconditioner is used by the nonlinear solver.
Definition NonlinearSolver.H:78
NonlinearSolver()=default
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.
virtual 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:84
int m_diagnostic_interval
Definition NonlinearSolver.H:91
NonlinearSolver & operator=(const NonlinearSolver &)=delete
virtual void Define(const Vec &, Ops *)=0
Read user-provided parameters that control the nonlinear solver. Allocate intermediate data container...
virtual void Solve(Vec &, const Vec &, amrex::Real, amrex::Real, int) const =0
Solve the specified nonlinear equation for U. Picard: U = b + R(U). Newton: F(U) = U - b - R(U) = 0.
NonlinearSolver(NonlinearSolver &&) noexcept=delete
bool m_verbose
Definition NonlinearSolver.H:89