gravity.hpp utility serif/discretization/blocks/fields.hpp serif/solver/preconditioner/recipes/block.hpp serif/solver/preconditioner/strategies/inverse/chebyshev.hpp serif/solver/preconditioner/strategies/inverse/fixed_amg.hpp serif/solver/preconditioner/strategies/gravity/factorization.hpp src/include/serif/solver/preconditioner/computations/gravity.hpp serif::solver::preconditioner::GravityPreconditioner serif serif::solver serif::solver::preconditioner #pragmaonce #include<utility> #include"serif/discretization/blocks/fields.hpp" #include"serif/solver/preconditioner/recipes/block.hpp" #include"serif/solver/preconditioner/strategies/inverse/chebyshev.hpp" #include"serif/solver/preconditioner/strategies/inverse/fixed_amg.hpp" #include"serif/solver/preconditioner/strategies/gravity/factorization.hpp" namespaceserif::solver::preconditioner { template<typenameGradient,typenamePotential,typenameMassStrategy,typenameSchurStrategy,strategies::gravity::PolicyPolicy> structGravityPreconditionerfinal { usingRows=utils::dependencies::KeyList<Gradient, Potential>; usingValues=Rows; usingResult=keys::Inverse<Rows, Values>; MassStrategymass_inverse; SchurStrategypotential_inverse; Policyfactorization; }; template<typenameGradient=discretization::blocks::gravity::gradient,typenamePotential=discretization::blocks::gravity::potential,typenameMassStrategy,typenameSchurStrategy,strategies::gravity::PolicyPolicy=strategies::gravity::ApproximateLDU> [[nodiscard]]automake_gravity_preconditioner(MassStrategymass,SchurStrategypotential,Policyfactorization={}) { returnGravityPreconditioner<Gradient,Potential,MassStrategy,SchurStrategy,Policy>{.mass_inverse=mass,.potential_inverse=potential,.factorization=factorization}; } [[nodiscard]]inlineautomake_gravity_preconditioner() { returnmake_gravity_preconditioner(strategies::inverse::Chebyshev{.order=5,.power_iterations=20},strategies::inverse::FixedAMG{.cycles=3}); } }//namespaceserif::solver::preconditioner