This program simulates the topological oscillator model. This is a simple one-dimensional model that has non-trivial characteristics, such as a topological charge. A topological charge is also present in lattice QCD models, therefore this model can be used to test ideas for new methods that should later be applied to four-dimensional lattice QCD. The topological osciallator describes a particle with some mass M moving on a cirle with radius R (moment of inertia of particle I=M*R^2) in time. Time is discretized in d time slices with distance a (periodic boundaries are used) and the position of the particle at time slice i is defined by an angle phi \in [0, 2pi). The action of the model is given by
The simulation computes the expectation value of an observable in the model, here for example the topological charge,
Computing the expectation value is done by integrating the weighted observable over all possible model-configurations,
Running the simulation is a two-step process:
This is done using a Markov-chain Monte Carlo (MCMC) method. This results in N_{steps} different sampling points [phi]j, j in {1,...,N{steps}} that are distributed according to the distribution p[phi].
You can choose here between using the well known Metropolis algorithm or the Cluster algorithm, which works very efficient (especially for small a) for this model, see https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.62.361. The MCMC methods need some thermalization phase before giving some reasonable values.
./createConfig input/createConfig.in(You can define the model parameters, MCMC parameters and the algorithm in the file input/createConfig.in)
The observable is computed for all configurations, Q[phi]_j. Because the configurations are distributed according to p[phi], the expectation value is given by the average of all computed observables
./computeCharge_MC input/computeCharge.in(The model and MCMC parameters specified in this file have to be the ones of the computed configurations.)
I also wrote code for methods to test alternative integration methods, but haven't found time until now to refactor and put it here.