#pragma once #include "storm/solver/LinearEquationSolver.h" #include "storm/solver/SolverSelectionOptions.h" #include "storm/utility/eigen.h" namespace storm { namespace solver { /*! * A class that uses the Eigen library to implement the LinearEquationSolver interface. */ template class EigenLinearEquationSolver : public LinearEquationSolver { public: EigenLinearEquationSolver(); EigenLinearEquationSolver(storm::storage::SparseMatrix const& A); EigenLinearEquationSolver(storm::storage::SparseMatrix&& A); virtual void setMatrix(storm::storage::SparseMatrix const& A) override; virtual void setMatrix(storm::storage::SparseMatrix&& A) override; virtual LinearEquationSolverProblemFormat getEquationProblemFormat(Environment const& env) const override; protected: virtual bool internalSolveEquations(Environment const& env, std::vector& x, std::vector const& b) const override; private: EigenLinearEquationSolverMethod getMethod(Environment const& env, bool isExactMode) const; virtual uint64_t getMatrixRowCount() const override; virtual uint64_t getMatrixColumnCount() const override; // The (eigen) matrix associated with this equation solver. std::unique_ptr> eigenA; }; template class EigenLinearEquationSolverFactory : public LinearEquationSolverFactory { public: using LinearEquationSolverFactory::create; virtual std::unique_ptr> create(Environment const& env) const override; virtual std::unique_ptr> clone() const override; }; } }