From 78eb238857d65b0eace4de03f81407e37ce26bc3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Mon, 19 Oct 2020 14:11:00 +0200
Subject: [PATCH] Plug PETSc's AMG preconditioner

---
 src/algebra/LinearSolver.cpp        | 5 +++++
 src/algebra/LinearSolverOptions.hpp | 4 ++++
 2 files changed, 9 insertions(+)

diff --git a/src/algebra/LinearSolver.cpp b/src/algebra/LinearSolver.cpp
index a275cd581..6a6beaa05 100644
--- a/src/algebra/LinearSolver.cpp
+++ b/src/algebra/LinearSolver.cpp
@@ -88,6 +88,7 @@ struct LinearSolver::Internals
   {
     switch (precond) {
     case LSPrecond::none:
+    case LSPrecond::amg:
     case LSPrecond::diagonal:
     case LSPrecond::incomplete_choleski:
     case LSPrecond::incomplete_LU: {
@@ -244,6 +245,10 @@ struct LinearSolver::Internals
 
     if (not direct_solver) {
       switch (options.precond()) {
+      case LSPrecond::amg: {
+        PCSetType(pc, PCGAMG);
+        break;
+      }
       case LSPrecond::diagonal: {
         PCSetType(pc, PCJACOBI);
         break;
diff --git a/src/algebra/LinearSolverOptions.hpp b/src/algebra/LinearSolverOptions.hpp
index bd7538b53..014ee86d6 100644
--- a/src/algebra/LinearSolverOptions.hpp
+++ b/src/algebra/LinearSolverOptions.hpp
@@ -37,6 +37,7 @@ enum class LSPrecond : int8_t
   diagonal,
   incomplete_choleski,
   incomplete_LU,
+  amg,
   //
   LS__end
 };
@@ -101,6 +102,9 @@ name(const LSPrecond precond)
   case LSPrecond::incomplete_LU: {
     return "ILU";
   }
+  case LSPrecond::amg: {
+    return "AMG";
+  }
   case LSPrecond::LS__end: {
   }
   }
-- 
GitLab