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
11
12#include "Utils/TextMsg.H"
13#include <AMReX_Enum.H>
14#include <string>
15
16// Can't wrap pc_petsc inside AMREX_USE_PETSC directives.
17
29
30template <class T, class Ops>
32{
33 public:
34
35 using RT = typename T::value_type;
36
40 Preconditioner () = default;
41
45 virtual ~Preconditioner () = default;
46
47 // Default move and copy operations
48 Preconditioner(const Preconditioner&) = default;
50 Preconditioner(Preconditioner&&) noexcept = default;
51 Preconditioner& operator=(Preconditioner&&) noexcept = default;
52
56 virtual void Define (const T&, Ops* const) = 0;
57
61 virtual void Update ( const T& a_U ) = 0;
62
70 virtual void Apply (T& a_x, const T& a_b) = 0;
71
80 virtual void getPCMatrix( amrex::Gpu::DeviceVector<int>&,
81 amrex::Gpu::DeviceVector<int>&,
82 amrex::Gpu::DeviceVector<int>&,
83 amrex::Gpu::DeviceVector<RT>&,
84 int&, int& )
85 {
86 WARPX_ABORT_WITH_MESSAGE("getPCMatrix() called on base class!");
87 }
88
92 [[nodiscard]] virtual bool IsDefined () const = 0;
93
97 virtual void setName (const std::string&) { }
98
102 virtual void printParameters() const { }
103
107 inline void CurTime (const RT a_time) { m_time = a_time; }
108
112 inline void CurTimeStep (const RT a_dt) { m_dt = a_dt; }
113
114 protected:
115
116 RT m_time = 0.0;
117 RT m_dt = 0.0;
118
119 private:
120
121};
122
123#endif
#define WARPX_ABORT_WITH_MESSAGE(MSG)
Definition TextMsg.H:15
void CurTimeStep(const RT a_dt)
Set the current time step size.
Definition Preconditioner.H:112
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:116
virtual void printParameters() const
Print parameters.
Definition Preconditioner.H:102
RT m_dt
Definition Preconditioner.H:117
void CurTime(const RT a_time)
Set the current time.
Definition Preconditioner.H:107
virtual void Update(const T &a_U)=0
Update the preconditioner.
typename T::value_type RT
Definition Preconditioner.H:35
virtual ~Preconditioner()=default
Default destructor.
Preconditioner & operator=(const Preconditioner &)=default
virtual void setName(const std::string &)
Set the name for screen output and parsing inputs.
Definition Preconditioner.H:97
virtual bool IsDefined() const =0
Check if the nonlinear solver has been defined.
virtual void getPCMatrix(amrex::Gpu::DeviceVector< int > &, amrex::Gpu::DeviceVector< int > &, amrex::Gpu::DeviceVector< int > &, amrex::Gpu::DeviceVector< RT > &, int &, int &)
Get the sparse matrix form of the preconditioner.
Definition Preconditioner.H:80
virtual void Define(const T &, Ops *const)=0
Define the preconditioner.
Preconditioner()=default
Default constructor.