Files
MeanField_SERiF/docs/man/man3/serif_solver_normalization_detail.3
Emily Boudreaux 6b57738330 docs(docs): built docs
Note for now much of the docs is LLM written. This was done to save time and focus on code development. The docs have been LOOSLEY reviewed. However, the code itself has been either fully written by hand or fully reviewed. Therefore, the docs should at the moment be seen as a loose resource rather than authoratiative (and this is on top of the general ability for docs to drift)
2026-11-09 14:09:44 -05:00

305 lines
20 KiB
Groff

.TH "serif::solver::normalization::detail" 3 "Version v0.0.1a" "SERiF" \" -*- nroff -*-
.ad l
.nh
.SH NAME
serif::solver::normalization::detail
.SH SYNOPSIS
.br
.PP
.SS "Classes"
.in +1c
.ti -1c
.RI "struct \fBMethodSupports\fP"
.br
.ti -1c
.RI "struct \fBMethodSupports< DimensionlessRieszCoordinate< QuantityT, MetricT, Geometry >, KeyT, Kind >\fP"
.br
.ti -1c
.RI "struct \fBMethodSupports< IdentityCoordinate, KeyT, Kind >\fP"
.br
.ti -1c
.RI "struct \fBMethodSupports< PhysicalRieszCoordinate< QuantityT, MetricT >, KeyT, Kind >\fP"
.br
.ti -1c
.RI "struct \fBMethodSupports< RuntimePreparedCoordinate< PrescriptionT >, KeyT, Kind >\fP"
.br
.ti -1c
.RI "struct \fBMethodSupports< WithPointRows< DimensionlessRieszCoordinate< QuantityT, MetricT, Geometry >, PointQuantityT, SelectionT >, KeyT, discretization::blocks::RepresentedValueKind::residual >\fP"
.br
.ti -1c
.RI "struct \fBMethodSupports< WithPointRows< PhysicalRieszCoordinate< QuantityT, MetricT >, PointQuantityT, SelectionT >, KeyT, discretization::blocks::RepresentedValueKind::residual >\fP"
.br
.ti -1c
.RI "struct \fBRuleKeys\fP"
.br
.ti -1c
.RI "struct \fBRuleKeys< utils::dependencies::Bindings< Rules\&.\&.\&. > >\fP"
.br
.ti -1c
.RI "struct \fBValidRules\fP"
.br
.ti -1c
.RI "struct \fBValidRules< utils::dependencies::Bindings< Rules\&.\&.\&. >, Kind >\fP"
.br
.in -1c
.SS "Concepts"
.in +1c
.ti -1c
.RI "concept \fBProvidesScale\fP"
.br
.in -1c
.SS "Functions"
.in +1c
.ti -1c
.RI "template<typename RulesT, typename LayoutT, typename ScalesT, \fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename\&.\&.\&. Coordinates> consteval bool \fBcan_prepare_coordinates\fP (\fButils::dependencies::KeyList\fP< Coordinates\&.\&.\&. >)"
.br
.RI "Test every coordinate factory without instantiating an unusable runtime graph\&. "
.ti -1c
.RI "template<typename RulesT, typename LayoutT, typename ScalesT, \fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename\&.\&.\&. Coordinates> auto \fBcoordinate_computations\fP (\fButils::dependencies::KeyList\fP< Coordinates\&.\&.\&. >)"
.br
.RI "Expand the supplied layout, looking up methods without imposing plan declaration order\&. "
.ti -1c
.RI "template<typename\&.\&.\&. Values, typename\&.\&.\&. Residuals> auto \fBpacking_computation\fP (\fButils::dependencies::KeyList\fP< Values\&.\&.\&. >, \fButils::dependencies::KeyList\fP< Residuals\&.\&.\&. >)"
.br
.RI "Freeze the independently ordered state and residual coordinates into one owning result\&. "
.ti -1c
.RI "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, CoordinateLayoutType LayoutT> std::expected< std::size_t, std::string > \fBcoordinate_size\fP (const LayoutT &layout)"
.br
.RI "Reject a layout that changes the arity of a declared global scalar\&. "
.ti -1c
.RI "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, CoordinateLayoutType LayoutT> std::expected< void, std::string > \fBcheck_coordinate_size\fP (const LayoutT &layout, std::size_t received)"
.br
.RI "Check supplied metrics or custom factors before publishing a coordinate result\&. "
.ti -1c
.RI "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT> auto \fBcoordinate_computation\fP (\fBIdentityCoordinate\fP)"
.br
.RI "Identity preparation requires a layout but no scale or metric sources\&. "
.ti -1c
.RI "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT>
.br
requires ProvidesScale<ScalesT, QuantityT>auto \fBcoordinate_computation\fP (\fBPhysicalRieszCoordinate\fP< QuantityT, \fBUnitMetric\fP >)"
.br
.RI "Algebraic coordinates use a scalar metric without allocating an intermediate vector of ones\&. "
.ti -1c
.RI "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT>
.br
requires (!std::same_as<MetricT, \fBUnitMetric\fP> && ProvidesScale<ScalesT, QuantityT>)auto \fBcoordinate_computation\fP (\fBPhysicalRieszCoordinate\fP< QuantityT, MetricT >)"
.br
.RI "Both coordinate roles consume the same cached reference metric with different primal/dual formulas\&. "
.ti -1c
.RI "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT, typename PointQuantityT, typename SelectionT>
.br
requires (Kind == \fBdiscretization::blocks::RepresentedValueKind::residual\fP && !std::same_as<MetricT, \fBUnitMetric\fP> && ProvidesScale<ScalesT, QuantityT> && ProvidesScale<ScalesT, PointQuantityT>)auto \fBcoordinate_computation\fP (\fBWithPointRows\fP< \fBPhysicalRieszCoordinate\fP< QuantityT, MetricT >, PointQuantityT, SelectionT >)"
.br
.RI "Read the replacement's quantity independently of the bulk equation's scale\&. "
.ti -1c
.RI "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT>
.br
requires ProvidesScale<ScalesT, QuantityT>auto \fBcoordinate_computation\fP (\fBDimensionlessRieszCoordinate\fP< QuantityT, \fBUnitMetric\fP, \fBReferenceGeometry::algebraic\fP >)"
.br
.RI "Global scalars have no geometric measure to remove\&. "
.ti -1c
.RI "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT, \fBReferenceGeometry\fP Geometry>
.br
requires (!std::same_as<MetricT, \fBUnitMetric\fP> && ProvidesScale<ScalesT, QuantityT> && ProvidesScale<ScalesT, \fBdimensions::Length\fP>)auto \fBcoordinate_computation\fP (\fBDimensionlessRieszCoordinate\fP< QuantityT, MetricT, Geometry >)"
.br
.RI "Cancel the reference measure while retaining the native finite-element coordinate representation\&. "
.ti -1c
.RI "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT, \fBReferenceGeometry\fP Geometry, typename PointQuantityT, typename SelectionT>
.br
requires (Kind == \fBdiscretization::blocks::RepresentedValueKind::residual\fP && !std::same_as<MetricT, \fBUnitMetric\fP> && ProvidesScale<ScalesT, QuantityT> && ProvidesScale<ScalesT, PointQuantityT> && ProvidesScale<ScalesT, \fBdimensions::Length\fP>)auto \fBcoordinate_computation\fP (\fBWithPointRows\fP< \fBDimensionlessRieszCoordinate\fP< QuantityT, MetricT, Geometry >, PointQuantityT, SelectionT >)"
.br
.RI "Remove geometric units only from weak rows, leaving each strong point equation in its own physical units\&. "
.ti -1c
.RI "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename PrescriptionT>
.br
requires requires(const std::remove_cvref_t<PrescriptionT>& prescription, std::size_t size) { { prescription\&.prepare_factors(\fBkeys::Factors\fP<Kind, CoordinateT>{}, size) } \-> std::same_as<std::expected<std::vector<double>, std::string>>; }auto \fBcoordinate_computation\fP (\fBRuntimePreparedCoordinate\fP< PrescriptionT >)"
.br
.RI "Invoke only the exact declared prescription, supplied as a tracked source rather than a hidden mutable capture\&. "
.ti -1c
.RI "std::expected< \fBDiagonalNormalization\fP, std::string > \fBpack_normalization\fP (std::span< const std::span< const double > > states, std::span< const std::span< const double > > residuals)"
.br
.RI "Freeze independently ordered state and residual blocks into their packed solver coordinates\&. "
.ti -1c
.RI "std::expected< void, std::string > \fBvalidate_factors\fP (std::span< const double > factors)"
.br
.RI "Require finite positive factors before accepting custom or packed normalization\&. "
.ti -1c
.RI "std::expected< std::size_t, std::string > \fBvalidate_coordinate_size\fP (std::size_t size, bool global_scalar)"
.br
.RI "Check representable coordinate storage and the fixed arity of global scalar terms\&. "
.ti -1c
.RI "std::expected< void, std::string > \fBcheck_coordinate_size\fP (std::size_t expected, std::size_t received)"
.br
.RI "Compare metric or factor size with the independently declared coordinate layout\&. "
.ti -1c
.RI "void \fBrequire_normalization_size\fP (std::size_t received, std::size_t expected)"
.br
.RI "Require matching coordinate sizes before any output is modified\&. "
.ti -1c
.RI "void \fBapply_normalization\fP (std::span< const double > factors, std::span< const double > input, std::span< double > output, bool inverse)"
.br
.RI "Apply a diagonal in place or to disjoint storage, rejecting partial overlap\&. "
.ti -1c
.RI "std::expected< double, std::string > \fBdimensionless_riesz_scale\fP (\fBdiscretization::blocks::RepresentedValueKind\fP kind, \fBReferenceGeometry\fP geometry, double physical_scale, double reference_radius)"
.br
.RI "Include reference geometry in the scale consumed by the existing Riesz factor calculation\&. "
.ti -1c
.RI "template<typename CoordinateT> consteval auto \fBmetric_term\fP ()"
.br
.RI "Resolve assembled row identity without confusing a point-border row with its sampled field\&. "
.ti -1c
.RI "template<typename CoordinateT> consteval auto \fBdefault_metric\fP ()"
.br
.RI "Select ordinary FE or algebraic metrics from the existing physical representation\&. "
.ti -1c
.RI "template<typename\&.\&.\&. Declared, typename\&.\&.\&. Required> consteval bool \fBexact_coordinates\fP (\fButils::dependencies::KeyList\fP< Declared\&.\&.\&. >, \fButils::dependencies::KeyList\fP< Required\&.\&.\&. >)"
.br
.RI "Compare memberships in both directions without deduplicating ownership declarations\&. "
.ti -1c
.RI "template<typename KeyT, typename QuantityT, \fBdiscretization::blocks::RepresentedValueKind\fP Kind> consteval bool \fBquantity_matches\fP ()"
.br
.RI "Check physics metadata when present; explicit low-level residual declarations remain their own authority\&. "
.in -1c
.SS "Variables"
.in +1c
.ti -1c
.RI "template<typename Candidate> constexpr bool \fBvalid_plan\fP = false"
.br
.ti -1c
.RI "template<typename ValuesT, typename ResidualsT> constexpr bool \fBvalid_plan< NormalizationPlan< ValuesT, ResidualsT > >\fP = \fBValidRules\fP<ValuesT, \fBdiscretization::blocks::RepresentedValueKind::value\fP>::value && \fBValidRules\fP<ResidualsT, \fBdiscretization::blocks::RepresentedValueKind::residual\fP>::value"
.br
.in -1c
.SH "Function Documentation"
.PP
.SS "void serif::solver::normalization::detail::apply_normalization (std::span< const double > factors, std::span< const double > input, std::span< double > output, bool inverse)"
.PP
Apply a diagonal in place or to disjoint storage, rejecting partial overlap\&.
.SS "template<typename RulesT, typename LayoutT, typename ScalesT, \fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename\&.\&.\&. Coordinates> bool serif::solver::normalization::detail::can_prepare_coordinates (\fButils::dependencies::KeyList\fP< Coordinates\&.\&.\&. > )\fR [nodiscard]\fP, \fR [consteval]\fP"
.PP
Test every coordinate factory without instantiating an unusable runtime graph\&.
.SS "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, CoordinateLayoutType LayoutT> std::expected< void, std::string > serif::solver::normalization::detail::check_coordinate_size (const LayoutT & layout, std::size_t received)\fR [nodiscard]\fP"
.PP
Check supplied metrics or custom factors before publishing a coordinate result\&.
.SS "std::expected< void, std::string > serif::solver::normalization::detail::check_coordinate_size (std::size_t expected, std::size_t received)\fR [nodiscard]\fP"
.PP
Compare metric or factor size with the independently declared coordinate layout\&.
.SS "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT, \fBReferenceGeometry\fP Geometry>
.br
requires (!std::same_as<MetricT, \fBUnitMetric\fP> && ProvidesScale<ScalesT, QuantityT> && ProvidesScale<ScalesT, \fBdimensions::Length\fP>)auto serif::solver::normalization::detail::coordinate_computation (\fBDimensionlessRieszCoordinate\fP< QuantityT, MetricT, Geometry > )\fR [nodiscard]\fP"
.PP
Cancel the reference measure while retaining the native finite-element coordinate representation\&.
.SS "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT>
.br
requires ProvidesScale<ScalesT, QuantityT>auto serif::solver::normalization::detail::coordinate_computation (\fBDimensionlessRieszCoordinate\fP< QuantityT, \fBUnitMetric\fP, \fBReferenceGeometry::algebraic\fP > )\fR [nodiscard]\fP"
.PP
Global scalars have no geometric measure to remove\&.
.SS "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT> auto serif::solver::normalization::detail::coordinate_computation (\fBIdentityCoordinate\fP )\fR [nodiscard]\fP"
.PP
Identity preparation requires a layout but no scale or metric sources\&.
.SS "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT>
.br
requires (!std::same_as<MetricT, \fBUnitMetric\fP> && ProvidesScale<ScalesT, QuantityT>)auto serif::solver::normalization::detail::coordinate_computation (\fBPhysicalRieszCoordinate\fP< QuantityT, MetricT > )\fR [nodiscard]\fP"
.PP
Both coordinate roles consume the same cached reference metric with different primal/dual formulas\&.
.SS "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT>
.br
requires ProvidesScale<ScalesT, QuantityT>auto serif::solver::normalization::detail::coordinate_computation (\fBPhysicalRieszCoordinate\fP< QuantityT, \fBUnitMetric\fP > )\fR [nodiscard]\fP"
.PP
Algebraic coordinates use a scalar metric without allocating an intermediate vector of ones\&.
.SS "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename PrescriptionT>
.br
requires requires(const std::remove_cvref_t<PrescriptionT>& prescription, std::size_t size) { { prescription\&.prepare_factors(\fBkeys::Factors\fP<Kind, CoordinateT>{}, size) } \-> std::same_as<std::expected<std::vector<double>, std::string>>; }auto serif::solver::normalization::detail::coordinate_computation (\fBRuntimePreparedCoordinate\fP< PrescriptionT > )\fR [nodiscard]\fP"
.PP
Invoke only the exact declared prescription, supplied as a tracked source rather than a hidden mutable capture\&.
.SS "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT, \fBReferenceGeometry\fP Geometry, typename PointQuantityT, typename SelectionT>
.br
requires (Kind == \fBdiscretization::blocks::RepresentedValueKind::residual\fP && !std::same_as<MetricT, \fBUnitMetric\fP> && ProvidesScale<ScalesT, QuantityT> && ProvidesScale<ScalesT, PointQuantityT> && ProvidesScale<ScalesT, \fBdimensions::Length\fP>)auto serif::solver::normalization::detail::coordinate_computation (\fBWithPointRows\fP< \fBDimensionlessRieszCoordinate\fP< QuantityT, MetricT, Geometry >, PointQuantityT, SelectionT > )\fR [nodiscard]\fP"
.PP
Remove geometric units only from weak rows, leaving each strong point equation in its own physical units\&.
.SS "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT, typename PointQuantityT, typename SelectionT>
.br
requires (Kind == \fBdiscretization::blocks::RepresentedValueKind::residual\fP && !std::same_as<MetricT, \fBUnitMetric\fP> && ProvidesScale<ScalesT, QuantityT> && ProvidesScale<ScalesT, PointQuantityT>)auto serif::solver::normalization::detail::coordinate_computation (\fBWithPointRows\fP< \fBPhysicalRieszCoordinate\fP< QuantityT, MetricT >, PointQuantityT, SelectionT > )\fR [nodiscard]\fP"
.PP
Read the replacement's quantity independently of the bulk equation's scale\&.
.SS "template<typename RulesT, typename LayoutT, typename ScalesT, \fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename\&.\&.\&. Coordinates> auto serif::solver::normalization::detail::coordinate_computations (\fButils::dependencies::KeyList\fP< Coordinates\&.\&.\&. > )\fR [nodiscard]\fP"
.PP
Expand the supplied layout, looking up methods without imposing plan declaration order\&.
.SS "template<\fBdiscretization::blocks::RepresentedValueKind\fP Kind, typename CoordinateT, CoordinateLayoutType LayoutT> std::expected< std::size_t, std::string > serif::solver::normalization::detail::coordinate_size (const LayoutT & layout)\fR [nodiscard]\fP"
.PP
Reject a layout that changes the arity of a declared global scalar\&.
.SS "template<typename CoordinateT> auto serif::solver::normalization::detail::default_metric ()\fR [nodiscard]\fP, \fR [consteval]\fP"
.PP
Select ordinary FE or algebraic metrics from the existing physical representation\&.
.SS "std::expected< double, std::string > serif::solver::normalization::detail::dimensionless_riesz_scale (\fBdiscretization::blocks::RepresentedValueKind\fP kind, \fBReferenceGeometry\fP geometry, double physical_scale, double reference_radius)\fR [nodiscard]\fP"
.PP
Include reference geometry in the scale consumed by the existing Riesz factor calculation\&.
.PP
\fBNote\fP
.RS 4
Volume residual quantities are densities before weak integration; surface residual quantities are integrated forces\&.
.RE
.PP
.SS "template<typename\&.\&.\&. Declared, typename\&.\&.\&. Required> bool serif::solver::normalization::detail::exact_coordinates (\fButils::dependencies::KeyList\fP< Declared\&.\&.\&. > , \fButils::dependencies::KeyList\fP< Required\&.\&.\&. > )\fR [nodiscard]\fP, \fR [consteval]\fP"
.PP
Compare memberships in both directions without deduplicating ownership declarations\&.
.SS "template<typename CoordinateT> auto serif::solver::normalization::detail::metric_term ()\fR [nodiscard]\fP, \fR [consteval]\fP"
.PP
Resolve assembled row identity without confusing a point-border row with its sampled field\&.
.SS "std::expected< \fBDiagonalNormalization\fP, std::string > serif::solver::normalization::detail::pack_normalization (std::span< const std::span< const double > > states, std::span< const std::span< const double > > residuals)\fR [nodiscard]\fP"
.PP
Freeze independently ordered state and residual blocks into their packed solver coordinates\&.
.SS "template<typename\&.\&.\&. Values, typename\&.\&.\&. Residuals> auto serif::solver::normalization::detail::packing_computation (\fButils::dependencies::KeyList\fP< Values\&.\&.\&. > , \fButils::dependencies::KeyList\fP< Residuals\&.\&.\&. > )\fR [nodiscard]\fP"
.PP
Freeze the independently ordered state and residual coordinates into one owning result\&.
.SS "template<typename KeyT, typename QuantityT, \fBdiscretization::blocks::RepresentedValueKind\fP Kind> bool serif::solver::normalization::detail::quantity_matches ()\fR [nodiscard]\fP, \fR [consteval]\fP"
.PP
Check physics metadata when present; explicit low-level residual declarations remain their own authority\&.
.SS "void serif::solver::normalization::detail::require_normalization_size (std::size_t received, std::size_t expected)"
.PP
Require matching coordinate sizes before any output is modified\&.
.SS "std::expected< std::size_t, std::string > serif::solver::normalization::detail::validate_coordinate_size (std::size_t size, bool global_scalar)\fR [nodiscard]\fP"
.PP
Check representable coordinate storage and the fixed arity of global scalar terms\&.
.SS "std::expected< void, std::string > serif::solver::normalization::detail::validate_factors (std::span< const double > factors)\fR [nodiscard]\fP"
.PP
Require finite positive factors before accepting custom or packed normalization\&.
.SH "Variable Documentation"
.PP
.SS "template<typename Candidate> bool serif::solver::normalization::detail::valid_plan = false\fR [inline]\fP, \fR [constexpr]\fP"
.SS "template<typename ValuesT, typename ResidualsT> bool \fBserif::solver::normalization::detail::valid_plan\fP< \fBNormalizationPlan\fP< ValuesT, ResidualsT > > = \fBValidRules\fP<ValuesT, \fBdiscretization::blocks::RepresentedValueKind::value\fP>::value && \fBValidRules\fP<ResidualsT, \fBdiscretization::blocks::RepresentedValueKind::residual\fP>::value\fR [inline]\fP, \fR [constexpr]\fP"
.SH "Author"
.PP
Generated automatically by Doxygen for SERiF from the source code\&.