SERiF v0.0.1a
Stellar Evolution and Rotation in Four Dimensions
Loading...
Searching...
No Matches
serif::solver::normalization::detail Namespace Reference

Classes

struct  MethodSupports
 
struct  MethodSupports< DimensionlessRieszCoordinate< QuantityT, MetricT, Geometry >, KeyT, Kind >
 
struct  MethodSupports< IdentityCoordinate, KeyT, Kind >
 
struct  MethodSupports< PhysicalRieszCoordinate< QuantityT, MetricT >, KeyT, Kind >
 
struct  MethodSupports< RuntimePreparedCoordinate< PrescriptionT >, KeyT, Kind >
 
struct  MethodSupports< WithPointRows< DimensionlessRieszCoordinate< QuantityT, MetricT, Geometry >, PointQuantityT, SelectionT >, KeyT, discretization::blocks::RepresentedValueKind::residual >
 
struct  MethodSupports< WithPointRows< PhysicalRieszCoordinate< QuantityT, MetricT >, PointQuantityT, SelectionT >, KeyT, discretization::blocks::RepresentedValueKind::residual >
 
struct  RuleKeys
 
struct  RuleKeys< utils::dependencies::Bindings< Rules... > >
 
struct  ValidRules
 
struct  ValidRules< utils::dependencies::Bindings< Rules... >, Kind >
 

Concepts

concept  ProvidesScale
 

Functions

template<typename RulesT, typename LayoutT, typename ScalesT, discretization::blocks::RepresentedValueKind Kind, typename... Coordinates>
consteval bool can_prepare_coordinates (utils::dependencies::KeyList< Coordinates... >)
 Test every coordinate factory without instantiating an unusable runtime graph.
 
template<typename RulesT, typename LayoutT, typename ScalesT, discretization::blocks::RepresentedValueKind Kind, typename... Coordinates>
auto coordinate_computations (utils::dependencies::KeyList< Coordinates... >)
 Expand the supplied layout, looking up methods without imposing plan declaration order.
 
template<typename... Values, typename... Residuals>
auto packing_computation (utils::dependencies::KeyList< Values... >, utils::dependencies::KeyList< Residuals... >)
 Freeze the independently ordered state and residual coordinates into one owning result.
 
template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, CoordinateLayoutType LayoutT>
std::expected< std::size_t, std::string > coordinate_size (const LayoutT &layout)
 Reject a layout that changes the arity of a declared global scalar.
 
template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, CoordinateLayoutType LayoutT>
std::expected< void, std::string > check_coordinate_size (const LayoutT &layout, std::size_t received)
 Check supplied metrics or custom factors before publishing a coordinate result.
 
template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT>
auto coordinate_computation (IdentityCoordinate)
 Identity preparation requires a layout but no scale or metric sources.
 
template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT>
requires ProvidesScale<ScalesT, QuantityT>
auto coordinate_computation (PhysicalRieszCoordinate< QuantityT, UnitMetric >)
 Algebraic coordinates use a scalar metric without allocating an intermediate vector of ones.
 
template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT>
requires (!std::same_as<MetricT, UnitMetric> && ProvidesScale<ScalesT, QuantityT>)
auto coordinate_computation (PhysicalRieszCoordinate< QuantityT, MetricT >)
 Both coordinate roles consume the same cached reference metric with different primal/dual formulas.
 
template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT, typename PointQuantityT, typename SelectionT>
requires (Kind == discretization::blocks::RepresentedValueKind::residual && !std::same_as<MetricT, UnitMetric> && ProvidesScale<ScalesT, QuantityT> && ProvidesScale<ScalesT, PointQuantityT>)
auto coordinate_computation (WithPointRows< PhysicalRieszCoordinate< QuantityT, MetricT >, PointQuantityT, SelectionT >)
 Read the replacement's quantity independently of the bulk equation's scale.
 
template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT>
requires ProvidesScale<ScalesT, QuantityT>
auto coordinate_computation (DimensionlessRieszCoordinate< QuantityT, UnitMetric, ReferenceGeometry::algebraic >)
 Global scalars have no geometric measure to remove.
 
