diff options
-rw-r--r-- | log-fourier_integrator.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/log-fourier_integrator.cpp b/log-fourier_integrator.cpp index b4b705f..b819456 100644 --- a/log-fourier_integrator.cpp +++ b/log-fourier_integrator.cpp @@ -132,6 +132,7 @@ int main(int argc, char* argv[]) { while (β < βₘₐₓ) { Real γ = γ₀; Real ΔCₜ = 100; + Real ΔCₜ₋₁ = 101; while (ΔCₜ > ε) { auto [RddfCt, dfCt] = RddfCtdfCt(fft, Cₜ, Rₜ, p, s, λ); @@ -183,6 +184,15 @@ int main(int argc, char* argv[]) { Ȓₜ[i] += γ * (Ȓₜ₊₁[i] - Ȓₜ[i]); } + if (ΔCₜ > ΔCₜ₋₁ * 5) { + γ = std::max(γ / 2, (Real)1e-2); + } + if (ΔCₜ < ΔCₜ₋₁) { + γ = std::min(1.001 * γ, (Real)1); + } + + ΔCₜ₋₁ = ΔCₜ; + std::cerr << "\x1b[2K" << "\r"; std::cerr << β << " " << Δβ << " " << μₜ << " " << ΔCₜ << " " << γ; } |