element_coordinates.hpp utility mfem/fem/geom.hpp mfem/fem/doftrans.hpp serif/backend/mfem/discretization/dof_map.hpp src/include/serif/backend/mfem/operators/volume_field_block.hpp src/lib/serif/backend/mfem/discretization/element_coordinates.cpp src/lib/serif/backend/mfem/discretization/mass_diagonal.cpp src/lib/serif/backend/mfem/discretization/reconstruction.cpp serif::discretization::backend::mfem::ElementCoordinates serif serif::discretization serif::discretization::backend serif::discretization::backend::mfem #pragmaonce #include<utility> #include"mfem/fem/geom.hpp" #include"mfem/fem/doftrans.hpp" #include"serif/backend/mfem/discretization/dof_map.hpp" namespaceserif::discretization::backend::mfem{ classElementCoordinatesfinal{ public: ElementCoordinates(constDofMap::Elements&elements,intelement); [[nodiscard]]intsize()constnoexcept{returnm_dofs.Size();} [[nodiscard]]intreduced_dof(intlocal)const; template<typenameVisitor> voidfor_each_coefficient(constintlocal,Visitor&&visit)const{ usingnamespaceutils::errors; serif_ensure<SERiFErrorCode::INVALID_DOF_COUNT,std::out_of_range>(local>=0&&local<size(), "Localelementcoefficient{}isoutsidetheelementofsize{}.",local,size()); if(m_supported){ m_binding.for_each_coefficient(::mfem::FiniteElementSpace::DecodeDof(m_dofs[local]),std::forward<Visitor>(visit)); } } [[nodiscard]]intlocal_dof(intreduced)const; voidunit_direction(intcolumn,::mfem::Vector&direction)const; voidelement_values(const::mfem::Vector&reduced,::mfem::Vector&values)const; voidorient_dual(::mfem::Vector&values)const; voidadd_element(::mfem::Vector&values,::mfem::Vector&full)const; private: voidorient_primal(::mfem::Vector&values)const; constDofMap&m_binding; boolm_supported; ::mfem::Array<int>m_dofs; ::mfem::DofTransformationm_transformation; }; }//namespaceserif::discretization::backend::mfem