metric_computations.hpp tuple serif/backend/mfem/discretization/mass_diagonal.hpp serif/solver/normalization/keys.hpp serif/solver/normalization/metrics.hpp serif/utils/dependencies/computation.hpp serif/utils/dependencies/resource.hpp src/include/serif/backend/mfem/model/normalization/computations.hpp serif serif::solver serif::solver::normalization serif::solver::normalization::backend serif::solver::normalization::backend::mfem #pragmaonce #include<tuple> #include"serif/backend/mfem/discretization/mass_diagonal.hpp" #include"serif/solver/normalization/keys.hpp" #include"serif/solver/normalization/metrics.hpp" #include"serif/utils/dependencies/computation.hpp" #include"serif/utils/dependencies/resource.hpp" namespaceserif::solver::normalization::backend::mfem { template<typenameBindingT> requiresdiscretization::blocks::SpatialTerm<typename BindingT::Term> [[nodiscard]]autoreference_metric_binding(BindingT&binding) { usingnamespaceutils::dependencies; binding.validate(); binding.mesh().EnsureNodes(); returnborrow<keys::ReferenceBinding<typenameBindingT::Term>>(binding,track_by([](constBindingT&reference) { reference.validate(); const::mfem::Mesh&mesh=reference.mesh(); returnstd::tuple{&reference.space(),mesh.GetSequence(),mesh.GetNodesSequence(),reference.space().GetSequence()}; })); } template<discretization::blocks::SpatialTermTermT,discretization::domain::schema::IsSchemaSchemaT> [[nodiscard]]automake_reference_volume_metric_computation() { usingnamespaceutils::dependencies; returnmake_computation<ReferenceVolumeMetric<TermT>,InputList<keys::ReferenceBinding<TermT>>>( discretization::backend::mfem::reference_mass_diagonal<TermT, SchemaT>); } }