direct_lu.hpp memory src/lib/serif/backend/mfem/solver/preconditioner/inverse/direct_lu_accelerate.cpp src/lib/serif/backend/mfem/solver/preconditioner/inverse/direct_lu_none.cpp src/lib/serif/backend/mfem/solver/preconditioner/inverse/direct_lu_umfpack.cpp src/lib/serif/backend/mfem/solver/preconditioner/inverse/sparse_direct.cpp serif::solver::preconditioner::backend::mfem::detail::DirectLUPattern serif::solver::preconditioner::backend::mfem::detail::DirectLU serif serif::solver serif::solver::preconditioner serif::solver::preconditioner::backend serif::solver::preconditioner::backend::mfem serif::solver::preconditioner::backend::mfem::detail #pragmaonce #include<memory> namespaceserif::solver::preconditioner::backend::mfem::detail { classDirectLUPatternfinal { public: [[nodiscard]]staticstd::shared_ptr<constDirectLUPattern>analyze(intsize,constlong*column_starts,constint*row_indices,constdouble*values,int&status); ~DirectLUPattern(); DirectLUPattern(constDirectLUPattern&)=delete; DirectLUPattern&operator=(constDirectLUPattern&)=delete; [[nodiscard]]boolmatches(intsize,constlong*column_starts,constint*row_indices)const; structState; private: friendclassDirectLU; explicitDirectLUPattern(std::unique_ptr<State>state); std::unique_ptr<State>m_state; }; classDirectLUfinal { public: [[nodiscard]]staticstd::unique_ptr<DirectLU>factor(std::shared_ptr<constDirectLUPattern>pattern,constdouble*values,int&status); ~DirectLU(); DirectLU(constDirectLU&)=delete; DirectLU&operator=(constDirectLU&)=delete; voidsolve(constdouble*right,double*solution)const; voidsolve_many(intcount,constdouble*right,double*solution)const; private: structState; explicitDirectLU(std::unique_ptr<State>state); std::unique_ptr<State>m_state; }; [[nodiscard]]constchar*direct_lu_backend()noexcept; [[nodiscard]]booldirect_lu_available()noexcept; }//namespaceserif::solver::preconditioner::backend::mfem::detail