8#include "akreon/linalg/linalg_util.hpp"
15template <linalg::VectorContainer Var, linalg::VectorContainer NuVar>
28 const NuVar& )
const {
30 return std::tuple(pz, NuVar{}, event);
47template <linalg::MatrixContainer EqMat,
typename SchurFactor,
48 linalg::VectorContainer Var, linalg::VectorContainer NuVar>
75 const NuVar& req)
const {
78 return std::tuple(Var{}, NuVar{},
event_one);
83 return std::tuple(Var{}, NuVar{},
event_two);
90 return std::tuple(pz, pnu, linalg::NumericalEvent::NONE);
101template <linalg::MatrixContainer EqMat, linalg::Field Scalar,
102 linalg::VectorContainer Var, linalg::VectorContainer NuVar>
129 const NuVar& req)
const {
132 return std::tuple(Var{}, NuVar{},
event_one);
141 return std::tuple(Var{}, NuVar{},
event_two);
143 return std::tuple(pz, pnu, linalg::NumericalEvent::NONE);
constexpr std::size_t dom_size_v
No equality-coupling case for empty A.
constexpr auto solve_step(const auto &M_inv, const Var &pz_rhs, const Var &rd, const NuVar &) const
solve for pz step
Scalar Schur complement wrapper for 1x1 equality case.
constexpr ScalarEqualityCoupling(const EqMat &A_in, const Scalar &s_in)
CTOR.
constexpr auto solve_step(const auto &M_inv, const Var &pz_rhs, const Var &rd, const NuVar &req) const
solve for pz step
Equality-coupling wrapper for Schur-complement based solve.
constexpr SchurEqualityCoupling(const EqMat &A_in, const SchurFactor &S_inv_in)
CTOR.
SchurFactor S_inv
Schur factor S = (A M^{-1} A^T)^{-1}.
constexpr auto solve_step(const auto &M_inv, const Var &pz_rhs, const Var &rd, const NuVar &req) const
solve for pz step