#pragma once

#include <span>

#include <fesa/solvers/linear/linear_solver.hpp>

namespace fesa {

class PardisoLinearSolver final : public LinearSolver {
public:
    PardisoLinearSolver();
    ~PardisoLinearSolver() override;
    PardisoLinearSolver(const PardisoLinearSolver&) = delete;
    PardisoLinearSolver& operator=(
        const PardisoLinearSolver&) = delete;

    [[nodiscard]] LinearSolveResult solve(
        const SymmetricCsr& matrix,
        std::span<const double> rhs) override;
};

}  // namespace fesa
