factorization.hpp concepts src/include/serif/solver/preconditioner/backend/mfem/gravity/factorization.hpp src/include/serif/solver/preconditioner/recipes/gravity.hpp serif::solver::preconditioner::strategies::gravity::BlockDiagonal serif::solver::preconditioner::strategies::gravity::LowerTriangular serif::solver::preconditioner::strategies::gravity::UpperTriangular serif::solver::preconditioner::strategies::gravity::ApproximateLDU serif::solver::preconditioner::strategies::gravity::ConsistentSchurLDU serif serif::solver serif::solver::preconditioner serif::solver::preconditioner::strategies serif::solver::preconditioner::strategies::gravity #pragmaonce #include<concepts> namespaceserif::solver::preconditioner::strategies::gravity { enumclassFactorization { block_diagonal, lower_triangular, upper_triangular, approximate_ldu, consistent_schur_ldu }; structBlockDiagonalfinal { staticconstexprFactorizationmethod{Factorization::block_diagonal}; }; structLowerTriangularfinal { staticconstexprFactorizationmethod{Factorization::lower_triangular}; }; structUpperTriangularfinal { staticconstexprFactorizationmethod{Factorization::upper_triangular}; }; structApproximateLDUfinal { staticconstexprFactorizationmethod{Factorization::approximate_ldu}; }; structConsistentSchurLDUfinal { staticconstexprFactorizationmethod{Factorization::consistent_schur_ldu}; intcorrection_sweeps{1}; doublerelaxation{1.0}; }; template<typenameCandidate> conceptPolicy=std::same_as<Candidate,BlockDiagonal>||std::same_as<Candidate,LowerTriangular>||std::same_as<Candidate,UpperTriangular>|| std::same_as<Candidate,ApproximateLDU>||std::same_as<Candidate,ConsistentSchurLDU>; }//namespaceserif::solver::preconditioner::strategies::gravity