WarpX
Loading...
Searching...
No Matches
LinearFunction.H
Go to the documentation of this file.
1/* Copyright 2025 Debojyoti Ghosh
2 *
3 * This file is part of WarpX.
4 *
5 * License: BSD-3-Clause-LBNL
6 */
7#ifndef LinearFunction_H_
8#define LinearFunction_H_
9
10#include "Preconditioner.H"
11
12#include <string>
13
18
19template <class T, class Ops>
21{
22 public:
23
24 using RT = typename T::value_type;
25
27 LinearFunction() = default;
29 virtual ~LinearFunction() = default;
30
31 // Default move and copy operations
32 LinearFunction(const LinearFunction&) = default;
34 LinearFunction(LinearFunction&&) noexcept = default;
35 LinearFunction& operator=(LinearFunction&&) noexcept = default;
36
38 virtual void apply ( T& a_dF, const T& a_dU ) = 0;
39
41 virtual void precond ( T& a_U, const T& a_X ) = 0;
42
44 virtual void updatePreCondMat ( const T& a_X ) = 0;
45
47 virtual void getPCMatrix( amrex::Gpu::DeviceVector<int>&,
48 amrex::Gpu::DeviceVector<int>&,
49 amrex::Gpu::DeviceVector<int>&,
50 amrex::Gpu::DeviceVector<RT>&,
51 int&, int& ) = 0;
52
54 inline void create ( T& a_Z, const T& a_U )
55 {
56 a_Z.define(a_U);
57 }
58
60 virtual T makeVecLHS () const = 0;
61
63 virtual T makeVecRHS () const = 0;
64
66 inline void assign( T& a_Z, const T& a_U ) {
67 a_Z.Copy(a_U);
68 }
69
71 inline void increment( T& a_Z, const T& a_U, RT a_scale )
72 {
73 a_Z.increment(a_U,a_scale);
74 }
75
77 inline void scale ( T& a_U, RT a_scale )
78 {
79 a_U.scale(a_scale);
80 }
81
83 inline void linComb ( T& a_U, RT a, const T& X, RT b, const T& Y )
84 {
85 a_U.linComb( a, X, b, Y );
86 }
87
89 inline void setToZero ( T& a_U )
90 {
91 a_U.zero();
92 }
93
95 inline void setVal ( T& a_U, RT a_val )
96 {
97 a_U.setVal(a_val);
98 }
99
101 inline RT dotProduct( const T& a_X, const T& a_Y )
102 {
103 return( a_X.dotProduct(a_Y) );
104 }
105
107 inline RT norm2( const T& a_U )
108 {
109 return ( a_U.norm2() );
110 }
111
113 virtual void define( const T&, Ops*, const PreconditionerType& ) = 0;
114
116 virtual PreconditionerType pcType () const = 0;
117
118 protected:
119
120 private:
121
122};
123
124#endif
PreconditionerType
Types for preconditioners for field solvers.
Definition Preconditioner.H:22
virtual ~LinearFunction()=default
default destructore
typename T::value_type RT
Definition LinearFunction.H:24
virtual T makeVecRHS() const =0
make RHS vector
void setToZero(T &a_U)
set vector to zero
Definition LinearFunction.H:89
void assign(T &a_Z, const T &a_U)
vector copy operation
Definition LinearFunction.H:66
void create(T &a_Z, const T &a_U)
create a new vector given a defined vector
Definition LinearFunction.H:54
virtual T makeVecLHS() const =0
make LHS vector
virtual void apply(T &a_dF, const T &a_dU)=0
apply the linear function on a given vector of type T
virtual void getPCMatrix(amrex::Gpu::DeviceVector< int > &, amrex::Gpu::DeviceVector< int > &, amrex::Gpu::DeviceVector< int > &, amrex::Gpu::DeviceVector< RT > &, int &, int &)=0
get sparse matrix representation of preconditioner
LinearFunction(const LinearFunction &)=default
LinearFunction(LinearFunction &&) noexcept=default
void increment(T &a_Z, const T &a_U, RT a_scale)
vector scaled-increment operation
Definition LinearFunction.H:71
RT dotProduct(const T &a_X, const T &a_Y)
compute dot product of two vectors
Definition LinearFunction.H:101
virtual void precond(T &a_U, const T &a_X)=0
apply the preconditioner on a given vector of type T
RT norm2(const T &a_U)
compute 2-norm of a vector
Definition LinearFunction.H:107
virtual void updatePreCondMat(const T &a_X)=0
update preconditioner
LinearFunction()=default
default constructor
virtual PreconditionerType pcType() const =0
returns the preconditioner type
void scale(T &a_U, RT a_scale)
vector scaled operation
Definition LinearFunction.H:77
virtual void define(const T &, Ops *, const PreconditionerType &)=0
define the linear function object
void linComb(T &a_U, RT a, const T &X, RT b, const T &Y)
compute linear combination
Definition LinearFunction.H:83
LinearFunction & operator=(const LinearFunction &)=default
void setVal(T &a_U, RT a_val)
set vector to a scalar value
Definition LinearFunction.H:95