factorization.hpp expected utility serif/solver/preconditioner/backend/mfem/inverse.hpp serif/solver/preconditioner/strategies/gravity/factorization.hpp src/compile_time_checks/serif/solver/preconditioner/inverses.cpp src/include/serif/solver/preconditioner/computations/gravity.hpp src/lib/serif/solver/preconditioner/backend/mfem/gravity/factorization.cpp serif serif::solver serif::solver::preconditioner serif::solver::preconditioner::backend serif::solver::preconditioner::backend::mfem serif::solver::preconditioner::backend::mfem::detail #pragmaonce #include<expected> #include<utility> #include"serif/solver/preconditioner/backend/mfem/inverse.hpp" #include"serif/solver/preconditioner/strategies/gravity/factorization.hpp" namespaceserif::solver::preconditioner::backend::mfem { namespacedetail { [[nodiscard]]std::expected<Inverse,Failure>prepare_gravity(Inversemass,Inversepositive_schur,OperatorHandledivergence,strategies::gravity::Factorizationmethod,intcorrection_sweeps,doublerelaxation); }//namespacedetail template<strategies::gravity::PolicyPolicy> [[nodiscard]]std::expected<Inverse,Failure>try_gravity_inverse(Inversemass,Inversepositive_schur,OperatorHandledivergence,constPolicy&policy) { ifconstexpr(std::same_as<Policy,strategies::gravity::ConsistentSchurLDU>) { returndetail::prepare_gravity(std::move(mass),std::move(positive_schur),std::move(divergence),Policy::method,policy.correction_sweeps,policy.relaxation); } else { returndetail::prepare_gravity(std::move(mass),std::move(positive_schur),std::move(divergence),Policy::method,0,1.0); } } }//namespaceserif::solver::preconditioner::backend::mfem