diff --git a/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp b/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp
index f308a482925b8e06151026be529e855ec0c4d448..d47e661337c9ce22fc60f735177d8e6382b4d401 100644
--- a/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp
+++ b/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp
@@ -16,6 +16,8 @@
 #endif
 
 #ifdef USE_EIGEN_UNSUPPORTED
+#include <iostream> // to fix compiling errors in Eigen
+#include <unsupported/Eigen/IterativeSolvers>
 #include <unsupported/Eigen/src/IterativeSolvers/Scaling.h>
 #endif
 
@@ -152,6 +154,11 @@ std::unique_ptr<EigenLinearSolverBase> createIterativeSolver(
         case EigenOption::SolverType::CG: {
             return createIterativeSolver<EigenCGSolver>(precon_type);
         }
+#ifdef USE_EIGEN_UNSUPPORTED
+        case EigenOption::SolverType::GMRES: {
+            return createIterativeSolver<Eigen::GMRES>(precon_type);
+        }
+#endif
         default:
             OGS_FATAL("Invalid Eigen iterative linear solver type. Aborting.");
     }
@@ -179,6 +186,9 @@ EigenLinearSolver::EigenLinearSolver(
         }
         case EigenOption::SolverType::BiCGSTAB:
         case EigenOption::SolverType::CG:
+#ifdef USE_EIGEN_UNSUPPORTED
+        case EigenOption::SolverType::GMRES:
+#endif
             _solver = details::createIterativeSolver(_option.solver_type,
                                                      _option.precon_type);
             return;
diff --git a/MathLib/LinAlg/Eigen/EigenOption.cpp b/MathLib/LinAlg/Eigen/EigenOption.cpp
index 4fa228a245ac09319de712084eae0887b2bb73e6..5cd640d8724c6dad504aae879fff11c28c379b29 100644
--- a/MathLib/LinAlg/Eigen/EigenOption.cpp
+++ b/MathLib/LinAlg/Eigen/EigenOption.cpp
@@ -34,6 +34,8 @@ EigenOption::SolverType EigenOption::getSolverType(const std::string &solver_nam
         return SolverType::SparseLU;
     if (solver_name == "PardisoLU")
         return SolverType::PardisoLU;
+    if (solver_name == "GMRES")
+        return SolverType::GMRES;
 
     OGS_FATAL("Unknown Eigen solver type `%s'", solver_name.c_str());
 }
diff --git a/MathLib/LinAlg/Eigen/EigenOption.h b/MathLib/LinAlg/Eigen/EigenOption.h
index 46ccf4d4d092147e5fecd0490b1db4a9e7faab50..84af7c8f607b996b2aa7065749a2efdd49e32994 100644
--- a/MathLib/LinAlg/Eigen/EigenOption.h
+++ b/MathLib/LinAlg/Eigen/EigenOption.h
@@ -24,7 +24,8 @@ struct EigenOption final
         CG,
         BiCGSTAB,
         SparseLU,
-        PardisoLU
+        PardisoLU,
+        GMRES
     };
 
     /// Preconditioner type