diff options
Diffstat (limited to 'free_energy.cpp')
-rw-r--r-- | free_energy.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/free_energy.cpp b/free_energy.cpp new file mode 100644 index 0000000..6bfdf19 --- /dev/null +++ b/free_energy.cpp @@ -0,0 +1,53 @@ +#include <iostream> +#include <iomanip> + +#include "rbmp.hpp" + +int main(int argc, char* argv[]) { + unsigned n = 100; + unsigned m = 100; + Real T0 = 1; + Real T1 = 10; + Real ΔT = 1; + + int opt; + + while ((opt = getopt(argc, argv, "n:m:0:1:d:")) != -1) { + switch (opt) { + case 'n': + n = atoi(optarg); + break; + case 'm': + m = (unsigned)atof(optarg); + break; + case '0': + T0 = atof(optarg); + break; + case '1': + T1 = atof(optarg); + break; + case 'd': + ΔT = atof(optarg); + break; + default: + exit(1); + } + } + + Rng r; + AztecDiamond a(n); + + for (Real T = T0; T <= T1; T += ΔT) { + Real avgFreeEnergy = 0; + + for (unsigned i = 0; i < m; i++) { + a.setWeights(r); + a.computeWeights(T); + avgFreeEnergy += a.computeProbabilities(); + } + + std::cout << std::setprecision(20) << T << " " << - T * avgFreeEnergy / m / a.vertices.size() << std::endl; + } + + return 0; +} |