richard-evans / vampire

Atomistic simulator for magnetic materials
GNU General Public License v2.0
122 stars 91 forks source link

Binder Cumulant added to develop branch, for calculation of Tc #81

Closed milton-persson closed 2 years ago

milton-persson commented 2 years ago

Changes to be committed: modified: hdr/stats.hpp new file: src/statistics/binder_cumulant.cpp modified: src/statistics/data.cpp modified: src/statistics/initialize.cpp modified: src/statistics/makefile modified: src/statistics/reset.cpp modified: src/statistics/update.cpp modified: src/vio/datalog.cpp modified: src/vio/internal.hpp modified: src/vio/match.cpp modified: src/vio/outputfunctions.cpp

It is hard to find Tc for a material since it changes with the size of the system, but the 4th order binder cumulant can be written as a function of the ratio L/xi, where L is the size of the system and xi is the correlation length. Independent of L, this ratio is zero at Tc since the correlation length diverges. Therefore, the Tc can be found by simulating systems of different size and seeing where the binder cumulants from these different simulations intersect.

The formula is U_L = 1 - <M^4>/(3*<M^2>^2) and this implementation in Vampire follows that of the susceptibility very closely.

There is both system wide binder cumulant, and material specific binder cumulant, specified in the input file with: output:binder-cumulant output:material-binder-cumulant

The attached image shows the binder cumulant included into the Curie temperature tutorial simulation on the Vampire website. A smaller temperature step is used, and near/above Tc the number of time steps is increased and simulations are repeated for an average.

tutorialExample_binderCumulant