summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fourier.cpp2
-rw-r--r--log-fourier_integrator.cpp25
2 files changed, 22 insertions, 5 deletions
diff --git a/fourier.cpp b/fourier.cpp
index bb1c92f..15cad52 100644
--- a/fourier.cpp
+++ b/fourier.cpp
@@ -169,7 +169,7 @@ std::vector<Complex> LogarithmicFourierTransform::fourier(const std::vector<Real
}
fftw_execute(â_to_a);
for (unsigned n = 0; n < N; n++) {
- ĉ[n] += exp(-k * ω(n)) * a[(pad - 1)*N+n].real() / (Real)(pad*N);
+ ĉ[n] += exp(-k * ω(n)) * a[(pad - 1)*N+n] / (Real)(pad*N);
}
}
diff --git a/log-fourier_integrator.cpp b/log-fourier_integrator.cpp
index 177db46..eda4945 100644
--- a/log-fourier_integrator.cpp
+++ b/log-fourier_integrator.cpp
@@ -12,7 +12,7 @@ int main(int argc, char* argv[]) {
Real Δτ = 0.1;
Real k = 0.1;
- Real ε = 1e-16;
+ Real ε = 1e-13;
Real γ = 1;
Real βₘₐₓ = 0.7;
Real Δβ = 0.01;
@@ -99,7 +99,8 @@ int main(int argc, char* argv[]) {
for (unsigned n = 0; n < N; n++) {
Rtnew[n] = (1.0 + pow(β, 2) * RddfCt[n] * Rt[n]) / (μ + 1i * fft.ν(n));
- Ctnew[n] = (2 * Γ₀ * std::conj(Rt[n]) / (1 + pow(τ₀ * fft.ν(n), 2)) + pow(β, 2) * (RddfCt[n] * Ct[n] + dfCt[n] * std::conj(Rt[n]))) / (μ + 1i * fft.ν(n));
+ Ctnew[n] = (2 * Γ₀ * std::conj(Rtnew[n]) / (1 + pow(τ₀ * fft.ν(n), 2)) + pow(β, 2) * (RddfCt[n] * Ct[n] + dfCt[n] * std::conj(Rtnew[n]))) / (μ + 1i * fft.ν(n));
+// Ctnew[n] = - 2 * Γ₀ * Rtnew[n].imag() / (1 + pow(τ₀ * fft.ν(n), 2)) / fft.ν(n);
}
std::vector<Real> Cnew = fft.inverse(Ctnew);
@@ -124,12 +125,28 @@ int main(int argc, char* argv[]) {
// std::cerr << ΔC << std::endl;
}
- std::cerr << β << " " << μ << " " << Ct[0].real() << std::endl;
+ /* Integrate the energy using Simpson's rule */
+ Real E = 0;
+ for (unsigned i = 0; i < N/2-1; i++) {
+ Real h₂ᵢ = fft.t(2*i+1) - fft.t(2*i);
+ Real h₂ᵢ₊₁ = fft.t(2*i+2) - fft.t(2*i+1);
+ Real f₂ᵢ = R[2*i] * df(λ, p, s, C[2*i]);
+ Real f₂ᵢ₊₁ = R[2*i+1] * df(λ, p, s, C[2*i+1]);
+ Real f₂ᵢ₊₂ = R[2*i+2] * df(λ, p, s, C[2*i+2]);
+ E += (h₂ᵢ + h₂ᵢ₊₁) / 6 * (
+ (2 - h₂ᵢ₊₁ / h₂ᵢ) * f₂ᵢ
+ + pow(h₂ᵢ + h₂ᵢ₊₁, 2) / (h₂ᵢ * h₂ᵢ₊₁) * f₂ᵢ₊₁
+ + (2 - h₂ᵢ / h₂ᵢ₊₁) * f₂ᵢ₊₂
+ );
+ }
+ E *= β;
+
+ std::cerr << β << " " << μ << " " << Ct[0].real() << " " << E << std::endl;
β += Δβ;
}
for (unsigned i = 0; i < N; i++) {
- std::cout << fft.t(i) << " " << Rt[i].imag() << std::endl;
+ std::cout << fft.t(i) << " " << C[i] << std::endl;
}
return 0;