linearized_system_view.hpp type_traits serif/discretization/blocks/system_layout.hpp serif/utils/dependencies/dependency_context.hpp src/compile_time_checks/serif/solver/preconditioner/layout.cpp src/include/serif/backend/mfem/model/computations/physical_blocks.hpp src/include/serif/backend/mfem/solver/preconditioner/computations/ordering.hpp src/include/serif/model/validation.hpp src/include/serif/solver/preconditioner/keys.hpp serif::operators::PhysicalBlock serif::operators::LinearizedSystemView serif serif::operators #pragmaonce #include<type_traits> #include"serif/discretization/blocks/system_layout.hpp" #include"serif/utils/dependencies/dependency_context.hpp" namespaceserif::operators { template<typenameRowsT,typenameValuesT> structPhysicalBlockfinal { usingRows=RowsT; usingValues=ValuesT; }; template<discretization::blocks::SystemLayoutTypeLayout,utils::dependencies::IsDependencyContextBlocks> classLinearizedSystemViewfinal { public: usingLayoutType=std::remove_cvref_t<Layout>; usingBlockSources=std::remove_cvref_t<Blocks>; LinearizedSystemView(constLayoutType&layout,constBlockSources&blocks):m_layout(layout),m_blocks(blocks) { } LinearizedSystemView(constLayoutType&&,constBlockSources&)=delete; LinearizedSystemView(constLayoutType&,constBlockSources&&)=delete; template<typenameRows,typenameValues> requiresutils::dependencies::BindingsWithBinding<typename BlockSources::Bindings, PhysicalBlock<Rows, Values>> [[nodiscard]]constauto&block()const { returnm_blocks.templateget<PhysicalBlock<Rows,Values>>(); } [[nodiscard]]constLayoutType&layout()constnoexcept { returnm_layout; } [[nodiscard]]constBlockSources&blocks()constnoexcept { returnm_blocks; } private: constLayoutType&m_layout; constBlockSources&m_blocks; }; template<discretization::blocks::SystemLayoutTypeLayout,utils::dependencies::IsDependencyContextBlocks> LinearizedSystemView(constLayout&,constBlocks&)->LinearizedSystemView<Layout, Blocks>; }//namespaceserif::operators