A parallel C++ Library for Simulations in the Heisenberg Model
model.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <vector>
4 #include <cmath>
5 #include <cstdlib>
6 #include <ctime>
7 #include <iostream>
8 #include <random>
9 
10 #ifdef _OPENMP
11  #include <omp.h>
12 #endif
13 
14 #include "grid/grid.h"
15 
16 #include <cuda_runtime.h>
17 #include <curand.h>
18 #include <curand_kernel.h>
19 
24 #define CUDA_CALL(x) do { if((x)!=cudaSuccess) { \
25  printf("Error at %s:%d\n",__FILE__,__LINE__);\
26  return;}} while(0)
27 
32 #define CURAND_CALL(x) do { if((x)!=CURAND_STATUS_SUCCESS) { \
33  printf("Error at %s:%d\n",__FILE__,__LINE__);\
34  return;}} while(0)
35 
36 
37 namespace HB
38 {
40  class Model
41  {
42  public:
43  Model() = default;
44  /****************************************************************************/
51  Model(float J, float3 B) : mJ(J), mB(B) {};
52 
53  virtual ~Model() = default;
54 
55  /****************************************************************************/
59  virtual float calcEnergy(const Grid<short int> &grid) = 0;
60 
61  /****************************************************************************/
65  virtual float calcMagnetization(const Grid<short int> &grid) = 0;
66 
67  /****************************************************************************/
70  float3 getBField() const {return mB;}
71 
72  /****************************************************************************/
75  float getCouplingConstant() const {return mJ;}
76 
77  /****************************************************************************/
83  void setBField(const float3 B) {mB = B;}
84 
85  /****************************************************************************/
90  void setCouplingConstant(const float J) {mJ = J;}
91 
92  /****************************************************************************/
97  virtual float calcEnergy(const Grid<short int> &grid, const dim3 index) = 0;
98 
99  /****************************************************************************/
108  virtual void flip(const dim3 index, Grid<short int> &grid) = 0;
109 
110  virtual void simulate() const = 0;
111 
112  float3 mB;
113  float mJ;
114 };
115 }
HB::Model::simulate
virtual void simulate() const =0
HB::Model::Model
Model(float J, float3 B)
constructs a model describing spins on a grid
Definition: model.h:51
HB::Model::setCouplingConstant
void setCouplingConstant(const float J)
sets the coupling constant of the model
Definition: model.h:90
HB::Model
An abstract class representing the model describing the spins. A model class has to derive from it an...
Definition: model.h:41
HB::Model::mJ
float mJ
Definition: model.h:113
HB::Model::~Model
virtual ~Model()=default
grid.h
HB::Model::calcEnergy
virtual float calcEnergy(const Grid< short int > &grid)=0
calculates the overall energy of the underlying grid according to the model
HB::Model::flip
virtual void flip(const dim3 index, Grid< short int > &grid)=0
flips randomly a spin
HB::Model::getCouplingConstant
float getCouplingConstant() const
returns the coupling constant of the model
Definition: model.h:75
HB::Model::calcMagnetization
virtual float calcMagnetization(const Grid< short int > &grid)=0
calculates the overall magnetization of the underlying grid according to the model
HB::Model::calcEnergy
virtual float calcEnergy(const Grid< short int > &grid, const dim3 index)=0
returns the energy after one spin is flipped
HB
Definition: grid.h:16
HB::Grid
A class storing spin values as a grid and certain meta information.
Definition: grid.h:36
HB::Model::mB
float3 mB
Definition: model.h:112
HB::Model::Model
Model()=default
HB::Model::getBField
float3 getBField() const
returns the magnetic flux density of the model
Definition: model.h:70
HB::Model::setBField
void setBField(const float3 B)
sets the magnetic flux density of the model
Definition: model.h:83