17 #ifndef dealii_sundials_sunlinsol_wrapper_h
18 #define dealii_sundials_sunlinsol_wrapper_h
22 #ifdef DEAL_II_WITH_SUNDIALS
24 # include <sundials/sundials_linearsolver.h>
26 # include <functional>
37 template <
typename VectorType>
38 struct LinearSolverContent;
45 template <
typename VectorType>
52 vmult(VectorType &dst,
const VectorType &src)
const;
54 # if DEAL_II_SUNDIALS_VERSION_GTE(6, 0, 0)
85 # if DEAL_II_SUNDIALS_VERSION_GTE(6, 0, 0)
100 template <
typename VectorType>
111 vmult(VectorType &dst,
const VectorType &src)
const;
113 # if DEAL_II_SUNDIALS_VERSION_GTE(6, 0, 0)
159 # if DEAL_II_SUNDIALS_VERSION_GTE(6, 0, 0)
198 template <
typename VectorType>
203 const VectorType &
b,
214 template <
typename VectorType>
221 SUNContext linsol_ctx
230 operator SUNLinearSolver();
234 std::unique_ptr<LinearSolverContent<VectorType>>
content;
std::unique_ptr< LinearSolverContent< VectorType > > content
SUNLinearSolver sun_linear_solver
LinearSolverWrapper(LinearSolveFunction< VectorType > lsolve, SUNContext linsol_ctx)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_SUNDIALS_VERSION_GTE(major, minor, patch)
#define DEAL_II_NAMESPACE_CLOSE
SymmetricTensor< 2, dim, Number > b(const Tensor< 2, dim, Number > &F)
std::function< int(SundialsOperator< VectorType > &op, SundialsPreconditioner< VectorType > &prec, VectorType &x, const VectorType &b, double tol)> LinearSolveFunction
void vmult(VectorType &dst, const VectorType &src) const
SundialsOperator(void *A_data, ATimesFn a_times_fn, SUNContext linsol_ctx)
SundialsPreconditioner(void *P_data, PSolveFn p_solve_fn, SUNContext linsol_ctx, double tol)
void vmult(VectorType &dst, const VectorType &src) const