diff --git a/libmeanfield/interface/solver/gravity_subsystem.cppm b/libmeanfield/interface/solver/gravity_subsystem.cppm index b6fd8c8..84a7865 100644 --- a/libmeanfield/interface/solver/gravity_subsystem.cppm +++ b/libmeanfield/interface/solver/gravity_subsystem.cppm @@ -291,6 +291,16 @@ namespace mean_field::solver::detail { !std::same_as) && ...)> { }; + template struct BuiltinStellarGravityProblem : std::false_type { }; + template + struct BuiltinStellarGravityProblem> + : std::true_type { }; + + template struct BuiltinPreparedGravityInverse : std::false_type { }; + template + struct BuiltinPreparedGravityInverse> + : std::true_type { }; + [[nodiscard]] inline bool CollectiveGravityApplicationChoice( const bool local, const MPI_Comm communicator @@ -306,7 +316,8 @@ namespace mean_field::solver::detail { export namespace mean_field::solver { template - requires std::same_as && + requires detail::BuiltinStellarGravityProblem::value && + std::same_as && detail::SpecificationsLeaveGravityRows::ContributionJacobianCouplings>::value struct GravityCompactOperatorAccess> { @@ -360,7 +371,13 @@ export namespace mean_field::solver { typename Block::StructureComponent::GravityComponent::ResidualBlocks, utils::blocks::type_list< utils::blocks::gravity::gradient::residual, - utils::blocks::gravity::poisson::residual>> + utils::blocks::gravity::poisson::residual>> && + requires(const preconditioning::PreparedStellarPreconditioner &inverse) { + requires detail::BuiltinPreparedGravityInverse< + std::remove_cvref_t>::value; + } struct GravityCompactInverseAccess< normalization::NormalizedStellarEquilibriumOperator, normalization::