SERiF v0.0.1a
Stellar Evolution and Rotation in Four Dimensions
Loading...
Searching...
No Matches
serif::geometry::deformation::SurfaceEmbedding Class Reference

Own a linear conversion from radial displacement lengths to Cartesian surface displacements. More...

#include <surface_embedding.hpp>

Collaboration diagram for serif::geometry::deformation::SurfaceEmbedding:
[legend]

Public Types

using Workspace = EmptyDeformationWorkspace
 
using InputSpace = spaces::ShapeParameters
 
using OutputSpace = spaces::SurfaceDisplacement
 

Public Member Functions

std::size_t input_size () const noexcept
 Nodal coordinates are independent lengths; harmonic coordinates retain their physical normalization.
 
std::size_t output_size () const noexcept
 Surface vectors interleave the three Cartesian components at each node.
 
std::size_t surface_node_count () const noexcept
 Expose the ordered surface-node count for independent metric and backend calculations.
 
bool has_nodal_parameters () const noexcept
 An empty harmonic basis represents the identity between parameters and nodal radial lengths.
 
std::span< const std::array< double, 3 > > radial_directions () const noexcept
 Reference directions determine radial motion and remain immutable when coefficients change.
 
std::span< const double > reference_radii () const noexcept
 Reference radii retain physical lengths independently of the logical radius used by volume extensions.
 
std::span< const std::array< double, 3 > > reference_positions () const noexcept
 Preserve the exact ordered reference points so boundary metrics can reject an unrelated trace.
 
std::span< const SphericalHarmonicMode > modes () const noexcept
 Harmonic coordinates use increasing degree, then increasing signed azimuthal order.
 
std::span< const double > nodal_basis () const noexcept
 Return the physical row-major harmonic basis; nodal parameterizations have an implicit identity basis.
 
DeformationStatus apply (std::span< const double > parameters, std::span< double > surface_displacement, Workspace={}) const
 Apply radial motion without allocation. Input and output storage must not overlap; rejected output must be discarded.
 
DeformationStatus apply_transpose (std::span< const double > surface_force, std::span< double > parameter_force, Workspace={}) const
 Transfer Cartesian surface forces to shape coordinates while preserving virtual work, without allocation or metric weighting.
 

Static Public Attributes

static constexpr bool is_linear = true
 

Private Member Functions

 SurfaceEmbedding ()=default
 Factories validate all reference geometry before publishing an embedding.
 

Private Attributes

std::vector< std::array< double, 3 > > radial_directions_
 
std::vector< double > reference_radii_
 
std::vector< std::array< double, 3 > > reference_positions_
 
std::vector< SphericalHarmonicMode > modes_
 
std::vector< double > nodal_basis_
 

Friends

std::expected< SurfaceEmbedding, DeformationFailure > build_surface_embedding (const NodalRadialSurface &model, std::span< const std::array< double, 3 > > positions)
 Compile fixed radial directions from ordered physical reference positions without retaining backend objects.
 
std::expected< SurfaceEmbedding, DeformationFailure > build_surface_embedding (const SphericalHarmonicSurface &model, std::span< const std::array< double, 3 > > positions)
 Sample physically normalized real harmonics and reject unresolved modes without renormalizing or dropping coordinates.
 

Detailed Description

Own a linear conversion from radial displacement lengths to Cartesian surface displacements.

Note
Directions and harmonics remain fixed on the reference surface. Finite-element interpolation of the resulting nodal vectors determines the between-node geometry.

Member Typedef Documentation

◆ InputSpace

◆ OutputSpace

◆ Workspace

Constructor & Destructor Documentation

◆ SurfaceEmbedding()

serif::geometry::deformation::SurfaceEmbedding::SurfaceEmbedding ( )
privatedefault

Factories validate all reference geometry before publishing an embedding.

Member Function Documentation

◆ apply()

DeformationStatus serif::geometry::deformation::SurfaceEmbedding::apply ( std::span< const double > parameters,
std::span< double > surface_displacement,
Workspace = {} ) const
nodiscard

