A parallel C++ Library for Simulations in the Heisenberg Model
simulation.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <random>
4 #include <thrust/reduce.h>
5 #include <thrust/execution_policy.h>
6 
7 #include "model/ising/ising.h"
8 
9 namespace HB
10 {
11 //__global__ void setupKernel(curandState *state, size_t seed, size_t n);
12 
14 {
15  public:
16  MetropolisSimulation(const Grid<short int> &grid, const float beta, const size_t steps) : mBeta(beta), mSteps(steps)
17  {
18  mGrid = std::make_shared<Grid<short int>>(grid);
19  }
20 
21  template<class M>
22  void operator()(const M& model) const
23  {
24  simulate(model);
25  }
26  private:
27  float mBeta{1.0f};
28  size_t mSteps{1000};
29  std::shared_ptr<Grid<short int>> mGrid{};
30  std::vector<float> mEnergies{};
31  std::vector<float> mMagnetization{};
32 
33 /*************************************************************************************************************/
44  template<class M>
45  void simulate(const M &model);
46 
47 /********************************************************************/
56  template <class M>
57  float metropolisSweep(const M &model);
58 };
59 
61 {
62  public:
63  MetropolisSimulationQt(const Grid<short int> &grid, const float beta) : mBeta(beta)
64  {
65  mGrid = std::make_shared<Grid<short int>>(grid);
66  }
67 
68  void operator()(const Ising &model) const
69  {
70  simulate(model);
71  }
72  private:
73  float mBeta{1.0f};
74  size_t mSteps{1000};
75  std::shared_ptr<Grid<short int>> mGrid{};
76 
77 /*************************************************************************************************************/
88  void simulate(const Ising &model);
89 
90 /********************************************************************/
99  float metropolisSweep(const Ising &model);
100 };
101 
103 {
104  public:
105  SimulatedAnnealing(const Grid<short int> &grid, const float beta, const size_t steps, const float3 temperatureSteps) : mBeta(beta), mSteps(steps), mTemperatureSteps(temperatureSteps)
106  {
107  mGrid = std::make_shared<Grid<short int>>(grid);
108  }
109 
110  template<class M>
111  void operator()(const M& model) const
112  {
113  simulate(model);
114  }
115  private:
116  float mBeta{1.0f};
117  size_t mSteps{1000};
118  float3 mTemperatureSteps{1.0f,0.0f,0.1f};
119  std::shared_ptr<Grid<short int>> mGrid{};
120  std::vector<float> mEnergies{};
121  std::vector<float> mMagnetization{};
122 
123 /*************************************************************************************************************************/
142  template<class M>
143  void simulate(const M &model);
144 };
145 
147 
148 /***********************************************************************************/
154 template <typename T> T mean(const std::vector<T> &o);
155 
156 /***********************************************************************************/
163 template <typename T> T covFunc(const size_t t, const std::vector<T> &o);
164 
165 /***********************************************************************************/
171 template <typename T> T intAuto(const std::vector<T> &o);
172 
173 /***********************************************************************************/
179 template <typename T> T error(const std::vector<T> &o);
180 
181 /***********************************************************************************/
188 template <typename T> T blockingError(const std::vector<T> &o, const size_t block_number);
189 
190 /***********************************************************************************/
199 template <typename T> T bootstrapError(const std::vector<T> &o, const size_t sample_size, const size_t sample_number, const T tau);
200 
201 /***********************************************************************************/
208 template <typename T> T errorProp(const std::vector<T> &o, const T tau);
209 
210 /**************************************************************************/
217 template <typename T> T errorPropEnergy(const std::vector<T> &energies, const T beta, const T tau, const size_t V);
218 
219 /***************************************************************************************/
226 template <typename T> T errorPropMagnetization(const std::vector<T> &magn, const T beta, const T tau, const size_t V);
227 
228 /***************************************************************************************/
234 template <typename T> size_t d2i(const T d);
235 
236 /***************************************************************************************/
246 template <typename T> void removeCorr(const std::vector<T> &o);
247 
248 /****************************************************************************/
257 template <typename T> T specificHeat(const std::vector<T> &energies, const T beta, const size_t V);
258 
259 /****************************************************************************/
268 template <typename T> T magnSusz(const std::vector<T> &magn, const T beta, const size_t V);
269 
270 using Models = std::vector<std::unique_ptr<HB::Model>>;
271 
272 void simulate(const Models &models);
273 }
HB::SimulatedAnnealing::mGrid
std::shared_ptr< Grid< short int > > mGrid
Definition: simulation.h:119
HB::MetropolisSimulationQt::simulate
void simulate(const Ising &model)
performs a production-run.
HB::SimulatedAnnealing::mSteps
size_t mSteps
Definition: simulation.h:117
HB::MetropolisSimulation::metropolisSweep
float metropolisSweep(const M &model)
performs one Monte-Carlo step, updating the entire grid associated with a certain model and calculate...
HB::MetropolisSimulation::operator()
void operator()(const M &model) const
Definition: simulation.h:22
HB::specificHeat
T specificHeat(const std::vector< T > &energies, const T beta, const size_t V)
computes the specific heat per Volume as secondary quantity for a given vector of energies
HB::errorProp
T errorProp(const std::vector< T > &o, const T tau)
calculates the error based on error propagation of a standard vector
HB::mean
T mean(const std::vector< T > &o)
calculates the mean value of a standard vector
HB::MetropolisSimulationQt::MetropolisSimulationQt
MetropolisSimulationQt(const Grid< short int > &grid, const float beta)
Definition: simulation.h:63
HB::intAuto
T intAuto(const std::vector< T > &o)
calculates the integrated autocorrelation time of a standard vector
ising.h
HB::MetropolisSimulationQt::mBeta
float mBeta
Definition: simulation.h:73
HB::MetropolisSimulationQt::metropolisSweep
float metropolisSweep(const Ising &model)
performs one Monte-Carlo step, updating the entire grid associated with a certain model and calculate...
HB::removeCorr
void removeCorr(const std::vector< T > &o)
removes correlation from a standard vector
HB::MetropolisSimulation::mEnergies
std::vector< float > mEnergies
Definition: simulation.h:30
HB::MetropolisSimulation::mMagnetization
std::vector< float > mMagnetization
Definition: simulation.h:31
HB::errorPropEnergy
T errorPropEnergy(const std::vector< T > &energies, const T beta, const T tau, const size_t V)
calculates the statistical error on energies using error propagation
HB::errorPropMagnetization
T errorPropMagnetization(const std::vector< T > &magn, const T beta, const T tau, const size_t V)
calculates the statistical error on magnetizations (magn) using error propagation
HB::MetropolisSimulation::mGrid
std::shared_ptr< Grid< short int > > mGrid
Definition: simulation.h:29
HB::MetropolisSimulationQt::operator()
void operator()(const Ising &model) const
Definition: simulation.h:68
HB::MetropolisSimulation::simulate
void simulate(const M &model)
performs a production-run.
HB::SimulatedAnnealing::operator()
void operator()(const M &model) const
Definition: simulation.h:111
HB::MetropolisSimulationQt::mSteps
size_t mSteps
Definition: simulation.h:74
HB::blockingError
T blockingError(const std::vector< T > &o, const size_t block_number)
calculates the blocking error of a standard vector
HB::MetropolisSimulationQt::mGrid
std::shared_ptr< Grid< short int > > mGrid
Definition: simulation.h:75
HB::SimulatedAnnealing::mEnergies
std::vector< float > mEnergies
Definition: simulation.h:120
HB::SimulatedAnnealing::mTemperatureSteps
float3 mTemperatureSteps
Definition: simulation.h:118
HB::simulate
void simulate(const Models &models)
HB::MetropolisSimulation::MetropolisSimulation
MetropolisSimulation(const Grid< short int > &grid, const float beta, const size_t steps)
Definition: simulation.h:16
HB::MetropolisSimulation::mBeta
float mBeta
Definition: simulation.h:27
HB::SimulatedAnnealing::mBeta
float mBeta
Definition: simulation.h:116
HB::SimulatedAnnealing::simulate
void simulate(const M &model)
Performs a production-run via simulated annealing.
HB::bootstrapError
T bootstrapError(const std::vector< T > &o, const size_t sample_size, const size_t sample_number, const T tau)
calculates the bootstrap error of a standard vector
HB
Definition: grid.h:16
HB::MetropolisSimulation
Definition: simulation.h:14
HB::SimulatedAnnealing
Definition: simulation.h:103
HB::Grid
A class storing spin values as a grid and certain meta information.
Definition: grid.h:36
HB::Models
std::vector< std::unique_ptr< HB::Model > > Models
Definition: simulation.h:270
HB::covFunc
T covFunc(const size_t t, const std::vector< T > &o)
calculates the covariance function up to a certain index of a standard vector
HB::SimulatedAnnealing::mMagnetization
std::vector< float > mMagnetization
Definition: simulation.h:121
HB::magnSusz
T magnSusz(const std::vector< T > &magn, const T beta, const size_t V)
computes the magnetic suszeptibility per Volume as secondary quantity for a given vector of magnetiza...
HB::MetropolisSimulationQt
Definition: simulation.h:61
HB::MetropolisSimulation::mSteps
size_t mSteps
Definition: simulation.h:28
HB::d2i
size_t d2i(const T d)
rounds a floating point value to an integer
HB::SimulatedAnnealing::SimulatedAnnealing
SimulatedAnnealing(const Grid< short int > &grid, const float beta, const size_t steps, const float3 temperatureSteps)
Definition: simulation.h:105
HB::error
T error(const std::vector< T > &o)
calculates the standard error (standard deviation) of a standard vector