\doxysection{src/include/serif/solver/normalization/detail/factor\+\_\+computations.hpp File Reference} \hypertarget{factor__computations_8hpp}{}\label{factor__computations_8hpp}\index{src/include/serif/solver/normalization/detail/factor\_computations.hpp@{src/include/serif/solver/normalization/detail/factor\_computations.hpp}} {\ttfamily \#include $<$concepts$>$}\newline {\ttfamily \#include $<$cstddef$>$}\newline {\ttfamily \#include $<$expected$>$}\newline {\ttfamily \#include $<$string$>$}\newline {\ttfamily \#include $<$type\+\_\+traits$>$}\newline {\ttfamily \#include $<$vector$>$}\newline {\ttfamily \#include "{}serif/solver/normalization/keys.\+hpp"{}}\newline {\ttfamily \#include "{}serif/solver/normalization/layout.\+hpp"{}}\newline {\ttfamily \#include "{}serif/solver/normalization/plan.\+hpp"{}}\newline {\ttfamily \#include "{}serif/solver/normalization/diagonal.\+hpp"{}}\newline {\ttfamily \#include "{}serif/solver/normalization/detail/validation.\+hpp"{}}\newline {\ttfamily \#include "{}serif/solver/normalization/point\+\_\+rows.\+hpp"{}}\newline {\ttfamily \#include "{}serif/solver/normalization/scales.\+hpp"{}}\newline {\ttfamily \#include "{}serif/utils/dependencies/computation.\+hpp"{}}\newline Include dependency graph for factor\+\_\+computations.\+hpp\+: \nopagebreak \begin{figure}[H] \begin{center} \leavevmode \includegraphics[width=350pt]{factor__computations_8hpp__incl} \end{center} \end{figure} This graph shows which files directly or indirectly include this file\+: \nopagebreak \begin{figure}[H] \begin{center} \leavevmode \includegraphics[width=350pt]{factor__computations_8hpp__dep__incl} \end{center} \end{figure} \doxysubsubsection*{Namespaces} \begin{DoxyCompactItemize} \item namespace \mbox{\hyperlink{namespaceserif}{serif}} \item namespace \mbox{\hyperlink{namespaceserif_1_1solver}{serif\+::solver}} \item namespace \mbox{\hyperlink{namespaceserif_1_1solver_1_1normalization}{serif\+::solver\+::normalization}} \item namespace \mbox{\hyperlink{namespaceserif_1_1solver_1_1normalization_1_1detail}{serif\+::solver\+::normalization\+::detail}} \end{DoxyCompactItemize} \doxysubsubsection*{Concepts} \begin{DoxyCompactItemize} \item concept \mbox{\hyperlink{conceptserif_1_1solver_1_1normalization_1_1detail_1_1_provides_scale}{serif\+::solver\+::normalization\+::detail\+::\+Provides\+Scale}} \end{DoxyCompactItemize} \doxysubsubsection*{Functions} \begin{DoxyCompactItemize} \item {\footnotesize template$<$\mbox{\hyperlink{namespaceserif_1_1discretization_1_1blocks_aca74ff25d2168fcdec080e03ebc023ea}{discretization\+::blocks\+::\+Represented\+Value\+Kind}} Kind, typename CoordinateT, Coordinate\+Layout\+Type LayoutT$>$ }\\std\+::expected$<$ std\+::size\+\_\+t, std\+::string $>$ \mbox{\hyperlink{namespaceserif_1_1solver_1_1normalization_1_1detail_ac1ad5aefe378f92816041e194bad5db6}{serif\+::solver\+::normalization\+::detail\+::coordinate\+\_\+size}} (const LayoutT \&layout) \begin{DoxyCompactList}\small\item\em Reject a layout that changes the arity of a declared global scalar. \end{DoxyCompactList}\item {\footnotesize template$<$\mbox{\hyperlink{namespaceserif_1_1discretization_1_1blocks_aca74ff25d2168fcdec080e03ebc023ea}{discretization\+::blocks\+::\+Represented\+Value\+Kind}} Kind, typename CoordinateT, Coordinate\+Layout\+Type LayoutT$>$ }\\std\+::expected$<$ void, std\+::string $>$ \mbox{\hyperlink{namespaceserif_1_1solver_1_1normalization_1_1detail_a75c5cfc216544112bdac460720ca968e}{serif\+::solver\+::normalization\+::detail\+::check\+\_\+coordinate\+\_\+size}} (const LayoutT \&layout, std\+::size\+\_\+t received) \begin{DoxyCompactList}\small\item\em Check supplied metrics or custom factors before publishing a coordinate result. \end{DoxyCompactList}\item {\footnotesize template$<$\mbox{\hyperlink{namespaceserif_1_1discretization_1_1blocks_aca74ff25d2168fcdec080e03ebc023ea}{discretization\+::blocks\+::\+Represented\+Value\+Kind}} Kind, typename CoordinateT, typename LayoutT, typename ScalesT$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1solver_1_1normalization_1_1detail_aa1a3e6ee3169b51c03d882bfa7250d38}{serif\+::solver\+::normalization\+::detail\+::coordinate\+\_\+computation}} (\mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_identity_coordinate}{Identity\+Coordinate}}) \begin{DoxyCompactList}\small\item\em Identity preparation requires a layout but no scale or metric sources. \end{DoxyCompactList}\item {\footnotesize template$<$\mbox{\hyperlink{namespaceserif_1_1discretization_1_1blocks_aca74ff25d2168fcdec080e03ebc023ea}{discretization\+::blocks\+::\+Represented\+Value\+Kind}} Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT$>$ \newline requires Provides\+Scale$<$ScalesT, QuantityT$>$}\\auto \mbox{\hyperlink{namespaceserif_1_1solver_1_1normalization_1_1detail_afcdd1d7eb65d13997c370f5cdaad4bbd}{serif\+::solver\+::normalization\+::detail\+::coordinate\+\_\+computation}} (\mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_physical_riesz_coordinate}{Physical\+Riesz\+Coordinate}}$<$ QuantityT, \mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_unit_metric}{Unit\+Metric}} $>$) \begin{DoxyCompactList}\small\item\em Algebraic coordinates use a scalar metric without allocating an intermediate vector of ones. \end{DoxyCompactList}\item {\footnotesize template$<$\mbox{\hyperlink{namespaceserif_1_1discretization_1_1blocks_aca74ff25d2168fcdec080e03ebc023ea}{discretization\+::blocks\+::\+Represented\+Value\+Kind}} Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT$>$ \newline requires (!std\+::same\+\_\+as$<$MetricT, \mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_unit_metric}{Unit\+Metric}}$>$ \&\& Provides\+Scale$<$ScalesT, QuantityT$>$)}\\auto \mbox{\hyperlink{namespaceserif_1_1solver_1_1normalization_1_1detail_a8ee25cdcd8a6a00f5499cf304ce26029}{serif\+::solver\+::normalization\+::detail\+::coordinate\+\_\+computation}} (\mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_physical_riesz_coordinate}{Physical\+Riesz\+Coordinate}}$<$ QuantityT, MetricT $>$) \begin{DoxyCompactList}\small\item\em Both coordinate roles consume the same cached reference metric with different primal/dual formulas. \end{DoxyCompactList}\item {\footnotesize template$<$\mbox{\hyperlink{namespaceserif_1_1discretization_1_1blocks_aca74ff25d2168fcdec080e03ebc023ea}{discretization\+::blocks\+::\+Represented\+Value\+Kind}} Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT, typename Point\+QuantityT, typename SelectionT$>$ \newline requires (Kind == \mbox{\hyperlink{namespaceserif_1_1discretization_1_1blocks_aca74ff25d2168fcdec080e03ebc023eaa4db598f63d4aea6a3c8eaddfe5c2b1e9}{discretization\+::blocks\+::\+Represented\+Value\+Kind\+::residual}} \&\& !std\+::same\+\_\+as$<$MetricT, \mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_unit_metric}{Unit\+Metric}}$>$ \&\& Provides\+Scale$<$ScalesT, QuantityT$>$ \&\& Provides\+Scale$<$ScalesT, Point\+QuantityT$>$)}\\auto \mbox{\hyperlink{namespaceserif_1_1solver_1_1normalization_1_1detail_a13f5a9f97b97943cd2c743ef9b409707}{serif\+::solver\+::normalization\+::detail\+::coordinate\+\_\+computation}} (\mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_with_point_rows}{With\+Point\+Rows}}$<$ \mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_physical_riesz_coordinate}{Physical\+Riesz\+Coordinate}}$<$ QuantityT, MetricT $>$, Point\+QuantityT, SelectionT $>$) \begin{DoxyCompactList}\small\item\em Read the replacement\textquotesingle{}s quantity independently of the bulk equation\textquotesingle{}s scale. \end{DoxyCompactList}\item {\footnotesize template$<$\mbox{\hyperlink{namespaceserif_1_1discretization_1_1blocks_aca74ff25d2168fcdec080e03ebc023ea}{discretization\+::blocks\+::\+Represented\+Value\+Kind}} Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT$>$ \newline requires Provides\+Scale$<$ScalesT, QuantityT$>$}\\auto \mbox{\hyperlink{namespaceserif_1_1solver_1_1normalization_1_1detail_a5ac3575f3e597436e79d1d80891c0c87}{serif\+::solver\+::normalization\+::detail\+::coordinate\+\_\+computation}} (\mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_dimensionless_riesz_coordinate}{Dimensionless\+Riesz\+Coordinate}}$<$ QuantityT, \mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_unit_metric}{Unit\+Metric}}, \mbox{\hyperlink{namespaceserif_1_1solver_1_1normalization_ac75238439fd5d1610b177bf85e9376d9ac7f6ad568392380a8f4b4cecbaccb64c}{Reference\+Geometry\+::algebraic}} $>$) \begin{DoxyCompactList}\small\item\em Global scalars have no geometric measure to remove. \end{DoxyCompactList}\item {\footnotesize template$<$\mbox{\hyperlink{namespaceserif_1_1discretization_1_1blocks_aca74ff25d2168fcdec080e03ebc023ea}{discretization\+::blocks\+::\+Represented\+Value\+Kind}} Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT, \mbox{\hyperlink{namespaceserif_1_1solver_1_1normalization_ac75238439fd5d1610b177bf85e9376d9}{Reference\+Geometry}} Geometry$>$ \newline requires (!std\+::same\+\_\+as$<$MetricT, \mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_unit_metric}{Unit\+Metric}}$>$ \&\& Provides\+Scale$<$ScalesT, QuantityT$>$ \&\& Provides\+Scale$<$ScalesT, \mbox{\hyperlink{structserif_1_1dimensions_1_1_length}{dimensions\+::\+Length}}$>$)}\\auto \mbox{\hyperlink{namespaceserif_1_1solver_1_1normalization_1_1detail_a3fc0f05f92bc58dad7722af44b921358}{serif\+::solver\+::normalization\+::detail\+::coordinate\+\_\+computation}} (\mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_dimensionless_riesz_coordinate}{Dimensionless\+Riesz\+Coordinate}}$<$ QuantityT, MetricT, Geometry $>$) \begin{DoxyCompactList}\small\item\em Cancel the reference measure while retaining the native finite-\/element coordinate representation. \end{DoxyCompactList}\item {\footnotesize template$<$\mbox{\hyperlink{namespaceserif_1_1discretization_1_1blocks_aca74ff25d2168fcdec080e03ebc023ea}{discretization\+::blocks\+::\+Represented\+Value\+Kind}} Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT, \mbox{\hyperlink{namespaceserif_1_1solver_1_1normalization_ac75238439fd5d1610b177bf85e9376d9}{Reference\+Geometry}} Geometry, typename Point\+QuantityT, typename SelectionT$>$ \newline requires (Kind == \mbox{\hyperlink{namespaceserif_1_1discretization_1_1blocks_aca74ff25d2168fcdec080e03ebc023eaa4db598f63d4aea6a3c8eaddfe5c2b1e9}{discretization\+::blocks\+::\+Represented\+Value\+Kind\+::residual}} \&\& !std\+::same\+\_\+as$<$MetricT, \mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_unit_metric}{Unit\+Metric}}$>$ \&\& Provides\+Scale$<$ScalesT, QuantityT$>$ \&\& Provides\+Scale$<$ScalesT, Point\+QuantityT$>$ \&\& Provides\+Scale$<$ScalesT, \mbox{\hyperlink{structserif_1_1dimensions_1_1_length}{dimensions\+::\+Length}}$>$)}\\auto \mbox{\hyperlink{namespaceserif_1_1solver_1_1normalization_1_1detail_aee3ee51cacba999bfbc8f87eb57fe2f0}{serif\+::solver\+::normalization\+::detail\+::coordinate\+\_\+computation}} (\mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_with_point_rows}{With\+Point\+Rows}}$<$ \mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_dimensionless_riesz_coordinate}{Dimensionless\+Riesz\+Coordinate}}$<$ QuantityT, MetricT, Geometry $>$, Point\+QuantityT, SelectionT $>$) \begin{DoxyCompactList}\small\item\em Remove geometric units only from weak rows, leaving each strong point equation in its own physical units. \end{DoxyCompactList}\item {\footnotesize template$<$\mbox{\hyperlink{namespaceserif_1_1discretization_1_1blocks_aca74ff25d2168fcdec080e03ebc023ea}{discretization\+::blocks\+::\+Represented\+Value\+Kind}} Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename PrescriptionT$>$ \newline requires requires(const std\+::remove\+\_\+cvref\+\_\+t$<$PrescriptionT$>$\& prescription, std\+::size\+\_\+t size) \{ \{ prescription.\+prepare\+\_\+factors(\mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1keys_1_1_factors}{keys\+::\+Factors}}$<$Kind, CoordinateT$>$\{\}, size) \} -\/$>$ std\+::same\+\_\+as$<$std\+::expected$<$std\+::vector$<$double$>$, std\+::string$>$$>$; \}}\\auto \mbox{\hyperlink{namespaceserif_1_1solver_1_1normalization_1_1detail_acfd136d53b8a7250cefedd9232eea672}{serif\+::solver\+::normalization\+::detail\+::coordinate\+\_\+computation}} (\mbox{\hyperlink{structserif_1_1solver_1_1normalization_1_1_runtime_prepared_coordinate}{Runtime\+Prepared\+Coordinate}}$<$ PrescriptionT $>$) \begin{DoxyCompactList}\small\item\em Invoke only the exact declared prescription, supplied as a tracked source rather than a hidden mutable capture. \end{DoxyCompactList}\end{DoxyCompactItemize}