diff options
Diffstat (limited to 'log_get_energy.cpp')
-rw-r--r-- | log_get_energy.cpp | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/log_get_energy.cpp b/log_get_energy.cpp new file mode 100644 index 0000000..7a531fd --- /dev/null +++ b/log_get_energy.cpp @@ -0,0 +1,82 @@ +#include "log-fourier.hpp" +#include <getopt.h> +#include <iostream> +#include <fstream> + +int main(int argc, char* argv[]) { + /* Model parameters */ + unsigned p = 2; + unsigned s = 2; + Real λ = 0.5; + Real τ₀ = 0; + + /* Log-Fourier parameters */ + unsigned log2n = 8; + Real Δτ = 0.1; + Real k = 0.1; + + /* Iteration parameters */ + Real β₀ = 0; + Real βₘₐₓ = 0.7; + Real Δβ = 0.01; + + int opt; + + while ((opt = getopt(argc, argv, "p:s:2:T:t:b:d:k:D:0:")) != -1) { + switch (opt) { + case 'p': + p = atoi(optarg); + break; + case 's': + s = atoi(optarg); + break; + case '2': + log2n = atoi(optarg); + break; + case 't': + τ₀ = atof(optarg); + break; + case 'b': + βₘₐₓ = atof(optarg); + break; + case 'd': + Δβ = atof(optarg); + break; + case 'k': + k = atof(optarg); + break; + case 'D': + Δτ = atof(optarg); + break; + case '0': + β₀ = atof(optarg); + break; + default: + exit(1); + } + } + + unsigned N = pow(2, log2n); + + LogarithmicFourierTransform fft(N, k, Δτ, 4); + + std::vector<Real> C(N); + std::vector<Real> R(N); + std::vector<Complex> Ct(N); + std::vector<Complex> Rt(N); + + Real β = β₀; + + while (β += Δβ, β <= βₘₐₓ) { + if (logFourierLoad(C, R, Ct, Rt, p, s, λ, τ₀, β, log2n, Δτ, k)) { + + Real e = energy(fft, C, R, p, s, λ, β); + + Real μ = estimateZ(fft, C, Ct, R, Rt, p, s, λ, τ₀, β); + + std::cout << β << " " << μ << " " << Ct[0].real() << " " << e << std::endl; + } + } + + return 0; +} |