7 #ifndef JacobianFunctionMF_H_
8 #define JacobianFunctionMF_H_
17 template <
class T,
class Ops>
22 using RT =
typename T::value_type;
33 void apply ( T& a_dF, const T& a_dU );
39 else { a_U.Copy(a_X); }
58 void assign( T& a_Z,
const T& a_U ) {
65 a_Z.increment(a_U,a_scale);
77 a_U.linComb( a, X,
b, Y );
95 return( a_X.dotProduct(a_Y) );
101 return ( a_U.norm2() );
144 void define(
const T&, Ops* );
161 template <
class T,
class Ops>
175 template <
class T,
class Ops>
183 template <
class T,
class Ops>
191 template <
class T,
class Ops>
195 using namespace amrex::literals;
196 RT const normY = norm2(a_dU);
200 "JacobianFunction::apply() called on undefined JacobianFunction");
202 if (normY < 1.0e-15) { a_dF.zero(); }
213 if (m_normY0==0.0) {
eps = m_epsJFNK * norm2(m_R0) / normY; }
217 eps = m_epsJFNK * m_normY0 / normY;
220 const RT eps_inv = 1.0_rt/
eps;
222 m_Z.linComb( 1.0, m_Y0,
eps, a_dU );
223 m_ops->ComputeRHS(m_R, m_Z, m_cur_time, m_dt, -1,
true );
227 a_dF.linComb( 1.0, a_dU, eps_inv, m_R0 );
228 a_dF.increment(m_R,-eps_inv);
#define WARPX_ALWAYS_ASSERT_WITH_MESSAGE(EX, MSG)
Definition: TextMsg.H:13
This is a linear function class for computing the action of a Jacobian on a vector using a matrix-fre...
Definition: JacobianFunctionMF.H:19
RT m_cur_time
Definition: JacobianFunctionMF.H:153
bool m_is_defined
Definition: JacobianFunctionMF.H:148
void create(T &a_Z, const T &a_U)
Definition: JacobianFunctionMF.H:49
void scale(T &a_U, RT a_scale)
Definition: JacobianFunctionMF.H:69
void setToZero(T &a_U)
Definition: JacobianFunctionMF.H:81
T m_R0
Definition: JacobianFunctionMF.H:156
void setBaseRHS(const T &a_R)
Definition: JacobianFunctionMF.H:115
RT norm2(const T &a_U)
Definition: JacobianFunctionMF.H:99
void setBaseSolution(const T &a_U)
Definition: JacobianFunctionMF.H:108
bool isDefined() const
Definition: JacobianFunctionMF.H:105
void increment(T &a_Z, const T &a_U, RT a_scale)
Definition: JacobianFunctionMF.H:63
void setIsLinear(bool a_isLinear)
Definition: JacobianFunctionMF.H:127
T m_Z
Definition: JacobianFunctionMF.H:156
void setVal(T &a_U, RT a_val)
Definition: JacobianFunctionMF.H:87
void apply(T &a_dF, const T &a_dU)
Definition: JacobianFunctionMF.H:192
JacobianFunctionMF(const JacobianFunctionMF &)=default
RT m_normY0
Definition: JacobianFunctionMF.H:152
void define(const T &, Ops *)
Definition: JacobianFunctionMF.H:162
void curTimeStep(RT a_dt)
Definition: JacobianFunctionMF.H:139
RT m_dt
Definition: JacobianFunctionMF.H:153
void curTime(RT a_time)
Definition: JacobianFunctionMF.H:133
std::string m_pc_type
Definition: JacobianFunctionMF.H:154
void assign(T &a_Z, const T &a_U)
Definition: JacobianFunctionMF.H:58
bool m_is_linear
Definition: JacobianFunctionMF.H:149
T m_Y0
Definition: JacobianFunctionMF.H:156
void setJFNKEps(RT a_eps)
Definition: JacobianFunctionMF.H:121
void updatePreCondMat(const T &a_X)
Definition: JacobianFunctionMF.H:43
RT m_epsJFNK
Definition: JacobianFunctionMF.H:151
T makeVecRHS() const
Definition: JacobianFunctionMF.H:176
typename T::value_type RT
Definition: JacobianFunctionMF.H:22
Ops * m_ops
Definition: JacobianFunctionMF.H:157
JacobianFunctionMF & operator=(const JacobianFunctionMF &)=default
RT dotProduct(const T &a_X, const T &a_Y)
Definition: JacobianFunctionMF.H:93
bool m_usePreCond
Definition: JacobianFunctionMF.H:150
void precond(T &a_U, const T &a_X)
Definition: JacobianFunctionMF.H:36
JacobianFunctionMF(JacobianFunctionMF &&) noexcept=default
T m_R
Definition: JacobianFunctionMF.H:156
T makeVecLHS() const
Definition: JacobianFunctionMF.H:184
void linComb(T &a_U, RT a, const T &X, RT b, const T &Y)
Definition: JacobianFunctionMF.H:75
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void ignore_unused(const Ts &...)
default
Definition: run_alltests.py:113