template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT, ReferenceGeometry Geometry>
requires (!std::same_as<MetricT, UnitMetric> && ProvidesScale<ScalesT, QuantityT> && ProvidesScale<ScalesT, dimensions::Length>)
auto coordinate_computation (DimensionlessRieszCoordinate< QuantityT, MetricT, Geometry >)
 Cancel the reference measure while retaining the native finite-element coordinate representation.
 
template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT, ReferenceGeometry Geometry, typename PointQuantityT, typename SelectionT>
requires (Kind == discretization::blocks::RepresentedValueKind::residual && !std::same_as<MetricT, UnitMetric> && ProvidesScale<ScalesT, QuantityT> && ProvidesScale<ScalesT, PointQuantityT> && ProvidesScale<ScalesT, dimensions::Length>)
auto coordinate_computation (WithPointRows< DimensionlessRieszCoordinate< QuantityT, MetricT, Geometry >, PointQuantityT, SelectionT >)
 Remove geometric units only from weak rows, leaving each strong point equation in its own physical units.
 
template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename PrescriptionT>
requires requires(const std::remove_cvref_t<PrescriptionT>& prescription, std::size_t size) { { prescription.prepare_factors(keys::Factors<Kind, CoordinateT>{}, size) } -> std::same_as<std::expected<std::vector<double>, std::string>>; }
auto coordinate_computation (RuntimePreparedCoordinate< PrescriptionT >)
 Invoke only the exact declared prescription, supplied as a tracked source rather than a hidden mutable capture.
 
std::expected< DiagonalNormalization, std::string > pack_normalization (std::span< const std::span< const double > > states, std::span< const std::span< const double > > residuals)
 Freeze independently ordered state and residual blocks into their packed solver coordinates.
 
std::expected< void, std::string > validate_factors (std::span< const double > factors)
 Require finite positive factors before accepting custom or packed normalization.
 
std::expected< std::size_t, std::string > validate_coordinate_size (std::size_t size, bool global_scalar)
 Check representable coordinate storage and the fixed arity of global scalar terms.
 
std::expected< void, std::string > check_coordinate_size (std::size_t expected, std::size_t received)
 Compare metric or factor size with the independently declared coordinate layout.
 
void require_normalization_size (std::size_t received, std::size_t expected)
 Require matching coordinate sizes before any output is modified.
 
void apply_normalization (std::span< const double > factors, std::span< const double > input, std::span< double > output, bool inverse)
 Apply a diagonal in place or to disjoint storage, rejecting partial overlap.
 
std::expected< double, std::string > dimensionless_riesz_scale (discretization::blocks::RepresentedValueKind kind, ReferenceGeometry geometry, double physical_scale, double reference_radius)
 Include reference geometry in the scale consumed by the existing Riesz factor calculation.
 
template<typename CoordinateT>
consteval auto metric_term ()
 Resolve assembled row identity without confusing a point-border row with its sampled field.
 
template<typename CoordinateT>
consteval auto default_metric ()
 Select ordinary FE or algebraic metrics from the existing physical representation.
 
template<typename... Declared, typename... Required>
consteval bool exact_coordinates (utils::dependencies::KeyList< Declared... >, utils::dependencies::KeyList< Required... >)
 Compare memberships in both directions without deduplicating ownership declarations.
 
template<typename KeyT, typename QuantityT, discretization::blocks::RepresentedValueKind Kind>
consteval bool quantity_matches ()
 Check physics metadata when present; explicit low-level residual declarations remain their own authority.
 

Variables

template<typename Candidate>
constexpr bool valid_plan = false
 
template<typename ValuesT, typename ResidualsT>
constexpr bool valid_plan< NormalizationPlan< ValuesT, ResidualsT > > = ValidRules<ValuesT, discretization::blocks::RepresentedValueKind::value>::value && ValidRules<ResidualsT, discretization::blocks::RepresentedValueKind::residual>::value
 

Function Documentation

◆ apply_normalization()

void serif::solver::normalization::detail::apply_normalization ( std::span< const double > factors,
std::span< const double > input,
std::span< double > output,
bool inverse )

Apply a diagonal in place or to disjoint storage, rejecting partial overlap.

◆ can_prepare_coordinates()

template<typename RulesT, typename LayoutT, typename ScalesT, discretization::blocks::RepresentedValueKind Kind, typename... Coordinates>
bool serif::solver::normalization::detail::can_prepare_coordinates ( utils::dependencies::KeyList< Coordinates... > )
nodiscardconsteval

Test every coordinate factory without instantiating an unusable runtime graph.

◆ check_coordinate_size() [1/2]

template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, CoordinateLayoutType LayoutT>
std::expected< void, std::string > serif::solver::normalization::detail::check_coordinate_size ( const LayoutT & layout,
std::size_t received )
nodiscard

Check supplied metrics or custom factors before publishing a coordinate result.

◆ check_coordinate_size() [2/2]

std::expected< void, std::string > serif::solver::normalization::detail::check_coordinate_size ( std::size_t expected,
std::size_t received )
nodiscard

Compare metric or factor size with the independently declared coordinate layout.

◆ coordinate_computation() [1/8]

template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT, ReferenceGeometry Geometry>
requires (!std::same_as<MetricT, UnitMetric> && ProvidesScale<ScalesT, QuantityT> && ProvidesScale<ScalesT, dimensions::Length>)
auto serif::solver::normalization::detail::coordinate_computation ( DimensionlessRieszCoordinate< QuantityT, MetricT, Geometry > )
nodiscard

Cancel the reference measure while retaining the native finite-element coordinate representation.

◆ coordinate_computation() [2/8]

template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT>
requires ProvidesScale<ScalesT, QuantityT>
auto serif::solver::normalization::detail::coordinate_computation ( DimensionlessRieszCoordinate< QuantityT, UnitMetric, ReferenceGeometry::algebraic > )
nodiscard

Global scalars have no geometric measure to remove.

◆ coordinate_computation() [3/8]

template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT>
auto serif::solver::normalization::detail::coordinate_computation ( IdentityCoordinate )
nodiscard

Identity preparation requires a layout but no scale or metric sources.

◆ coordinate_computation() [4/8]

template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT>
requires (!std::same_as<MetricT, UnitMetric> && ProvidesScale<ScalesT, QuantityT>)
auto serif::solver::normalization::detail::coordinate_computation ( PhysicalRieszCoordinate< QuantityT, MetricT > )
nodiscard

Both coordinate roles consume the same cached reference metric with different primal/dual formulas.

◆ coordinate_computation() [5/8]

template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT>
requires ProvidesScale<ScalesT, QuantityT>
auto serif::solver::normalization::detail::coordinate_computation ( PhysicalRieszCoordinate< QuantityT, UnitMetric > )
nodiscard

Algebraic coordinates use a scalar metric without allocating an intermediate vector of ones.

◆ coordinate_computation() [6/8]

template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename PrescriptionT>
requires requires(const std::remove_cvref_t<PrescriptionT>& prescription, std::size_t size) { { prescription.prepare_factors(keys::Factors<Kind, CoordinateT>{}, size) } -> std::same_as<std::expected<std::vector<double>, std::string>>; }
auto serif::solver::normalization::detail::coordinate_computation ( RuntimePreparedCoordinate< PrescriptionT > )
nodiscard

Invoke only the exact declared prescription, supplied as a tracked source rather than a hidden mutable capture.

◆ coordinate_computation() [7/8]

template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT, ReferenceGeometry Geometry, typename PointQuantityT, typename SelectionT>
requires (Kind == discretization::blocks::RepresentedValueKind::residual && !std::same_as<MetricT, UnitMetric> && ProvidesScale<ScalesT, QuantityT> && ProvidesScale<ScalesT, PointQuantityT> && ProvidesScale<ScalesT, dimensions::Length>)
auto serif::solver::normalization::detail::coordinate_computation ( WithPointRows< DimensionlessRieszCoordinate< QuantityT, MetricT, Geometry >, PointQuantityT, SelectionT > )
nodiscard

Remove geometric units only from weak rows, leaving each strong point equation in its own physical units.

◆ coordinate_computation() [8/8]

template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, typename LayoutT, typename ScalesT, typename QuantityT, typename MetricT, typename PointQuantityT, typename SelectionT>
requires (Kind == discretization::blocks::RepresentedValueKind::residual && !std::same_as<MetricT, UnitMetric> && ProvidesScale<ScalesT, QuantityT> && ProvidesScale<ScalesT, PointQuantityT>)
auto serif::solver::normalization::detail::coordinate_computation ( WithPointRows< PhysicalRieszCoordinate< QuantityT, MetricT >, PointQuantityT, SelectionT > )
nodiscard