Apply radial motion without allocation. Input and output storage must not overlap; rejected output must be discarded.

◆ apply_transpose()

DeformationStatus serif::geometry::deformation::SurfaceEmbedding::apply_transpose ( std::span< const double > surface_force,
std::span< double > parameter_force,
Workspace = {} ) const
nodiscard

Transfer Cartesian surface forces to shape coordinates while preserving virtual work, without allocation or metric weighting.

◆ has_nodal_parameters()

bool serif::geometry::deformation::SurfaceEmbedding::has_nodal_parameters ( ) const
nodiscardnoexcept

An empty harmonic basis represents the identity between parameters and nodal radial lengths.

◆ input_size()

std::size_t serif::geometry::deformation::SurfaceEmbedding::input_size ( ) const
nodiscardnoexcept

Nodal coordinates are independent lengths; harmonic coordinates retain their physical normalization.

◆ modes()

std::span< const SphericalHarmonicMode > serif::geometry::deformation::SurfaceEmbedding::modes ( ) const
nodiscardnoexcept

Harmonic coordinates use increasing degree, then increasing signed azimuthal order.

◆ nodal_basis()

std::span< const double > serif::geometry::deformation::SurfaceEmbedding::nodal_basis ( ) const
nodiscardnoexcept

Return the physical row-major harmonic basis; nodal parameterizations have an implicit identity basis.

◆ output_size()

std::size_t serif::geometry::deformation::SurfaceEmbedding::output_size ( ) const
nodiscardnoexcept

Surface vectors interleave the three Cartesian components at each node.

◆ radial_directions()

std::span< const std::array< double, 3 > > serif::geometry::deformation::SurfaceEmbedding::radial_directions ( ) const
nodiscardnoexcept

Reference directions determine radial motion and remain immutable when coefficients change.

◆ reference_positions()

std::span< const std::array< double, 3 > > serif::geometry::deformation::SurfaceEmbedding::reference_positions ( ) const
nodiscardnoexcept

Preserve the exact ordered reference points so boundary metrics can reject an unrelated trace.

◆ reference_radii()

std::span< const double > serif::geometry::deformation::SurfaceEmbedding::reference_radii ( ) const
nodiscardnoexcept

Reference radii retain physical lengths independently of the logical radius used by volume extensions.

◆ surface_node_count()

std::size_t serif::geometry::deformation::SurfaceEmbedding::surface_node_count ( ) const
nodiscardnoexcept

Expose the ordered surface-node count for independent metric and backend calculations.

Friends And Related Symbol Documentation

◆ build_surface_embedding [1/2]

std::expected< SurfaceEmbedding, DeformationFailure > build_surface_embedding ( const NodalRadialSurface & model,
std::span< const std::array< double, 3 > > positions )
friend

Compile fixed radial directions from ordered physical reference positions without retaining backend objects.

◆ build_surface_embedding [2/2]

std::expected< SurfaceEmbedding, DeformationFailure > build_surface_embedding ( const SphericalHarmonicSurface & model,
std::span< const std::array< double, 3 > > positions )
friend

Sample physically normalized real harmonics and reject unresolved modes without renormalizing or dropping coordinates.

Member Data Documentation

◆ is_linear

bool serif::geometry::deformation::SurfaceEmbedding::is_linear = true
staticconstexpr

◆ modes_

std::vector<SphericalHarmonicMode> serif::geometry::deformation::SurfaceEmbedding::modes_
private

◆ nodal_basis_

std::vector<double> serif::geometry::deformation::SurfaceEmbedding::nodal_basis_
private

◆ radial_directions_

std::vector<std::array<double, 3> > serif::geometry::deformation::SurfaceEmbedding::radial_directions_
private

◆ reference_positions_

std::vector<std::array<double, 3> > serif::geometry::deformation::SurfaceEmbedding::reference_positions_
private

◆ reference_radii_

std::vector<double> serif::geometry::deformation::SurfaceEmbedding::reference_radii_
private

The documentation for this class was generated from the following files: