Distinguish strategy failures and expose the actual trial tangent
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
module;
|
||||
|
||||
#include <concepts>
|
||||
#include <cstdint>
|
||||
#include <type_traits>
|
||||
#include <utility>
|
||||
|
||||
@@ -22,7 +23,7 @@ export namespace mean_field::solver::nonlinear {
|
||||
struct GravitySolveOptions final {
|
||||
LinearSolveControl control{.relativeTolerance = 1.0e-10, .absoluteTolerance = 1.0e-14,
|
||||
.maximumIterations = 300};
|
||||
linear::FGMRESOptions backend{.restartLength = 80};
|
||||
linear::FGMRESOptions backend{.restartLength = 80, .printLevel = -1};
|
||||
|
||||
void Validate() const { control.Validate(); backend.Validate(); }
|
||||
};
|
||||
@@ -64,14 +65,18 @@ export namespace mean_field::solver::nonlinear {
|
||||
template <typename Candidate>
|
||||
concept NewtonNumericalConfiguration = IsNewtonNumerics<std::remove_cvref_t<Candidate>>::value;
|
||||
|
||||
enum class LinearReportSpace : std::uint8_t { full_system, reduced_system, gravity_subsystem };
|
||||
|
||||
struct NumericalStrategyDiagnostics final {
|
||||
int polynomialChecks{0};
|
||||
int directionRepairs{0};
|
||||
double lastRepairFraction{0.0};
|
||||
double lastMeritDirectionalDerivative{0.0};
|
||||
int gravitySolves{0};
|
||||
int gravityIterations{0};
|
||||
int gravityFailures{0};
|
||||
std::uint64_t gravitySolves{0};
|
||||
std::uint64_t gravityIterations{0};
|
||||
std::uint64_t gravityFailures{0};
|
||||
std::uint64_t gravityPreparedFailures{0};
|
||||
LinearReportSpace lastLinearReportSpace{LinearReportSpace::full_system};
|
||||
double gravitySolveSeconds{0.0};
|
||||
double lastGravityTrueResidual{0.0};
|
||||
double lastGravityCorrectionNorm{0.0};
|
||||
|
||||
Reference in New Issue
Block a user