coefficient_tracking.hpp algorithm mfem/linalg/vector.hpp src/include/serif/backend/mfem/geometry/surface/boundary_inputs.hpp src/include/serif/backend/mfem/operators/volume_inputs.hpp serif::discretization::backend::mfem::CoefficientTracking serif serif::discretization serif::discretization::backend serif::discretization::backend::mfem Snapshot and comparison policy for MFEM coefficient views. #pragmaonce #include<algorithm> #include"mfem/linalg/vector.hpp" namespaceserif::discretization::backend::mfem{ structCoefficientTracking{ template<typenameViewT> [[nodiscard]]static::mfem::Vectorcapture(constViewT&view); template<typenameViewT> [[nodiscard]]boolmatches( const::mfem::Vector&captured, constViewT&view )const; template<typenameViewT> [[nodiscard]]staticconstvoid*identity(constViewT&view); }; }//namespaceserif::discretization::backend::mfem template<typenameViewT> ::mfem::Vectorserif::discretization::backend::mfem::CoefficientTracking::capture(constViewT&view){ return::mfem::Vector(view.values); } template<typenameViewT> boolserif::discretization::backend::mfem::CoefficientTracking::matches( const::mfem::Vector&captured, constViewT&view )const{ returncaptured.Size()==view.values.Size()&& (captured.Size()==0|| std::equal( captured.GetData(), captured.GetData()+captured.Size(), view.values.GetData() )); } template<typenameViewT> [[nodiscard]]constvoid*serif::discretization::backend::mfem::CoefficientTracking::identity(constViewT&view){ return&view.binding; }