summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--log-fourier_integrator.cpp10
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ₜ << " " << γ;
}