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

Namespaces

namespace  backend
 
namespace  checks
 
namespace  computations
 
namespace  detail
 
namespace  keys
 
namespace  strategies
 

Classes

struct  BlockPreconditioner
 Select a physical equation/unknown pair and the numerical approximation to its inverse. More...
 
struct  BorderedPreconditioner
 Correct a physical field inverse through its dense constraint Schur system. More...
 
struct  ConstraintCoordinates
 Select arbitrary constraint rows and unknowns, including coupled generated scalars. More...
 
struct  CoupledPreconditioner
 Compose physical subsystem descriptions without creating an additional preparation owner. More...
 
struct  Failure
 A recoverable preparation failure, including the numerical reason and how to correct it. More...
 
class  Solver
 Expose one accepted inverse to MFEM while binding it to exactly its accepted physical Jacobian. More...
 

Concepts

concept  PrimalPreconditionerLayout
 Require density and potential fields with paired optional shape and scalar constraints.
 
concept  DisjointSubsystems
 Require disjoint ownership on both sides rather than silently deduplicating physical coordinates.
 

Enumerations

enum class  ApplicationContract { fixed_linear , variable }
 Whether repeated applications represent one fixed linear map or a variable inner solve. More...
 

Functions

template<typename Row, typename Field>
auto physical_block (operators::backend::mfem::LinearizedBlock block)
 Name a single accepted physical coupling as an ordinary dependency source.
 
template<typename Recipe>
auto make_preconditioner_computations (const Recipe &choice)
 Declare a recipe's numerical stages for composition into one model dependency graph.
 
template<typename Recipe>
auto make_preconditioner_graph (const Recipe &choice)
 Construct the complete preconditioner graph in one place, without preparing any numerical data.
 
template<typename Recipe, discretization::blocks::SystemLayoutType Layout, utils::dependencies::IsComputation... Additional>
auto make_preconditioner_computations (const Recipe &choice, const Layout &, Additional... additional)
 Expand a recipe and its coordinate ordering for composition into an existing physical graph.
 
template<typename Recipe, discretization::blocks::SystemLayoutType Layout, utils::dependencies::IsComputation... Additional>
auto make_preconditioner_graph (const Recipe &choice, const Layout &layout, Additional... additional)
 Order the inverse in system coordinates, optionally including explicit upstream computations such as reference surface assembly.
 
template<PrimalPreconditionerLayout Layout, typename PotentialInverse = strategies::inverse::FixedAMG>
auto make_primal_preconditioner (const Layout &, PotentialInverse potential_inverse=strategies::inverse::FixedAMG{.cycles=3})
 Couple scalar density and potential responses, then correct every shape and global constraint together.
 
template<typename Field, typename Row = Field, typename Strategy>
auto make_preconditioner (Strategy inverse)
 Describe an inverse without preparing matrices or binding runtime state.
 
template<typename Constraints, typename Fields>
requires DisjointSubsystems<Fields, Constraints>
auto with_constraints (Fields fields, strategies::inverse::DenseDirect inverse={})
 Attach constraints without a registry of built-in mass, rotation, or central-density providers.
 
template<typename First, typename Second, typename Policy>
requires DisjointSubsystems<First, Second>
auto couple (First first, Second second, Policy coupling)
 Choose the physical subsystem ordering explicitly; the same algebra serves material/surface and material/gravity.
 

Enumeration Type Documentation

◆ ApplicationContract

Whether repeated applications represent one fixed linear map or a variable inner solve.

Enumerator
fixed_linear 
variable 

Function Documentation

◆ couple()

template<typename First, typename Second, typename Policy>
requires DisjointSubsystems<First, Second>
auto serif::solver::preconditioner::couple ( First first,
Second second,
Policy coupling )
nodiscard

Choose the physical subsystem ordering explicitly; the same algebra serves material/surface and material/gravity.

◆ make_preconditioner()

template<typename Field, typename Row = Field, typename Strategy>
auto serif::solver::preconditioner::make_preconditioner ( Strategy inverse)
nodiscard

Describe an inverse without preparing matrices or binding runtime state.

◆ make_preconditioner_computations() [1/2]

template<typename Recipe>
auto serif::solver::preconditioner::make_preconditioner_computations ( const Recipe & choice)
nodiscard

Declare a recipe's numerical stages for composition into one model dependency graph.

◆ make_preconditioner_computations() [2/2]

template<typename Recipe, discretization::blocks::SystemLayoutType Layout, utils::dependencies::IsComputation... Additional>
auto serif::solver::preconditioner::make_preconditioner_computations ( const Recipe & choice,
const Layout & ,
Additional... additional )
nodiscard

Expand a recipe and its coordinate ordering for composition into an existing physical graph.

◆ make_preconditioner_graph() [1/2]

template<typename Recipe>
auto serif::solver::preconditioner::make_preconditioner_graph ( const Recipe & choice)
nodiscard

Construct the complete preconditioner graph in one place, without preparing any numerical data.

Note
Recipes choose physical branches; computation declarations name all edges. The dependency engine orders execution.

◆ make_preconditioner_graph() [2/2]

template<typename Recipe, discretization::blocks::SystemLayoutType Layout, utils::dependencies::IsComputation... Additional>
auto serif::solver::preconditioner::make_preconditioner_graph ( const Recipe & choice,
const Layout & layout,
Additional... additional )
nodiscard

Order the inverse in system coordinates, optionally including explicit upstream computations such as reference surface assembly.

Note
Supply keys::Layout in the preparation context. Additional computations must have unique result keys.

◆ make_primal_preconditioner()

template<PrimalPreconditionerLayout Layout, typename PotentialInverse = strategies::inverse::FixedAMG>
auto serif::solver::preconditioner::make_primal_preconditioner ( const Layout & ,
PotentialInverse potential_inverse = strategies::inverse::FixedAMG{.cycles = 3} )
nodiscard

Couple scalar density and potential responses, then correct every shape and global constraint together.

Potential responds first and its force contribution then adjusts density. The existing dense border retains surface-to-field and field-to-surface responses, including the mean radius mode; shape has no separate mass inverse. Density uses its diagonal without regularization because its pressure-force Jacobian includes drift and need not satisfy the positive-diagonal contract of the elliptic AMG strategy used for potential.

Note
The dense border stores one field response per shape/global coordinate and a square border matrix. This default targets bounded surface catalogs; large nodal surfaces require an explicitly chosen scalable recipe.
This is an approximate inverse, not a guarantee that the physical constraint Schur system is nonsingular.
Parameters
potential_inverseInverse of the potential block: three fixed AMG cycles by default, or for example strategies::inverse::SparseDirect for an exact factorization of moderate-size blocks.

◆ physical_block()

template<typename Row, typename Field>
auto serif::solver::preconditioner::physical_block ( operators::backend::mfem::LinearizedBlock block)
nodiscard

Name a single accepted physical coupling as an ordinary dependency source.

◆ with_constraints()

template<typename Constraints, typename Fields>
requires DisjointSubsystems<Fields, Constraints>
auto serif::solver::preconditioner::with_constraints ( Fields fields,
strategies::inverse::DenseDirect inverse = {} )
nodiscard

Attach constraints without a registry of built-in mass, rotation, or central-density providers.