block.hpp utility serif/solver/preconditioner/keys.hpp src/compile_time_checks/serif/model/normalization.cpp src/include/serif/backend/mfem/solver/preconditioner/computations/inverse.hpp src/include/serif/solver/preconditioner/default_preconditioners.hpp serif::solver::preconditioner::BlockPreconditioner serif serif::solver serif::solver::preconditioner #pragmaonce #include<utility> #include"serif/solver/preconditioner/keys.hpp" namespaceserif::solver::preconditioner { template<typenameRow,typenameField,typenameStrategy> structBlockPreconditionerfinal { usingRows=utils::dependencies::KeyList<Row>; usingValues=utils::dependencies::KeyList<Field>; usingResult=keys::Inverse<Rows, Values>; Strategyinverse; }; template<typenameField,typenameRow=Field,typenameStrategy> [[nodiscard]]automake_preconditioner(Strategyinverse) { returnBlockPreconditioner<Row, Field, Strategy>{.inverse=std::move(inverse)}; } }//namespaceserif::solver::preconditioner