diff --git a/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp b/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp
index dbff374834473d6d5e8f3a2e926b7d9363f30b5c..bc22dc04cd8201d728eb2bbdc19379b3992f6f79 100644
--- a/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp
+++ b/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp
@@ -11,6 +11,10 @@
 
 #include <logog/include/logog.hpp>
 
+#ifdef USE_MKL
+#include <Eigen/PardisoSupport>
+#endif
+
 #include "BaseLib/ConfigTree.h"
 #include "EigenVector.h"
 #include "EigenMatrix.h"
@@ -174,6 +178,13 @@ EigenLinearSolver::EigenLinearSolver(
             _solver = details::createIterativeSolver(_option.solver_type,
                                                      _option.precon_type);
             return;
+#ifdef USE_MKL
+        case EigenOption::SolverType::PardisoLU: {
+            using SolverType = Eigen::PardisoLU<EigenMatrix::RawMatrixType>;
+            _solver.reset(new details::EigenDirectLinearSolver<SolverType>);
+            return;
+        }
+#endif
     }
 
     OGS_FATAL("Invalid Eigen linear solver type. Aborting.");
diff --git a/MathLib/LinAlg/Eigen/EigenOption.cpp b/MathLib/LinAlg/Eigen/EigenOption.cpp
index 3c273491484a7404ccbfde4e5be205f7b3db49c1..a6200c8e97afe03142149fb1bb2602f9c8f8bb60 100644
--- a/MathLib/LinAlg/Eigen/EigenOption.cpp
+++ b/MathLib/LinAlg/Eigen/EigenOption.cpp
@@ -29,6 +29,10 @@ EigenOption::SolverType EigenOption::getSolverType(const std::string &solver_nam
         return SolverType::BiCGSTAB;
     if (solver_name == "SparseLU")
         return SolverType::SparseLU;
+#ifdef USE_MKL
+    if (solver_name == "PardisoLU")
+        return SolverType::PardisoLU;
+#endif
 
     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 5b64fc41a7b42da5fb1ab976a975c32222cba4b1..d90997fa1b6c5e6add718a74f52888ebdeabf733 100644
--- a/MathLib/LinAlg/Eigen/EigenOption.h
+++ b/MathLib/LinAlg/Eigen/EigenOption.h
@@ -24,6 +24,9 @@ struct EigenOption final
         CG,
         BiCGSTAB,
         SparseLU
+#ifdef USE_MKL
+        , PardisoLU
+#endif
     };
 
     /// Preconditioner type