7#ifndef LinearFunction_H_
8#define LinearFunction_H_
19template <
class T,
class Ops>
24 using RT =
typename T::value_type;
38 virtual
void apply ( T& a_dF, const T& a_dU ) = 0;
41 virtual
void precond ( T& a_U, const T& a_X ) = 0;
48 amrex::Gpu::DeviceVector<
int>&,
49 amrex::Gpu::DeviceVector<
int>&,
54 inline
void create ( T& a_Z, const T& a_U )
66 inline void assign( T& a_Z,
const T& a_U ) {
73 a_Z.increment(a_U,a_scale);
83 inline void linComb ( T& a_U,
RT a,
const T& X,
RT b,
const T& Y )
85 a_U.linComb( a, X, b, Y );
103 return( a_X.dotProduct(a_Y) );
109 return ( a_U.norm2() );
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