diagonal.hpp cstddef expected span string vector serif/discretization/blocks/base.hpp src/include/serif/solver/normalization/backend/mfem/operators.hpp src/include/serif/solver/normalization/detail/factor_computations.hpp src/include/serif/solver/normalization/detail/packing.hpp src/include/serif/solver/normalization/normalization.hpp src/lib/serif/solver/normalization/diagonal.cpp src/lib/serif/solver/normalization/riesz_factors.cpp serif::solver::normalization::DiagonalNormalization serif serif::solver serif::solver::normalization serif::solver::normalization::detail #pragmaonce #include<cstddef> #include<expected> #include<span> #include<string> #include<vector> #include"serif/discretization/blocks/base.hpp" namespaceserif::solver::normalization { namespacedetail { voidrequire_normalization_size(std::size_treceived,std::size_texpected); voidapply_normalization(std::span<constdouble>factors,std::span<constdouble>input,std::span<double>output,boolinverse); } [[nodiscard]]std::expected<double,std::string>make_riesz_factor(discretization::blocks::RepresentedValueKindkind,doublemetric,doublephysical_scale); [[nodiscard]]std::expected<std::vector<double>,std::string>make_riesz_factors(discretization::blocks::RepresentedValueKindkind,std::span<constdouble>metric,doublephysical_scale); classDiagonalNormalizationfinal { public: [[nodiscard]]std::span<constdouble>state_factors()constnoexcept { returnm_state_factors; } [[nodiscard]]std::span<constdouble>residual_factors()constnoexcept { returnm_residual_factors; } [[nodiscard]]std::size_tstate_size()constnoexcept { returnm_state_factors.size(); } [[nodiscard]]std::size_tresidual_size()constnoexcept { returnm_residual_factors.size(); } voidnormalize_state(std::span<constdouble>physical,std::span<double>normalized)const; voiddenormalize_state(std::span<constdouble>normalized,std::span<double>physical)const; voidnormalize_residual(std::span<constdouble>physical,std::span<double>normalized)const; voiddenormalize_residual(std::span<constdouble>normalized,std::span<double>physical)const; [[nodiscard]]doublestate_norm_squared(std::span<constdouble>physical)const; [[nodiscard]]doubleresidual_norm_squared(std::span<constdouble>physical)const; private: friendstd::expected<DiagonalNormalization,std::string>make_diagonal_normalization(std::vector<double>,std::vector<double>); DiagonalNormalization(std::vector<double>state,std::vector<double>residual); std::vector<double>m_state_factors; std::vector<double>m_residual_factors; }; [[nodiscard]]std::expected<DiagonalNormalization,std::string>make_diagonal_normalization(std::vector<double>state,std::vector<double>residual); }