Files
MeanField_SERiF/docs/latex/namespaceserif_1_1geometry_1_1deformation.tex
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

453 lines
57 KiB
TeX

\doxysection{serif\+::geometry\+::deformation Namespace Reference}
\hypertarget{namespaceserif_1_1geometry_1_1deformation}{}\label{namespaceserif_1_1geometry_1_1deformation}\index{serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection*{Namespaces}
\begin{DoxyCompactItemize}
\item
namespace \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_1_1backend}{backend}}
\item
namespace \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_1_1detail}{detail}}
\item
namespace \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_1_1keys}{keys}}
\item
namespace \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_1_1spaces}{spaces}}
\end{DoxyCompactItemize}
\doxysubsubsection*{Classes}
\begin{DoxyCompactItemize}
\item
class \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_composed_deformation}{Composed\+Deformation}}
\begin{DoxyCompactList}\small\item\em Compose shape-\/to-\/surface and surface-\/to-\/volume maps with the complete derivative chain rule. \end{DoxyCompactList}\item
struct \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}}
\begin{DoxyCompactList}\small\item\em Describe a rejected geometry calculation; the dependency cache publishes results only after success. \end{DoxyCompactList}\item
struct \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_linearization}{Deformation\+Linearization}}
\begin{DoxyCompactList}\small\item\em Freeze the shape coordinates associated with a derivative, independently of mutable caller inputs. \end{DoxyCompactList}\item
struct \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_domain_deformation}{Domain\+Deformation}}
\begin{DoxyCompactList}\small\item\em State how the stellar surface moves and how that motion extends into the two surrounding regions. \end{DoxyCompactList}\item
struct \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_empty_deformation_workspace}{Empty\+Deformation\+Workspace}}
\begin{DoxyCompactList}\small\item\em Stateless maps require no numerical scratch, while retaining the same explicit action interface. \end{DoxyCompactList}\item
struct \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_fixed_infinity_radial_extension}{Fixed\+Infinity\+Radial\+Extension}}
\begin{DoxyCompactList}\small\item\em Reduce surface motion linearly to zero at reference infinity in logical reference radius. \end{DoxyCompactList}\item
struct \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_geometry_step_limit}{Geometry\+Step\+Limit}}
\begin{DoxyCompactList}\small\item\em Geometry-\/only bound at the supplied sample points, with a location for the first obstruction. \end{DoxyCompactList}\item
struct \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_geometry_step_options}{Geometry\+Step\+Options}}
\begin{DoxyCompactList}\small\item\em Numerical controls for keeping a straight volume-\/displacement step above a Jacobian determinant floor. \end{DoxyCompactList}\item
struct \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_nodal_radial_surface}{Nodal\+Radial\+Surface}}
\begin{DoxyCompactList}\small\item\em Give each surface node an independent radial displacement, measured in physical length. \end{DoxyCompactList}\item
struct \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_power_law_radial_extension}{Power\+Law\+Radial\+Extension}}
\begin{DoxyCompactList}\small\item\em Extend surface motion toward a fixed stellar center using a power of logical reference radius. \end{DoxyCompactList}\item
class \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_radial_extension}{Radial\+Extension}}
\begin{DoxyCompactList}\small\item\em Extend one interleaved surface vector into the MFEM component-\/block volume layout. Stellar ownership wins at shared nodes. Both actions use the same scalar interpolation, so their pairing is Euclidean virtual work without an additional surface-\/area weight. \end{DoxyCompactList}\item
class \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_radial_interpolation}{Radial\+Interpolation}}
\begin{DoxyCompactList}\small\item\em A checked, immutable interpolation table; changing a radial law never revalidates its topology. \end{DoxyCompactList}\item
struct \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_radial_interpolation_data}{Radial\+Interpolation\+Data}}
\begin{DoxyCompactList}\small\item\em Own the surface interpolation shared by the stellar and vacuum extensions. \end{DoxyCompactList}\item
struct \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_reference_surface}{Reference\+Surface}}
\begin{DoxyCompactList}\small\item\em Own fixed surface positions and their canonical ascending scalar-\/node indices. \end{DoxyCompactList}\item
struct \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_spherical_harmonic_mode}{Spherical\+Harmonic\+Mode}}
\begin{DoxyCompactList}\small\item\em Identify a real harmonic, with negative orders using sine and positive orders using cosine. \end{DoxyCompactList}\item
struct \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_spherical_harmonic_surface}{Spherical\+Harmonic\+Surface}}
\begin{DoxyCompactList}\small\item\em Represent radial displacement lengths with normalized real spherical harmonics on the reference surface. \end{DoxyCompactList}\item
class \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_surface_embedding}{Surface\+Embedding}}
\begin{DoxyCompactList}\small\item\em Own a linear conversion from radial displacement lengths to Cartesian surface displacements. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection*{Concepts}
\begin{DoxyCompactItemize}
\item
concept \mbox{\hyperlink{conceptserif_1_1geometry_1_1deformation_1_1_deformation_dimensions}{Deformation\+Dimensions}}
\begin{DoxyCompactList}\small\item\em Matching lengths never replace the physical meanings of the input and output spaces. \end{DoxyCompactList}\item
concept \mbox{\hyperlink{conceptserif_1_1geometry_1_1deformation_1_1_linear_deformation_map}{Linear\+Deformation\+Map}}
\begin{DoxyCompactList}\small\item\em Fixed maps provide just forward and transpose actions with caller-\/owned scratch. \end{DoxyCompactList}\item
concept \mbox{\hyperlink{conceptserif_1_1geometry_1_1deformation_1_1_differentiable_deformation_map}{Differentiable\+Deformation\+Map}}
\begin{DoxyCompactList}\small\item\em Nonlinear maps explicitly provide every term needed by a Newton force pullback. \end{DoxyCompactList}\item
concept \mbox{\hyperlink{conceptserif_1_1geometry_1_1deformation_1_1_deformation_map}{Deformation\+Map}}
\end{DoxyCompactItemize}
\doxysubsubsection*{Typedefs}
\begin{DoxyCompactItemize}
\item
using \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} = std\+::expected$<$void, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}}$>$
\item
{\footnotesize template$<$typename Map$>$ }\\using \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}} = typename Map\+::\+Workspace
\end{DoxyCompactItemize}
\doxysubsubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item
enum class \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871}{Deformation\+Failure\+Reason}} \{ \newline
\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871a9cc57114b319994e90322314a00521d4}{invalid\+\_\+configuration}}
, \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871ad73416fa06a45d748a7c8d4349054cbb}{incompatible\+\_\+discretization}}
, \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871a0181b84c792eb178181854d09c8fe7b9}{invalid\+\_\+size}}
, \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871a4013d0a2d04acba5257678a15922a094}{non\+\_\+finite}}
, \newline
\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871a9a8a2ae86e6fce17b9be87ec37249370}{unresolved\+\_\+surface}}
, \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871a146816aaee11d5a21b09baac60c9812e}{invalid\+\_\+geometry}}
\}
\end{DoxyCompactItemize}
\doxysubsubsection*{Functions}
\begin{DoxyCompactItemize}
\item
{\footnotesize template$<$Deformation\+Map Map$>$ }\\\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_aa3ab7cc89a2262523938808363fda865}{make\+\_\+deformation\+\_\+workspace}} (const Map \&map)
\begin{DoxyCompactList}\small\item\em Allocate action scratch explicitly, once per independent caller. \end{DoxyCompactList}\item
{\footnotesize template$<$Deformation\+Map Map$>$ }\\\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ad539328115ca03a435d339f2c551a21b}{build\+\_\+displacement}} (const Map \&map, std\+::span$<$ const double $>$ parameters, std\+::span$<$ double $>$ displacement, \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ \&workspace)
\begin{DoxyCompactList}\small\item\em Evaluate physical displacement with caller-\/owned output and scratch. All action outputs must be disjoint from their inputs. Workspace storage is reserved for the map and must not supply public input or output spans. \end{DoxyCompactList}\item
{\footnotesize template$<$Deformation\+Map Map$>$ }\\\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a47622764fd6178445526c8b3d984a6b2}{apply\+\_\+jacobian}} (const Map \&map, std\+::span$<$ const double $>$ parameters, std\+::span$<$ const double $>$ direction, std\+::span$<$ double $>$ displacement\+\_\+direction, \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ \&workspace)
\begin{DoxyCompactList}\small\item\em Linear maps reuse their primal action; nonlinear maps supply their exact tangent. \end{DoxyCompactList}\item
{\footnotesize template$<$Deformation\+Map Map$>$ }\\\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a28c839bb898ee76ac62ceaddadcba6b1}{apply\+\_\+jacobian\+\_\+transpose}} (const Map \&map, std\+::span$<$ const double $>$ parameters, std\+::span$<$ const double $>$ displacement\+\_\+dual, std\+::span$<$ double $>$ parameter\+\_\+dual, \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ \&workspace)
\begin{DoxyCompactList}\small\item\em Transfer virtual work from the displacement field to its independent shape coefficients. \end{DoxyCompactList}\item
{\footnotesize template$<$Deformation\+Map Map$>$ }\\\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a5738813c140911a0c9ec69eec58af8e7}{apply\+\_\+pullback\+\_\+derivative}} (const Map \&map, std\+::span$<$ const double $>$ parameters, std\+::span$<$ const double $>$ direction, std\+::span$<$ const double $>$ displacement\+\_\+dual, std\+::span$<$ double $>$ parameter\+\_\+dual, \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ \&workspace)
\begin{DoxyCompactList}\small\item\em Differentiate the transpose at fixed dual; zero is justified only for a declared linear map. \end{DoxyCompactList}\item
{\footnotesize template$<$Deformation\+Map Surface\+Map, Deformation\+Map Extension\+Map$>$ \newline
requires std\+::same\+\_\+as$<$typename Surface\+Map\+::\+Output\+Space, typename Extension\+Map\+::\+Input\+Space$>$}\\std\+::expected$<$ \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_composed_deformation}{Composed\+Deformation}}$<$ Surface\+Map, Extension\+Map $>$, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}} $>$ \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a43ceea2db7df958a0bec16629328afc4}{compose\+\_\+deformation}} (std\+::shared\+\_\+ptr$<$ const Surface\+Map $>$ surface, std\+::shared\+\_\+ptr$<$ const Extension\+Map $>$ extension)
\begin{DoxyCompactList}\small\item\em Validate factor sizes before constructing an owning mathematical composition. \end{DoxyCompactList}\item
{\footnotesize template$<$Deformation\+Map Surface\+Map, Deformation\+Map Extension\+Map$>$ \newline
requires std\+::same\+\_\+as$<$typename Surface\+Map\+::\+Output\+Space, typename Extension\+Map\+::\+Input\+Space$>$}\\auto \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08faf47d7228e20ed4bae4a86c3b12f0}{make\+\_\+deformation\+\_\+computations}} ()
\begin{DoxyCompactList}\small\item\em Declare the numerical composition as ordinary dependency computations. \end{DoxyCompactList}\item
{\footnotesize template$<$Deformation\+Map Surface\+Map, Deformation\+Map Extension\+Map$>$ \newline
requires std\+::same\+\_\+as$<$typename Surface\+Map\+::\+Output\+Space, typename Extension\+Map\+::\+Input\+Space$>$}\\auto \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a6f1a3c9e7423e2e4945a75e91eb70b3b}{make\+\_\+deformation\+\_\+graph}} ()
\begin{DoxyCompactList}\small\item\em Compose independently compiled mathematical factors without introducing a prepared-\/operator facade. \end{DoxyCompactList}\item
\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a371fc6cc353f2df9f7752d802c2155da}{validate\+\_\+deformation\+\_\+values}} (std\+::span$<$ const double $>$ values, std\+::size\+\_\+t expected\+\_\+size)
\begin{DoxyCompactList}\small\item\em Reject incompatible lengths and non-\/finite values before evaluating a deformation action. \end{DoxyCompactList}\item
{\footnotesize template$<$Deformation\+Map Map$>$ }\\std\+::expected$<$ std\+::vector$<$ double $>$, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}} $>$ \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a7c97f13afaf99ecbde93c21ab3f9f771}{evaluate\+\_\+displacement}} (const Map \&map, std\+::span$<$ const double $>$ parameters)
\begin{DoxyCompactList}\small\item\em Allocate a result for graph publication while leaving repeated low-\/level actions allocation-\/free. \end{DoxyCompactList}\item
{\footnotesize template$<$Deformation\+Map Map$>$ }\\\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a1c527e713dfc9f833b3e0bd1b757c731}{apply\+\_\+jacobian}} (const \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_linearization}{Deformation\+Linearization}}$<$ Map $>$ \&state, std\+::span$<$ const double $>$ direction, std\+::span$<$ double $>$ output, \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ \&workspace)
\begin{DoxyCompactList}\small\item\em Evaluate a tangent about the cache\textquotesingle{}s accepted shape, not the caller\textquotesingle{}s next trial state. \end{DoxyCompactList}\item
{\footnotesize template$<$Deformation\+Map Map$>$ }\\\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a7e4a280dbda654cc0d4b9b462752e757}{apply\+\_\+jacobian\+\_\+transpose}} (const \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_linearization}{Deformation\+Linearization}}$<$ Map $>$ \&state, std\+::span$<$ const double $>$ dual, std\+::span$<$ double $>$ output, \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ \&workspace)
\begin{DoxyCompactList}\small\item\em Pull displacement forces back to the accepted independent shape coordinates. \end{DoxyCompactList}\item
{\footnotesize template$<$Deformation\+Map Map$>$ }\\\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_aeabb23372e9ed935ed539925bf56b316}{apply\+\_\+pullback\+\_\+derivative}} (const \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_linearization}{Deformation\+Linearization}}$<$ Map $>$ \&state, std\+::span$<$ const double $>$ direction, std\+::span$<$ const double $>$ dual, std\+::span$<$ double $>$ output, \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ \&workspace)
\begin{DoxyCompactList}\small\item\em Keep the geometric contribution to the Newton force derivative available for nonlinear models. \end{DoxyCompactList}\item
std\+::expected$<$ \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_radial_extension}{Radial\+Extension}}, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}} $>$ \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a9744ea82df8c839a005c29235aecdb03}{make\+\_\+radial\+\_\+extension}} (std\+::shared\+\_\+ptr$<$ const \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_radial_interpolation}{Radial\+Interpolation}} $>$ interpolation, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_power_law_radial_extension}{Power\+Law\+Radial\+Extension}} interior=\{\}, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_fixed_infinity_radial_extension}{Fixed\+Infinity\+Radial\+Extension}} vacuum=\{\})
\begin{DoxyCompactList}\small\item\em Compile regional weights while sharing the immutable surface interpolation. The interpolation factory has already established every reference-\/table invariant. \end{DoxyCompactList}\item
std\+::expected$<$ \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_radial_interpolation}{Radial\+Interpolation}}, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}} $>$ \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a81d1d0df5d554d5af5149549b484a0bb}{make\+\_\+radial\+\_\+interpolation}} (\mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_radial_interpolation_data}{Radial\+Interpolation\+Data}} data)
\begin{DoxyCompactList}\small\item\em Check imported or backend-\/generated reference rows once before sharing them with radial laws. \end{DoxyCompactList}\item
std\+::expected$<$ \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_surface_embedding}{Surface\+Embedding}}, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}} $>$ \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_acb2008299cc4c40f49e8c9c0086e5356}{build\+\_\+surface\+\_\+embedding}} (const \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_nodal_radial_surface}{Nodal\+Radial\+Surface}} \&model, std\+::span$<$ const std\+::array$<$ double, 3 $>$ $>$ positions)
\begin{DoxyCompactList}\small\item\em Compile fixed radial directions from ordered physical reference positions without retaining backend objects. \end{DoxyCompactList}\item
std\+::expected$<$ \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_surface_embedding}{Surface\+Embedding}}, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}} $>$ \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a21c05b3c7115c90ea951ee87a1efc714}{build\+\_\+surface\+\_\+embedding}} (const \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_spherical_harmonic_surface}{Spherical\+Harmonic\+Surface}} \&model, std\+::span$<$ const std\+::array$<$ double, 3 $>$ $>$ positions)
\begin{DoxyCompactList}\small\item\em Sample physically normalized real harmonics and reject unresolved modes without renormalizing or dropping coordinates. \end{DoxyCompactList}\item
{\footnotesize template$<$typename Surface, typename Interior, typename Vacuum$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a10e993d0c69b24df4bb3cd1a5ac12e9f}{make\+\_\+deformation\+\_\+inputs}} (const \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_domain_deformation}{Domain\+Deformation}}$<$ Surface, Interior, Vacuum $>$ \&model, const Reference\+Discretization \&discretization, const std\+::vector$<$ double $>$ \&coefficients)
\begin{DoxyCompactList}\small\item\em Bind physical choices and a borrowed shape vector without evaluating deformation. \end{DoxyCompactList}\item
{\footnotesize template$<$typename Surface$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a11cb43141841879bf3dc270b02b22cb8}{make\+\_\+deformation\+\_\+graph}} ()
\begin{DoxyCompactList}\small\item\em Provide a standalone graph while leaving the same computations available for equation composition. \end{DoxyCompactList}\item
{\footnotesize template$<$typename Surface$>$ \newline
requires requires(const Surface\& model, std\+::span$<$const std\+::array$<$double, 3$>$$>$ positions) \{ \{ \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_acb2008299cc4c40f49e8c9c0086e5356}{build\+\_\+surface\+\_\+embedding}}(model, positions) \} -\/$>$ std\+::same\+\_\+as$<$std\+::expected$<$\mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_surface_embedding}{Surface\+Embedding}}, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}}$>$$>$; \}}\\auto \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ad5adf6fb962f3bd5e82121270d4f5701}{make\+\_\+deformation\+\_\+computations}} ()
\begin{DoxyCompactList}\small\item\em Compile fixed reference factors and evaluate shape motion with one dependency engine. \end{DoxyCompactList}\item
{\footnotesize template$<$discretization\+::domain\+::schema\+::\+Is\+Schema Schema = discretization\+::domain\+::schema\+::\+Core\+Envelope\+Vacuum\+Domain\+Schema$>$ \newline
requires (Schema\+::template contains\+\_\+domain$<$\mbox{\hyperlink{namespaceserif_1_1discretization_1_1domain_aa2fd687c5f7b8750fd6980f2a7a77652}{discretization\+::domain\+::\+Stellar\+Domains}}$>$() \&\& Schema\+::template contains\+\_\+domain$<$\mbox{\hyperlink{structserif_1_1discretization_1_1domain_1_1_vacuum_domain}{discretization\+::domain\+::\+Vacuum\+Domain}}$>$() \&\& Schema\+::template contains\+\_\+boundary$<$\mbox{\hyperlink{structserif_1_1discretization_1_1domain_1_1_stellar_surface_boundary}{discretization\+::domain\+::\+Stellar\+Surface\+Boundary}}$>$() \&\& Schema\+::template contains\+\_\+boundary$<$\mbox{\hyperlink{structserif_1_1discretization_1_1domain_1_1_infinity_surface_boundary}{discretization\+::domain\+::\+Infinity\+Surface\+Boundary}}$>$())}\\Reference\+Discretization \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a4bda42409c67b56f9bc36ea69c7655ee}{deformation\+\_\+discretization}} (const \+::mfem\+::\+Finite\+Element\+Space \&scalar\+\_\+space, const \+::mfem\+::\+Finite\+Element\+Space \&displacement\+\_\+space, \+::mfem\+::\+Mesh \&logical\+\_\+mesh)
\begin{DoxyCompactList}\small\item\em Resolve physical domain names through the schema rather than hard-\/coded MFEM attributes. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection*{Variables}
\begin{DoxyCompactItemize}
\item
{\footnotesize template$<$typename Map$>$ }\\constexpr bool \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a6947f0057c614e85f67ad79f50a11606}{is\+\_\+linear\+\_\+deformation}}
\begin{DoxyCompactList}\small\item\em Linearity is an explicit property of the mathematics, independent of its action interface. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection{Typedef Documentation}
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}\index{serif::geometry::deformation@{serif::geometry::deformation}!DeformationStatus@{DeformationStatus}}
\index{DeformationStatus@{DeformationStatus}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{DeformationStatus}{DeformationStatus}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}
using \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{serif\+::geometry\+::deformation\+::\+Deformation\+Status}} = std\+::expected$<$void, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}}$>$}
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}\index{serif::geometry::deformation@{serif::geometry::deformation}!DeformationWorkspace@{DeformationWorkspace}}
\index{DeformationWorkspace@{DeformationWorkspace}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{DeformationWorkspace}{DeformationWorkspace}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}
template$<$typename Map$>$ \\
using \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{serif\+::geometry\+::deformation\+::\+Deformation\+Workspace}} = typename Map\+::\+Workspace}
\doxysubsection{Enumeration Type Documentation}
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871}\index{serif::geometry::deformation@{serif::geometry::deformation}!DeformationFailureReason@{DeformationFailureReason}}
\index{DeformationFailureReason@{DeformationFailureReason}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{DeformationFailureReason}{DeformationFailureReason}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871}
enum class \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871}{serif\+::geometry\+::deformation\+::\+Deformation\+Failure\+Reason}}\hspace{0.3cm}{\ttfamily [strong]}}
\begin{DoxyEnumFields}[2]{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{invalid\_configuration@{invalid\_configuration}!serif::geometry::deformation@{serif::geometry::deformation}}\index{serif::geometry::deformation@{serif::geometry::deformation}!invalid\_configuration@{invalid\_configuration}}}\Hypertarget{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871a9cc57114b319994e90322314a00521d4}\label{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871a9cc57114b319994e90322314a00521d4}
invalid\+\_\+configuration&\\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{incompatible\_discretization@{incompatible\_discretization}!serif::geometry::deformation@{serif::geometry::deformation}}\index{serif::geometry::deformation@{serif::geometry::deformation}!incompatible\_discretization@{incompatible\_discretization}}}\Hypertarget{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871ad73416fa06a45d748a7c8d4349054cbb}\label{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871ad73416fa06a45d748a7c8d4349054cbb}
incompatible\+\_\+discretization&\\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{invalid\_size@{invalid\_size}!serif::geometry::deformation@{serif::geometry::deformation}}\index{serif::geometry::deformation@{serif::geometry::deformation}!invalid\_size@{invalid\_size}}}\Hypertarget{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871a0181b84c792eb178181854d09c8fe7b9}\label{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871a0181b84c792eb178181854d09c8fe7b9}
invalid\+\_\+size&\\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{non\_finite@{non\_finite}!serif::geometry::deformation@{serif::geometry::deformation}}\index{serif::geometry::deformation@{serif::geometry::deformation}!non\_finite@{non\_finite}}}\Hypertarget{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871a4013d0a2d04acba5257678a15922a094}\label{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871a4013d0a2d04acba5257678a15922a094}
non\+\_\+finite&\\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{unresolved\_surface@{unresolved\_surface}!serif::geometry::deformation@{serif::geometry::deformation}}\index{serif::geometry::deformation@{serif::geometry::deformation}!unresolved\_surface@{unresolved\_surface}}}\Hypertarget{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871a9a8a2ae86e6fce17b9be87ec37249370}\label{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871a9a8a2ae86e6fce17b9be87ec37249370}
unresolved\+\_\+surface&\\
\hline
\raisebox{\heightof{T}}[0pt][0pt]{\index{invalid\_geometry@{invalid\_geometry}!serif::geometry::deformation@{serif::geometry::deformation}}\index{serif::geometry::deformation@{serif::geometry::deformation}!invalid\_geometry@{invalid\_geometry}}}\Hypertarget{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871a146816aaee11d5a21b09baac60c9812e}\label{namespaceserif_1_1geometry_1_1deformation_abff36c0dd3d8b9c916a2e928ab69a871a146816aaee11d5a21b09baac60c9812e}
invalid\+\_\+geometry&\\
\hline
\end{DoxyEnumFields}
\doxysubsection{Function Documentation}
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a1c527e713dfc9f833b3e0bd1b757c731}\index{serif::geometry::deformation@{serif::geometry::deformation}!apply\_jacobian@{apply\_jacobian}}
\index{apply\_jacobian@{apply\_jacobian}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{apply\_jacobian()}{apply\_jacobian()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a1c527e713dfc9f833b3e0bd1b757c731}
template$<$Deformation\+Map Map$>$ \\
\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} serif\+::geometry\+::deformation\+::apply\+\_\+jacobian (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_linearization}{Deformation\+Linearization}}$<$ Map $>$ \&}]{state}{, }\item[{std\+::span$<$ const double $>$}]{direction}{, }\item[{std\+::span$<$ double $>$}]{output}{, }\item[{\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ \&}]{workspace}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Evaluate a tangent about the cache\textquotesingle{}s accepted shape, not the caller\textquotesingle{}s next trial state.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a47622764fd6178445526c8b3d984a6b2}\index{serif::geometry::deformation@{serif::geometry::deformation}!apply\_jacobian@{apply\_jacobian}}
\index{apply\_jacobian@{apply\_jacobian}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{apply\_jacobian()}{apply\_jacobian()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a47622764fd6178445526c8b3d984a6b2}
template$<$Deformation\+Map Map$>$ \\
\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} serif\+::geometry\+::deformation\+::apply\+\_\+jacobian (\begin{DoxyParamCaption}\item[{const Map \&}]{map}{, }\item[{std\+::span$<$ const double $>$}]{parameters}{, }\item[{std\+::span$<$ const double $>$}]{direction}{, }\item[{std\+::span$<$ double $>$}]{displacement\+\_\+direction}{, }\item[{\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ \&}]{workspace}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Linear maps reuse their primal action; nonlinear maps supply their exact tangent.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a7e4a280dbda654cc0d4b9b462752e757}\index{serif::geometry::deformation@{serif::geometry::deformation}!apply\_jacobian\_transpose@{apply\_jacobian\_transpose}}
\index{apply\_jacobian\_transpose@{apply\_jacobian\_transpose}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{apply\_jacobian\_transpose()}{apply\_jacobian\_transpose()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a7e4a280dbda654cc0d4b9b462752e757}
template$<$Deformation\+Map Map$>$ \\
\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} serif\+::geometry\+::deformation\+::apply\+\_\+jacobian\+\_\+transpose (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_linearization}{Deformation\+Linearization}}$<$ Map $>$ \&}]{state}{, }\item[{std\+::span$<$ const double $>$}]{dual}{, }\item[{std\+::span$<$ double $>$}]{output}{, }\item[{\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ \&}]{workspace}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Pull displacement forces back to the accepted independent shape coordinates.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a28c839bb898ee76ac62ceaddadcba6b1}\index{serif::geometry::deformation@{serif::geometry::deformation}!apply\_jacobian\_transpose@{apply\_jacobian\_transpose}}
\index{apply\_jacobian\_transpose@{apply\_jacobian\_transpose}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{apply\_jacobian\_transpose()}{apply\_jacobian\_transpose()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a28c839bb898ee76ac62ceaddadcba6b1}
template$<$Deformation\+Map Map$>$ \\
\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} serif\+::geometry\+::deformation\+::apply\+\_\+jacobian\+\_\+transpose (\begin{DoxyParamCaption}\item[{const Map \&}]{map}{, }\item[{std\+::span$<$ const double $>$}]{parameters}{, }\item[{std\+::span$<$ const double $>$}]{displacement\+\_\+dual}{, }\item[{std\+::span$<$ double $>$}]{parameter\+\_\+dual}{, }\item[{\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ \&}]{workspace}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Transfer virtual work from the displacement field to its independent shape coefficients.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_aeabb23372e9ed935ed539925bf56b316}\index{serif::geometry::deformation@{serif::geometry::deformation}!apply\_pullback\_derivative@{apply\_pullback\_derivative}}
\index{apply\_pullback\_derivative@{apply\_pullback\_derivative}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{apply\_pullback\_derivative()}{apply\_pullback\_derivative()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_aeabb23372e9ed935ed539925bf56b316}
template$<$Deformation\+Map Map$>$ \\
\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} serif\+::geometry\+::deformation\+::apply\+\_\+pullback\+\_\+derivative (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_linearization}{Deformation\+Linearization}}$<$ Map $>$ \&}]{state}{, }\item[{std\+::span$<$ const double $>$}]{direction}{, }\item[{std\+::span$<$ const double $>$}]{dual}{, }\item[{std\+::span$<$ double $>$}]{output}{, }\item[{\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ \&}]{workspace}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Keep the geometric contribution to the Newton force derivative available for nonlinear models.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a5738813c140911a0c9ec69eec58af8e7}\index{serif::geometry::deformation@{serif::geometry::deformation}!apply\_pullback\_derivative@{apply\_pullback\_derivative}}
\index{apply\_pullback\_derivative@{apply\_pullback\_derivative}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{apply\_pullback\_derivative()}{apply\_pullback\_derivative()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a5738813c140911a0c9ec69eec58af8e7}
template$<$Deformation\+Map Map$>$ \\
\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} serif\+::geometry\+::deformation\+::apply\+\_\+pullback\+\_\+derivative (\begin{DoxyParamCaption}\item[{const Map \&}]{map}{, }\item[{std\+::span$<$ const double $>$}]{parameters}{, }\item[{std\+::span$<$ const double $>$}]{direction}{, }\item[{std\+::span$<$ const double $>$}]{displacement\+\_\+dual}{, }\item[{std\+::span$<$ double $>$}]{parameter\+\_\+dual}{, }\item[{\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ \&}]{workspace}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Differentiate the transpose at fixed dual; zero is justified only for a declared linear map.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_ad539328115ca03a435d339f2c551a21b}\index{serif::geometry::deformation@{serif::geometry::deformation}!build\_displacement@{build\_displacement}}
\index{build\_displacement@{build\_displacement}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{build\_displacement()}{build\_displacement()}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_ad539328115ca03a435d339f2c551a21b}
template$<$Deformation\+Map Map$>$ \\
\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} serif\+::geometry\+::deformation\+::build\+\_\+displacement (\begin{DoxyParamCaption}\item[{const Map \&}]{map}{, }\item[{std\+::span$<$ const double $>$}]{parameters}{, }\item[{std\+::span$<$ double $>$}]{displacement}{, }\item[{\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ \&}]{workspace}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Evaluate physical displacement with caller-\/owned output and scratch. All action outputs must be disjoint from their inputs. Workspace storage is reserved for the map and must not supply public input or output spans.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_acb2008299cc4c40f49e8c9c0086e5356}\index{serif::geometry::deformation@{serif::geometry::deformation}!build\_surface\_embedding@{build\_surface\_embedding}}
\index{build\_surface\_embedding@{build\_surface\_embedding}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{build\_surface\_embedding()}{build\_surface\_embedding()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_acb2008299cc4c40f49e8c9c0086e5356}
std\+::expected$<$ \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_surface_embedding}{Surface\+Embedding}}, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}} $>$ serif\+::geometry\+::deformation\+::build\+\_\+surface\+\_\+embedding (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_nodal_radial_surface}{Nodal\+Radial\+Surface}} \&}]{model}{, }\item[{std\+::span$<$ const std\+::array$<$ double, 3 $>$ $>$}]{positions}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Compile fixed radial directions from ordered physical reference positions without retaining backend objects.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a21c05b3c7115c90ea951ee87a1efc714}\index{serif::geometry::deformation@{serif::geometry::deformation}!build\_surface\_embedding@{build\_surface\_embedding}}
\index{build\_surface\_embedding@{build\_surface\_embedding}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{build\_surface\_embedding()}{build\_surface\_embedding()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a21c05b3c7115c90ea951ee87a1efc714}
std\+::expected$<$ \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_surface_embedding}{Surface\+Embedding}}, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}} $>$ serif\+::geometry\+::deformation\+::build\+\_\+surface\+\_\+embedding (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_spherical_harmonic_surface}{Spherical\+Harmonic\+Surface}} \&}]{model}{, }\item[{std\+::span$<$ const std\+::array$<$ double, 3 $>$ $>$}]{positions}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Sample physically normalized real harmonics and reject unresolved modes without renormalizing or dropping coordinates.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a43ceea2db7df958a0bec16629328afc4}\index{serif::geometry::deformation@{serif::geometry::deformation}!compose\_deformation@{compose\_deformation}}
\index{compose\_deformation@{compose\_deformation}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{compose\_deformation()}{compose\_deformation()}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a43ceea2db7df958a0bec16629328afc4}
template$<$Deformation\+Map Surface\+Map, Deformation\+Map Extension\+Map$>$ \newline
requires std\+::same\+\_\+as$<$typename Surface\+Map\+::\+Output\+Space, typename Extension\+Map\+::\+Input\+Space$>$\\
std\+::expected$<$ \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_composed_deformation}{Composed\+Deformation}}$<$ Surface\+Map, Extension\+Map $>$, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}} $>$ serif\+::geometry\+::deformation\+::compose\+\_\+deformation (\begin{DoxyParamCaption}\item[{std\+::shared\+\_\+ptr$<$ const Surface\+Map $>$}]{surface}{, }\item[{std\+::shared\+\_\+ptr$<$ const Extension\+Map $>$}]{extension}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Validate factor sizes before constructing an owning mathematical composition.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a4bda42409c67b56f9bc36ea69c7655ee}\index{serif::geometry::deformation@{serif::geometry::deformation}!deformation\_discretization@{deformation\_discretization}}
\index{deformation\_discretization@{deformation\_discretization}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{deformation\_discretization()}{deformation\_discretization()}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a4bda42409c67b56f9bc36ea69c7655ee}
template$<$discretization\+::domain\+::schema\+::\+Is\+Schema Schema = discretization\+::domain\+::schema\+::\+Core\+Envelope\+Vacuum\+Domain\+Schema$>$ \newline
requires (Schema\+::template contains\+\_\+domain$<$\mbox{\hyperlink{namespaceserif_1_1discretization_1_1domain_aa2fd687c5f7b8750fd6980f2a7a77652}{discretization\+::domain\+::\+Stellar\+Domains}}$>$() \&\& Schema\+::template contains\+\_\+domain$<$\mbox{\hyperlink{structserif_1_1discretization_1_1domain_1_1_vacuum_domain}{discretization\+::domain\+::\+Vacuum\+Domain}}$>$() \&\& Schema\+::template contains\+\_\+boundary$<$\mbox{\hyperlink{structserif_1_1discretization_1_1domain_1_1_stellar_surface_boundary}{discretization\+::domain\+::\+Stellar\+Surface\+Boundary}}$>$() \&\& Schema\+::template contains\+\_\+boundary$<$\mbox{\hyperlink{structserif_1_1discretization_1_1domain_1_1_infinity_surface_boundary}{discretization\+::domain\+::\+Infinity\+Surface\+Boundary}}$>$())\\
Reference\+Discretization serif\+::geometry\+::deformation\+::backend\+::mfem\+::deformation\+\_\+discretization (\begin{DoxyParamCaption}\item[{const \+::mfem\+::\+Finite\+Element\+Space \&}]{scalar\+\_\+space}{, }\item[{const \+::mfem\+::\+Finite\+Element\+Space \&}]{displacement\+\_\+space}{, }\item[{\+::mfem\+::\+Mesh \&}]{logical\+\_\+mesh}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Resolve physical domain names through the schema rather than hard-\/coded MFEM attributes.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a7c97f13afaf99ecbde93c21ab3f9f771}\index{serif::geometry::deformation@{serif::geometry::deformation}!evaluate\_displacement@{evaluate\_displacement}}
\index{evaluate\_displacement@{evaluate\_displacement}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{evaluate\_displacement()}{evaluate\_displacement()}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a7c97f13afaf99ecbde93c21ab3f9f771}
template$<$Deformation\+Map Map$>$ \\
std\+::expected$<$ std\+::vector$<$ double $>$, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}} $>$ serif\+::geometry\+::deformation\+::evaluate\+\_\+displacement (\begin{DoxyParamCaption}\item[{const Map \&}]{map}{, }\item[{std\+::span$<$ const double $>$}]{parameters}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Allocate a result for graph publication while leaving repeated low-\/level actions allocation-\/free.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a08faf47d7228e20ed4bae4a86c3b12f0}\index{serif::geometry::deformation@{serif::geometry::deformation}!make\_deformation\_computations@{make\_deformation\_computations}}
\index{make\_deformation\_computations@{make\_deformation\_computations}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{make\_deformation\_computations()}{make\_deformation\_computations()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a08faf47d7228e20ed4bae4a86c3b12f0}
template$<$Deformation\+Map Surface\+Map, Deformation\+Map Extension\+Map$>$ \newline
requires std\+::same\+\_\+as$<$typename Surface\+Map\+::\+Output\+Space, typename Extension\+Map\+::\+Input\+Space$>$\\
auto serif\+::geometry\+::deformation\+::make\+\_\+deformation\+\_\+computations (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Declare the numerical composition as ordinary dependency computations.
\begin{DoxyNote}{Note}
Shared immutable factors, coefficient snapshots, and results belong to the dependency cache. Analytical actions remain independent functions.
\end{DoxyNote}
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_ad5adf6fb962f3bd5e82121270d4f5701}\index{serif::geometry::deformation@{serif::geometry::deformation}!make\_deformation\_computations@{make\_deformation\_computations}}
\index{make\_deformation\_computations@{make\_deformation\_computations}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{make\_deformation\_computations()}{make\_deformation\_computations()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_ad5adf6fb962f3bd5e82121270d4f5701}
template$<$typename Surface$>$ \newline
requires requires(const Surface\& model, std\+::span$<$const std\+::array$<$double, 3$>$$>$ positions) \{ \{ \mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_acb2008299cc4c40f49e8c9c0086e5356}{build\+\_\+surface\+\_\+embedding}}(model, positions) \} -\/$>$ std\+::same\+\_\+as$<$std\+::expected$<$\mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_surface_embedding}{Surface\+Embedding}}, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}}$>$$>$; \}\\
auto serif\+::geometry\+::deformation\+::backend\+::mfem\+::make\+\_\+deformation\+\_\+computations (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Compile fixed reference factors and evaluate shape motion with one dependency engine.
\begin{DoxyNote}{Note}
Configuration values are named context inputs. Factories declare work; try\+\_\+prepare performs it explicitly.
\end{DoxyNote}
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a6f1a3c9e7423e2e4945a75e91eb70b3b}\index{serif::geometry::deformation@{serif::geometry::deformation}!make\_deformation\_graph@{make\_deformation\_graph}}
\index{make\_deformation\_graph@{make\_deformation\_graph}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{make\_deformation\_graph()}{make\_deformation\_graph()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a6f1a3c9e7423e2e4945a75e91eb70b3b}
template$<$Deformation\+Map Surface\+Map, Deformation\+Map Extension\+Map$>$ \newline
requires std\+::same\+\_\+as$<$typename Surface\+Map\+::\+Output\+Space, typename Extension\+Map\+::\+Input\+Space$>$\\
auto serif\+::geometry\+::deformation\+::make\+\_\+deformation\+\_\+graph (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Compose independently compiled mathematical factors without introducing a prepared-\/operator facade.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a11cb43141841879bf3dc270b02b22cb8}\index{serif::geometry::deformation@{serif::geometry::deformation}!make\_deformation\_graph@{make\_deformation\_graph}}
\index{make\_deformation\_graph@{make\_deformation\_graph}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{make\_deformation\_graph()}{make\_deformation\_graph()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a11cb43141841879bf3dc270b02b22cb8}
template$<$typename Surface$>$ \\
auto serif\+::geometry\+::deformation\+::backend\+::mfem\+::make\+\_\+deformation\+\_\+graph (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Provide a standalone graph while leaving the same computations available for equation composition.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a10e993d0c69b24df4bb3cd1a5ac12e9f}\index{serif::geometry::deformation@{serif::geometry::deformation}!make\_deformation\_inputs@{make\_deformation\_inputs}}
\index{make\_deformation\_inputs@{make\_deformation\_inputs}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{make\_deformation\_inputs()}{make\_deformation\_inputs()}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a10e993d0c69b24df4bb3cd1a5ac12e9f}
template$<$typename Surface, typename Interior, typename Vacuum$>$ \\
auto serif\+::geometry\+::deformation\+::backend\+::mfem\+::make\+\_\+deformation\+\_\+inputs (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_domain_deformation}{Domain\+Deformation}}$<$ Surface, Interior, Vacuum $>$ \&}]{model}{, }\item[{const Reference\+Discretization \&}]{discretization}{, }\item[{const std\+::vector$<$ double $>$ \&}]{coefficients}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Bind physical choices and a borrowed shape vector without evaluating deformation.
\begin{DoxyNote}{Note}
Meshes, spaces, and the vector must outlive the context. Borrowing the container retains its current storage and size even if the caller subsequently resizes it. Coordinate edits must notify MFEM through its normal node-\/update API.
\end{DoxyNote}
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_aa3ab7cc89a2262523938808363fda865}\index{serif::geometry::deformation@{serif::geometry::deformation}!make\_deformation\_workspace@{make\_deformation\_workspace}}
\index{make\_deformation\_workspace@{make\_deformation\_workspace}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{make\_deformation\_workspace()}{make\_deformation\_workspace()}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_aa3ab7cc89a2262523938808363fda865}
template$<$Deformation\+Map Map$>$ \\
\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_ae1f99a74025eac52e6ff4a4b77fb41c6}{Deformation\+Workspace}}$<$ Map $>$ serif\+::geometry\+::deformation\+::make\+\_\+deformation\+\_\+workspace (\begin{DoxyParamCaption}\item[{const Map \&}]{map}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Allocate action scratch explicitly, once per independent caller.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a9744ea82df8c839a005c29235aecdb03}\index{serif::geometry::deformation@{serif::geometry::deformation}!make\_radial\_extension@{make\_radial\_extension}}
\index{make\_radial\_extension@{make\_radial\_extension}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{make\_radial\_extension()}{make\_radial\_extension()}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a9744ea82df8c839a005c29235aecdb03}
std\+::expected$<$ \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_radial_extension}{Radial\+Extension}}, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}} $>$ serif\+::geometry\+::deformation\+::make\+\_\+radial\+\_\+extension (\begin{DoxyParamCaption}\item[{std\+::shared\+\_\+ptr$<$ const \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_radial_interpolation}{Radial\+Interpolation}} $>$}]{interpolation}{, }\item[{\mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_power_law_radial_extension}{Power\+Law\+Radial\+Extension}}}]{interior}{ = {\ttfamily \{\}}, }\item[{\mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_fixed_infinity_radial_extension}{Fixed\+Infinity\+Radial\+Extension}}}]{vacuum}{ = {\ttfamily \{\}}}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Compile regional weights while sharing the immutable surface interpolation. The interpolation factory has already established every reference-\/table invariant.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a81d1d0df5d554d5af5149549b484a0bb}\index{serif::geometry::deformation@{serif::geometry::deformation}!make\_radial\_interpolation@{make\_radial\_interpolation}}
\index{make\_radial\_interpolation@{make\_radial\_interpolation}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{make\_radial\_interpolation()}{make\_radial\_interpolation()}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a81d1d0df5d554d5af5149549b484a0bb}
std\+::expected$<$ \mbox{\hyperlink{classserif_1_1geometry_1_1deformation_1_1_radial_interpolation}{Radial\+Interpolation}}, \mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_deformation_failure}{Deformation\+Failure}} $>$ serif\+::geometry\+::deformation\+::make\+\_\+radial\+\_\+interpolation (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structserif_1_1geometry_1_1deformation_1_1_radial_interpolation_data}{Radial\+Interpolation\+Data}}}]{data}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [nodiscard]}}
Check imported or backend-\/generated reference rows once before sharing them with radial laws.
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a371fc6cc353f2df9f7752d802c2155da}\index{serif::geometry::deformation@{serif::geometry::deformation}!validate\_deformation\_values@{validate\_deformation\_values}}
\index{validate\_deformation\_values@{validate\_deformation\_values}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{validate\_deformation\_values()}{validate\_deformation\_values()}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a371fc6cc353f2df9f7752d802c2155da}
\mbox{\hyperlink{namespaceserif_1_1geometry_1_1deformation_a08306ee593c172f4877facc061e98f97}{Deformation\+Status}} serif\+::geometry\+::deformation\+::validate\+\_\+deformation\+\_\+values (\begin{DoxyParamCaption}\item[{std\+::span$<$ const double $>$}]{values}{, }\item[{std\+::size\+\_\+t}]{expected\+\_\+size}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [nodiscard]}}
Reject incompatible lengths and non-\/finite values before evaluating a deformation action.
\doxysubsection{Variable Documentation}
\Hypertarget{namespaceserif_1_1geometry_1_1deformation_a6947f0057c614e85f67ad79f50a11606}\index{serif::geometry::deformation@{serif::geometry::deformation}!is\_linear\_deformation@{is\_linear\_deformation}}
\index{is\_linear\_deformation@{is\_linear\_deformation}!serif::geometry::deformation@{serif::geometry::deformation}}
\doxysubsubsection{\texorpdfstring{is\_linear\_deformation}{is\_linear\_deformation}}
{\footnotesize\ttfamily \label{namespaceserif_1_1geometry_1_1deformation_a6947f0057c614e85f67ad79f50a11606}
template$<$typename Map$>$ \\
bool serif\+::geometry\+::deformation\+::is\+\_\+linear\+\_\+deformation\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [constexpr]}}
{\bfseries Initial value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{=\ \textcolor{keyword}{requires}}
\DoxyCodeLine{\ \ \ \ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keyword}{requires}\ Map::is\_linear;}
\DoxyCodeLine{\ \ \ \ \}}
\end{DoxyCode}
Linearity is an explicit property of the mathematics, independent of its action interface.