Read the replacement's quantity independently of the bulk equation's scale.

◆ coordinate_computations()

template<typename RulesT, typename LayoutT, typename ScalesT, discretization::blocks::RepresentedValueKind Kind, typename... Coordinates>
auto serif::solver::normalization::detail::coordinate_computations ( utils::dependencies::KeyList< Coordinates... > )
nodiscard

Expand the supplied layout, looking up methods without imposing plan declaration order.

◆ coordinate_size()

template<discretization::blocks::RepresentedValueKind Kind, typename CoordinateT, CoordinateLayoutType LayoutT>
std::expected< std::size_t, std::string > serif::solver::normalization::detail::coordinate_size ( const LayoutT & layout)
nodiscard

Reject a layout that changes the arity of a declared global scalar.

◆ default_metric()

template<typename CoordinateT>
auto serif::solver::normalization::detail::default_metric ( )
nodiscardconsteval

Select ordinary FE or algebraic metrics from the existing physical representation.

◆ dimensionless_riesz_scale()

std::expected< double, std::string > serif::solver::normalization::detail::dimensionless_riesz_scale ( discretization::blocks::RepresentedValueKind kind,
ReferenceGeometry geometry,
double physical_scale,
double reference_radius )
nodiscard

Include reference geometry in the scale consumed by the existing Riesz factor calculation.

Note
Volume residual quantities are densities before weak integration; surface residual quantities are integrated forces.

◆ exact_coordinates()

template<typename... Declared, typename... Required>
bool serif::solver::normalization::detail::exact_coordinates ( utils::dependencies::KeyList< Declared... > ,
utils::dependencies::KeyList< Required... >  )
nodiscardconsteval

Compare memberships in both directions without deduplicating ownership declarations.

◆ metric_term()

template<typename CoordinateT>
auto serif::solver::normalization::detail::metric_term ( )
nodiscardconsteval

Resolve assembled row identity without confusing a point-border row with its sampled field.

◆ pack_normalization()

std::expected< DiagonalNormalization, std::string > serif::solver::normalization::detail::pack_normalization ( std::span< const std::span< const double > > states,
std::span< const std::span< const double > > residuals )
nodiscard

Freeze independently ordered state and residual blocks into their packed solver coordinates.

◆ packing_computation()

template<typename... Values, typename... Residuals>
auto serif::solver::normalization::detail::packing_computation ( utils::dependencies::KeyList< Values... > ,
utils::dependencies::KeyList< Residuals... >  )
nodiscard

Freeze the independently ordered state and residual coordinates into one owning result.

◆ quantity_matches()

template<typename KeyT, typename QuantityT, discretization::blocks::RepresentedValueKind Kind>
bool serif::solver::normalization::detail::quantity_matches ( )
nodiscardconsteval

Check physics metadata when present; explicit low-level residual declarations remain their own authority.

◆ require_normalization_size()

void serif::solver::normalization::detail::require_normalization_size ( std::size_t received,
std::size_t expected )

Require matching coordinate sizes before any output is modified.

◆ validate_coordinate_size()

std::expected< std::size_t, std::string > serif::solver::normalization::detail::validate_coordinate_size ( std::size_t size,
bool global_scalar )
nodiscard

Check representable coordinate storage and the fixed arity of global scalar terms.

◆ validate_factors()

std::expected< void, std::string > serif::solver::normalization::detail::validate_factors ( std::span< const double > factors)
nodiscard

Require finite positive factors before accepting custom or packed normalization.

Variable Documentation

◆ valid_plan

template<typename Candidate>
bool serif::solver::normalization::detail::valid_plan = false
inlineconstexpr

◆ valid_plan< NormalizationPlan< ValuesT, ResidualsT > >

template<typename ValuesT, typename ResidualsT>
bool serif::solver::normalization::detail::valid_plan< NormalizationPlan< ValuesT, ResidualsT > > = ValidRules<ValuesT, discretization::blocks::RepresentedValueKind::value>::value && ValidRules<ResidualsT, discretization::blocks::RepresentedValueKind::residual>::value
inlineconstexpr