7#ifndef JacobianFunctionMF_H_
8#define JacobianFunctionMF_H_
14#include <AMReX_Config.H>
24template <
class T,
class Ops>
29 using RT =
typename T::value_type;
40 void apply ( T& a_dF, const T& a_dU ) override;
43 void precond ( T& a_U, const T& a_X )
override
133 std::unique_ptr<Preconditioner<T,Ops>>
m_preCond =
nullptr;
136template <
class T,
class Ops>
153 m_preCond = std::make_unique<CurlCurlMLMGPC<T,Ops>>();
155 m_preCond = std::make_unique<JacobiPC<T,Ops>>();
157#ifdef AMREX_USE_PETSC
160 WARPX_ABORT_WITH_MESSAGE(
"JacobianFunctionMF::Define(): must compile with PETSc to use pc_petsc (AMREX_USE_PETSC must be defined)");
163 std::stringstream convergenceMsg;
165 <<
" is not a valid preconditioner type.";
174template <
class T,
class Ops>
177 BL_PROFILE(
"JacobianFunctionMF::::makeVecRHS()");
183template <
class T,
class Ops>
186 BL_PROFILE(
"JacobianFunctionMF::::makeVecLHS()");
192template <
class T,
class Ops>
196 using namespace amrex::literals;
197 RT const normY = this->
norm2(a_dU);
201 "JacobianFunction::apply() called on undefined JacobianFunction");
203 if (normY < 1.0e-15) { a_dF.zero(); }
221 const RT eps_inv = 1.0_rt/eps;
223 m_Z.linComb( 1.0,
m_Y0, eps, a_dU );
228 a_dF.linComb( 1.0, a_dU, eps_inv,
m_R0 );
229 a_dF.increment(
m_R,-eps_inv);
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
#define WARPX_ABORT_WITH_MESSAGE(MSG)
Definition TextMsg.H:15
#define WARPX_ALWAYS_ASSERT_WITH_MESSAGE(EX, MSG)
Definition TextMsg.H:13
std::unique_ptr< Preconditioner< T, Ops > > m_preCond
Definition JacobianFunctionMF.H:133
RT m_cur_time
Definition JacobianFunctionMF.H:127
bool m_is_defined
Definition JacobianFunctionMF.H:122
void updatePreCondMat(const T &a_X) override
update preconditioner
Definition JacobianFunctionMF.H:54
T m_R0
Definition JacobianFunctionMF.H:131
void setBaseRHS(const T &a_R)
Definition JacobianFunctionMF.H:76
void setBaseSolution(const T &a_U)
Definition JacobianFunctionMF.H:69
bool isDefined() const
Definition JacobianFunctionMF.H:63
~JacobianFunctionMF()=default
bool usePreconditioner() const
Definition JacobianFunctionMF.H:66
void setIsLinear(bool a_isLinear)
Definition JacobianFunctionMF.H:88
T m_Z
Definition JacobianFunctionMF.H:131
void precond(T &a_U, const T &a_X) override
apply the preconditioner on a given vector of type T
Definition JacobianFunctionMF.H:43
void define(const T &, Ops *, const PreconditionerType &) override
define the linear function object
Definition JacobianFunctionMF.H:137
JacobianFunctionMF(const JacobianFunctionMF &)=default
RT m_normY0
Definition JacobianFunctionMF.H:126
JacobianFunctionMF()=default
void curTimeStep(RT a_dt)
Definition JacobianFunctionMF.H:101
RT m_dt
Definition JacobianFunctionMF.H:127
void curTime(RT a_time)
Definition JacobianFunctionMF.H:94
T makeVecLHS() const override
make LHS vector
Definition JacobianFunctionMF.H:184
void apply(Vec &a_dF, const Vec &a_dU) override
Definition JacobianFunctionMF.H:193
PreconditionerType pcType() const override
returns the preconditioner type
Definition JacobianFunctionMF.H:118
bool m_is_linear
Definition JacobianFunctionMF.H:123
JacobianFunctionMF & operator=(const JacobianFunctionMF &)=default
T m_Y0
Definition JacobianFunctionMF.H:131
void printParams() const
Definition JacobianFunctionMF.H:108
void setJFNKEps(RT a_eps)
Definition JacobianFunctionMF.H:82
RT m_epsJFNK
Definition JacobianFunctionMF.H:125
typename T::value_type RT
Definition JacobianFunctionMF.H:29
Ops * m_ops
Definition JacobianFunctionMF.H:132
T makeVecRHS() const override
make RHS vector
Definition JacobianFunctionMF.H:175
bool m_usePreCond
Definition JacobianFunctionMF.H:124
JacobianFunctionMF(JacobianFunctionMF &&) noexcept=default
T m_R
Definition JacobianFunctionMF.H:131
PreconditionerType m_pc_type
Definition JacobianFunctionMF.H:129
RT norm2(const T &a_U)
compute 2-norm of a vector
Definition LinearFunction.H:100
LinearFunction()=default
default constructor
std::string getEnumNameString(T const &v)