system.hpp memory optional span vector serif/backend/mfem/operators/actions.hpp src/include/serif/backend/mfem/model/computations/interior.hpp src/include/serif/backend/mfem/model/computations/physical_blocks.hpp src/include/serif/backend/mfem/model/normalized_system.hpp src/include/serif/backend/mfem/model/volume_actions.hpp src/lib/serif/backend/mfem/model/system_data.hpp serif::model::backend::mfem::CoordinateRange serif::model::backend::mfem::ResidualContribution serif::model::backend::mfem::JacobianContribution serif::model::backend::mfem::ColumnContribution serif::model::backend::mfem::RowReplacement serif::model::backend::mfem::PhysicalSystem serif serif::model serif::model::backend serif::model::backend::mfem serif::model::backend::mfem::detail #pragmaonce #include<memory> #include<optional> #include<span> #include<vector> #include"serif/backend/mfem/operators/actions.hpp" namespaceserif::model::backend::mfem{ usingoperators::backend::mfem::LinearizedBlock; structCoordinateRange{ intoffset; intsize; }; structResidualContribution{ introw_offset; std::vector<double>values; }; structJacobianContribution{ introw_offset; intcolumn_offset; LinearizedBlockblock; }; structColumnContribution{ intcolumn_offset; LinearizedBlockblock; }; structRowReplacement{ std::vector<int>selected_rows; std::vector<double>residual; std::vector<ColumnContribution>jacobian; }; namespacedetail{ structSystemData; } classPhysicalSystemfinal{ public: PhysicalSystem(intresidual_size,intstate_size,std::vector<ResidualContribution>residuals,std::vector<JacobianContribution>jacobian,std::vector<RowReplacement>replacements={},std::shared_ptr<constvoid>owner={},std::optional<std::vector<JacobianContribution>>complete_actions={}); [[nodiscard]]conststd::vector<double>&residual()constnoexcept; [[nodiscard]]constLinearizedBlock&jacobian()constnoexcept; [[nodiscard]]LinearizedBlockblock(introw_offset,introw_size,intcolumn_offset,intcolumn_size)const; [[nodiscard]]LinearizedBlockblock(std::span<constCoordinateRange>rows,std::span<constCoordinateRange>columns)const; private: std::shared_ptr<constdetail::SystemData>m_data; std::vector<double>m_residual; LinearizedBlockm_jacobian; }; [[nodiscard]]std::shared_ptr<constPhysicalSystem>make_physical_system(intresidual_size,intstate_size,std::vector<ResidualContribution>residuals,std::vector<JacobianContribution>jacobian,std::vector<RowReplacement>replacements={},std::shared_ptr<constvoid>owner={},std::optional<std::vector<JacobianContribution>>complete_actions={}); }//namespaceserif::model::backend::mfem