SERiF v0.0.1a
Stellar Evolution and Rotation in Four Dimensions
Loading...
Searching...
No Matches
serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT > Class Template Reference

Shared preparation and row replacement for scalar boundary values and vector point values. More...

#include <prepared_nodal_constraint.hpp>

Inheritance diagram for serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >:
[legend]
Collaboration diagram for serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >:
[legend]

Classes

struct  CalculateNodes
 
struct  NodalData
 

Public Types

using Test = EquationT::Test
 
using Value = discretization::forms::OperandValue<equations::TestOperandOf<EquationT>>
 
using RowBinding = discretization::backend::mfem::TermBinding<Test, SchemaT>
 

Public Member Functions

 PreparedNodalConstraint (EquationT equation, const RowBinding &row, discretization::backend::mfem::DofSelection rows)
 Borrow selected nodal rows; vector selections contain exactly one point in component order.
 
template<typename StateT>
std::expected< void, PreparationRejection > try_prepare (const StateT &state, const PreparationMode mode=PreparationMode::rebuild)
 Freeze the local equation and derivative; rejection invalidates the previous preparation.
 
template<typename StateT>
void prepare (const StateT &state, const PreparationMode mode=PreparationMode::rebuild)
 Prepare or translate a numerical rejection to a caller-visible exception.
 
void apply_residual_rows (::mfem::Vector &result) const
 Replace the selected entries of an assembled residual.
 
template<typename StateT>
void apply_jacobian_rows (const StateT &direction, ::mfem::Vector &result) const
 Replace complete row actions, removing every unconstrained coupling at these rows.
 
void apply_jacobian_rows (const ::mfem::Vector &direction, ::mfem::Vector &result) const
 Apply the same row replacement to a coefficient vector without a state wrapper.
 
void mask_residual_dual (const ::mfem::Vector &dual, ::mfem::Vector &volume_dual) const
 Remove constrained rows BEFORE applying the volume Jacobian transpose.
 
void add_jacobian_transpose_rows (const ::mfem::Vector &dual, ::mfem::Vector &result) const
 Add the nodal transpose AFTER the volume transpose of the masked residual dual.
 
void invalidate () noexcept
 Invalidate frozen residuals and derivatives.
 
bool is_prepared () const noexcept
 Report whether a complete preparation exists.
 
std::size_t preparation_count () const noexcept
 Count successful preparations.
 
const PreparationReport & preparation_report () const noexcept
 Report whether the selected nodal equations were reevaluated.
 
const discretization::backend::mfem::DofSelection & rows () const noexcept
 Return the selected supported coefficient indices.
 
const EquationT & equation () const noexcept
 Expose immutable physics metadata to constraint diagnostics.
 

Static Public Attributes

static constexpr int components = discretization::forms::component_count<Value>
 

Protected Member Functions

void validate_result (const ::mfem::Vector &result) const
 Reject missing preparation, stale selection, and incorrect output sizes.
 
const NodalData & prepared_data () const
 Read frozen nodal values shared by row replacement and point borders.
 

Protected Attributes

std::unique_ptr< const EquationT > m_equation
 
const RowBinding & m_row
 
discretization::backend::mfem::DofSelection m_rows
 

Private Types

using Calculation = utils::dependencies::Computation<NodalResult, utils::dependencies::InputList<Test>, CalculateNodes>
 
using Graph = utils::dependencies::ComputationGraph<Calculation>
 
using Context = decltype(utils::dependencies::make_dependency_context(utils::dependencies::own<Test>(std::declval<CoefficientView<RowBinding>>(), CoefficientTracking{})))
 
using Cache = utils::dependencies::ComputationCache<Graph, Context, PreparationRejection>
 

Private Attributes

Cache m_cache {Graph{Calculation{CalculateNodes{.equation = *m_equation}}}}
 
PreparationReport m_report
 
std::size_t m_preparation_count {0}
 

Detailed Description

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
class serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >

Shared preparation and row replacement for scalar boundary values and vector point values.

Member Typedef Documentation

◆ Cache

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
using serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::Cache = utils::dependencies::ComputationCache<Graph, Context, PreparationRejection>
private

◆ Calculation

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
using serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::Calculation = utils::dependencies::Computation<NodalResult, utils::dependencies::InputList<Test>, CalculateNodes>
private

◆ Context

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
using serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::Context = decltype(utils::dependencies::make_dependency_context(utils::dependencies::own<Test>(std::declval<CoefficientView<RowBinding>>(), CoefficientTracking{})))
private

