SERiF v0.0.1a
Stellar Evolution and Rotation in Four Dimensions
Loading...
Searching...
No Matches
factor_computations.hpp File Reference
#include <concepts>
#include <cstddef>
#include <expected>
#include <string>
#include <type_traits>
#include <vector>
#include "serif/solver/normalization/keys.hpp"
#include "serif/solver/normalization/layout.hpp"
#include "serif/solver/normalization/plan.hpp"
#include "serif/solver/normalization/diagonal.hpp"
#include "serif/solver/normalization/detail/validation.hpp"
#include "serif/solver/normalization/point_rows.hpp"
#include "serif/solver/normalization/scales.hpp"
#include "serif/utils/dependencies/computation.hpp"
Include dependency graph for factor_computations.hpp:
This graph shows which files directly or indirectly include this file:

Namespaces

namespace  serif
 
namespace  serif::solver
 
namespace  serif::solver::normalization
 
namespace  serif::solver::normalization::detail
 

Concepts

concept  serif::solver::normalization::detail::ProvidesScale
 

Functions

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)
 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 > serif::solver::normalization::detail::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 serif::solver::normalization::detail::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 serif::solver::normalization::detail::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 serif::solver::normalization::detail::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 serif::solver::normalization::detail::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 serif::solver::normalization::detail::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 serif::solver::normalization::detail::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 serif::solver::normalization::detail::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 serif::solver::normalization::detail::coordinate_computation (RuntimePreparedCoordinate< PrescriptionT >)
 Invoke only the exact declared prescription, supplied as a tracked source rather than a hidden mutable capture.