20 #ifndef __mast_petsc_linear_solver_h__ 21 #define __mast_petsc_linear_solver_h__ 33 namespace PETScWrapper {
52 ierr = KSPDestroy(&
_ksp);
53 CHKERRABORT(
_comm, ierr);
63 inline void init(Mat A,
const std::string* scope =
nullptr) {
65 Assert0(!
_A,
"solver already initialized");
74 CHKERRABORT(
_comm, ierr);
78 std::string nm = *scope +
"_";
79 ierr = KSPSetOptionsPrefix(
_ksp, nm.c_str());
80 CHKERRABORT(
_comm, ierr);
83 ierr = KSPSetOperators(
_ksp, *
_A, *
_A);
84 CHKERRABORT(
_comm, ierr);
86 ierr = KSPSetFromOptions(
_ksp);
87 CHKERRABORT(
_comm, ierr);
90 ierr = KSPGetPC(
_ksp, &pc);
91 CHKERRABORT(
_comm, ierr);
93 ierr = PCSetFromOptions(pc);
94 CHKERRABORT(
_comm, ierr);
110 ierr = KSPSolve(
_ksp, b, x);
111 CHKERRABORT(
_comm, ierr);
133 #endif // __mast_petsc_linear_solver_h__
void solve(Vec x, Vec b)
Solves , where is the system matrix.
#define Assert0(cond, msg)
void init(Mat A, const std::string *scope=nullptr)
initialize the solver for operator matrix A.
LinearSolver(const MPI_Comm comm)