◆ Graph

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
using serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::Graph = utils::dependencies::ComputationGraph<Calculation>
private

◆ RowBinding

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
using serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::RowBinding = discretization::backend::mfem::TermBinding<Test, SchemaT>

◆ Test

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
using serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::Test = EquationT::Test

◆ Value

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
using serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::Value = discretization::forms::OperandValue<equations::TestOperandOf<EquationT>>

Constructor & Destructor Documentation

◆ PreparedNodalConstraint()

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::PreparedNodalConstraint ( EquationT equation,
const RowBinding & row,
discretization::backend::mfem::DofSelection rows )
inline

Borrow selected nodal rows; vector selections contain exactly one point in component order.

Member Function Documentation

◆ add_jacobian_transpose_rows()

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
void serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::add_jacobian_transpose_rows ( const ::mfem::Vector & dual,
::mfem::Vector & result ) const
inline

Add the nodal transpose AFTER the volume transpose of the masked residual dual.

◆ apply_jacobian_rows() [1/2]

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
void serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::apply_jacobian_rows ( const ::mfem::Vector & direction,
::mfem::Vector & result ) const
inline

Apply the same row replacement to a coefficient vector without a state wrapper.

◆ apply_jacobian_rows() [2/2]

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
template<typename StateT>
void serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::apply_jacobian_rows ( const StateT & direction,
::mfem::Vector & result ) const
inline

Replace complete row actions, removing every unconstrained coupling at these rows.

◆ apply_residual_rows()

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
void serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::apply_residual_rows ( ::mfem::Vector & result) const
inline

Replace the selected entries of an assembled residual.

◆ equation()

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
const EquationT & serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::equation ( ) const
inlinenodiscardnoexcept

Expose immutable physics metadata to constraint diagnostics.

◆ invalidate()

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
void serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::invalidate ( )
inlinenoexcept

Invalidate frozen residuals and derivatives.

◆ is_prepared()

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
bool serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::is_prepared ( ) const
inlinenodiscardnoexcept

Report whether a complete preparation exists.

◆ mask_residual_dual()

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
void serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::mask_residual_dual ( const ::mfem::Vector & dual,
::mfem::Vector & volume_dual ) const
inline

Remove constrained rows BEFORE applying the volume Jacobian transpose.

◆ preparation_count()

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
std::size_t serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::preparation_count ( ) const
inlinenodiscardnoexcept

Count successful preparations.

◆ preparation_report()

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
const PreparationReport & serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::preparation_report ( ) const
inlinenodiscardnoexcept

Report whether the selected nodal equations were reevaluated.

◆ prepare()

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
template<typename StateT>
void serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::prepare ( const StateT & state,
const PreparationMode mode = PreparationMode::rebuild )
inline

Prepare or translate a numerical rejection to a caller-visible exception.

◆ prepared_data()

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
const NodalData & serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::prepared_data ( ) const
inlinenodiscardprotected

Read frozen nodal values shared by row replacement and point borders.

◆ rows()

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
const discretization::backend::mfem::DofSelection & serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::rows ( ) const
inlinenodiscardnoexcept

Return the selected supported coefficient indices.

◆ try_prepare()

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
template<typename StateT>
std::expected< void, PreparationRejection > serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::try_prepare ( const StateT & state,
const PreparationMode mode = PreparationMode::rebuild )
inlinenodiscard

Freeze the local equation and derivative; rejection invalidates the previous preparation.

◆ validate_result()

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
void serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::validate_result ( const ::mfem::Vector & result) const
inlineprotected

Reject missing preparation, stale selection, and incorrect output sizes.

Member Data Documentation

◆ components

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
int serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::components = discretization::forms::component_count<Value>
staticconstexpr

◆ m_cache

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
Cache serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::m_cache {Graph{Calculation{CalculateNodes{.equation = *m_equation}}}}
private

◆ m_equation

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
std::unique_ptr<const EquationT> serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::m_equation
protected

◆ m_preparation_count

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
std::size_t serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::m_preparation_count {0}
private

◆ m_report

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
PreparationReport serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::m_report
private

◆ m_row

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
const RowBinding& serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::m_row
protected

◆ m_rows

template<NodalValueEquation EquationT, discretization::domain::schema::IsSchema SchemaT>
discretization::backend::mfem::DofSelection serif::operators::backend::mfem::PreparedNodalConstraint< EquationT, SchemaT >::m_rows
protected

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