7#ifndef JacobianFunctionMF_H_
8#define JacobianFunctionMF_H_
15#include <AMReX_Config.H>
25template <
class T,
class Ops>
30 using RT =
typename T::value_type;
41 void apply ( T& a_dF, const T& a_dU ) override;
44 void precond ( T& a_U, const T& a_X )
override
65 int& a_n,
int& a_ncols_max )
override
68 m_preCond->getPCMatrix(a_ridx_g, a_nnz, a_cidx_g, a_aij, a_n, a_ncols_max);
146 std::unique_ptr<Preconditioner<T,Ops>>
m_preCond =
nullptr;
149template <
class T,
class Ops>
166 m_preCond = std::make_unique<CurlCurlMLMGPC<T,Ops>>();
168 m_preCond = std::make_unique<JacobiPC<T,Ops>>();
170 m_preCond = std::make_unique<MatrixPC<T,Ops>>();
179template <
class T,
class Ops>
182 BL_PROFILE(
"JacobianFunctionMF::::makeVecRHS()");
188template <
class T,
class Ops>
191 BL_PROFILE(
"JacobianFunctionMF::::makeVecLHS()");
197template <
class T,
class Ops>
201 using namespace amrex::literals;
202 RT const normY = this->
norm2(a_dU);
206 "JacobianFunction::apply() called on undefined JacobianFunction");
208 if (normY < 1.0e-15) { a_dF.zero(); }
226 const RT eps_inv = 1.0_rt/eps;
228 m_Z.linComb( 1.0,
m_Y0, eps, a_dU );
233 a_dF.linComb( 1.0, a_dU, eps_inv,
m_R0 );
234 a_dF.increment(
m_R,-eps_inv);
#define AMREX_ALWAYS_ASSERT(EX)
PreconditionerType
Types for preconditioners for field solvers.
Definition Preconditioner.H:22
@ none
Definition Preconditioner.H:22
@ pc_jacobi
Definition Preconditioner.H:22
@ pc_curl_curl_mlmg
Definition Preconditioner.H:22
#define WARPX_ALWAYS_ASSERT_WITH_MESSAGE(EX, MSG)
Definition TextMsg.H:13
std::unique_ptr< Preconditioner< T, Ops > > m_preCond
Definition JacobianFunctionMF.H:146
RT m_cur_time
Definition JacobianFunctionMF.H:140
bool m_is_defined
Definition JacobianFunctionMF.H:135
void updatePreCondMat(const T &a_X) override
update preconditioner
Definition JacobianFunctionMF.H:55
T m_R0
Definition JacobianFunctionMF.H:144
void setBaseRHS(const T &a_R)
Definition JacobianFunctionMF.H:89
void setBaseSolution(const T &a_U)
Definition JacobianFunctionMF.H:82
bool isDefined() const
Definition JacobianFunctionMF.H:76
~JacobianFunctionMF()=default
bool usePreconditioner() const
Definition JacobianFunctionMF.H:79
void setIsLinear(bool a_isLinear)
Definition JacobianFunctionMF.H:101
T m_Z
Definition JacobianFunctionMF.H:144
void precond(T &a_U, const T &a_X) override
apply the preconditioner on a given vector of type T
Definition JacobianFunctionMF.H:44
void define(const T &, Ops *, const PreconditionerType &) override
define the linear function object
Definition JacobianFunctionMF.H:150
JacobianFunctionMF(const JacobianFunctionMF &)=default
RT m_normY0
Definition JacobianFunctionMF.H:139
JacobianFunctionMF()=default
void curTimeStep(RT a_dt)
Definition JacobianFunctionMF.H:114
RT m_dt
Definition JacobianFunctionMF.H:140
void curTime(RT a_time)
Definition JacobianFunctionMF.H:107
T makeVecLHS() const override
make LHS vector
Definition JacobianFunctionMF.H:189
void apply(Vec &a_dF, const Vec &a_dU) override
Definition JacobianFunctionMF.H:198
PreconditionerType pcType() const override
returns the preconditioner type
Definition JacobianFunctionMF.H:131
bool m_is_linear
Definition JacobianFunctionMF.H:136
JacobianFunctionMF & operator=(const JacobianFunctionMF &)=default
T m_Y0
Definition JacobianFunctionMF.H:144
void printParams() const
Definition JacobianFunctionMF.H:121
void setJFNKEps(RT a_eps)
Definition JacobianFunctionMF.H:95
RT m_epsJFNK
Definition JacobianFunctionMF.H:138
typename T::value_type RT
Definition JacobianFunctionMF.H:30
Ops * m_ops
Definition JacobianFunctionMF.H:145
void getPCMatrix(amrex::Gpu::DeviceVector< int > &a_ridx_g, amrex::Gpu::DeviceVector< int > &a_nnz, amrex::Gpu::DeviceVector< int > &a_cidx_g, amrex::Gpu::DeviceVector< RT > &a_aij, int &a_n, int &a_ncols_max) override
get sparse matrix representation of preconditioner
Definition JacobianFunctionMF.H:61
T makeVecRHS() const override
make RHS vector
Definition JacobianFunctionMF.H:180
bool m_usePreCond
Definition JacobianFunctionMF.H:137
JacobianFunctionMF(JacobianFunctionMF &&) noexcept=default
T m_R
Definition JacobianFunctionMF.H:144
PreconditionerType m_pc_type
Definition JacobianFunctionMF.H:142
RT norm2(const T &a_U)
compute 2-norm of a vector
Definition LinearFunction.H:107
LinearFunction()=default
default constructor
PODVector< T, ArenaAllocator< T > > DeviceVector
std::string getEnumNameString(T const &v)