WarpX
Loading...
Searching...
No Matches
Preconditioner.H
Go to the documentation of this file.
1/* Copyright 2024 Debojyoti Ghosh
2 *
3 * This file is part of WarpX.
4 *
5 * License: BSD-3-Clause-LBNL
6 */
7#ifndef WARPX_PRECONDITIONER_H_
8#define WARPX_PRECONDITIONER_H_
9
10#include <AMReX_Enum.H>
11
19 none
20);
21
33
34template <class T, class Ops>
36{
37 public:
38
39 using RT = typename T::value_type;
40
44 Preconditioner () = default;
45
49 virtual ~Preconditioner () = default;
50
51 // Default move and copy operations
52 Preconditioner(const Preconditioner&) = default;
54 Preconditioner(Preconditioner&&) noexcept = default;
55 Preconditioner& operator=(Preconditioner&&) noexcept = default;
56
60 virtual void Define (const T&, Ops* const) = 0;
61
65 virtual void Update ( const T& a_U ) = 0;
66
74 virtual void Apply (T& a_x, const T& a_b) = 0;
75
79 [[nodiscard]] virtual bool IsDefined () const = 0;
80
84 virtual void printParameters() const { }
85
89 inline void CurTime (const RT a_time) { m_time = a_time; }
90
94 inline void CurTimeStep (const RT a_dt) { m_dt = a_dt; }
95
96 protected:
97
98 RT m_time = 0.0;
99 RT m_dt = 0.0;
100
101 private:
102
103};
104
105#endif
#define AMREX_ENUM(CLASS,...)
PreconditionerType
Types for preconditioners for field solvers.
Definition Preconditioner.H:20
@ none
Definition Preconditioner.H:20
@ pc_jacobi
Definition Preconditioner.H:20
@ pc_curl_curl_mlmg
Definition Preconditioner.H:20
@ pc_petsc
Definition Preconditioner.H:20
void CurTimeStep(const RT a_dt)
Set the current time step size.
Definition Preconditioner.H:94
virtual void Apply(T &a_x, const T &a_b)=0
Apply (solve) the preconditioner given a RHS.
Preconditioner(Preconditioner &&) noexcept=default
Preconditioner(const Preconditioner &)=default
RT m_time
Definition Preconditioner.H:98
virtual void printParameters() const
Print parameters.
Definition Preconditioner.H:84
RT m_dt
Definition Preconditioner.H:99
void CurTime(const RT a_time)
Set the current time.
Definition Preconditioner.H:89
virtual void Update(const T &a_U)=0
Update the preconditioner.
typename T::value_type RT
Definition Preconditioner.H:39
virtual ~Preconditioner()=default
Default destructor.
Preconditioner & operator=(const Preconditioner &)=default
virtual bool IsDefined() const =0
Check if the nonlinear solver has been defined.
virtual void Define(const T &, Ops *const)=0
Define the preconditioner.
Preconditioner()=default
Default constructor.