MC_HAMR  v0.01
Monte Carlo Simulation Software for Atomistic Models of Magnetic Materials for Heat Assisted Magnetic Recording
hamiltonian.hpp
Go to the documentation of this file.
1 #ifndef _HAMIL
2 #define _HAMIL
3 
4 #include "field_type.hpp"
5 #include "array_alloc.hpp"
6 #include <vector>
7 
8 #ifndef _PI
9 #define _PI 3.141592653589793
10 #endif
11 
12 class field_type;
13 
14 class ham_type
15 {
16 protected:
17  int dim;
18 public:
19  virtual double calc_E(field_type* lattice) {return 0;}
20  virtual double dE(field_type* lattice, std::vector<int>& position) {return 0;}
21  virtual std::vector<double> calc_M(field_type* lattice) {}
22  virtual std::vector<double> calc_subM(field_type* lattice, int subnumber) {}
23  virtual double get_J() const {return 0;}
24  virtual double get_H() const {return 0;}
25  virtual std::vector<double> get_Js() const {}
26  virtual std::vector<double> get_Hs() const {}
27  virtual double get_K() const {return 0;}
28  virtual void get_test(double &x, double &y, double &z){}
29  virtual void init_dim(field_type* field) {}
30  virtual void set_H(double Hin) {}
31  virtual std::vector<double> calc_top_charge(field_type* lattice) {}
32  // virtual double get_Dx(){return 0;}
33  // virtual double get_Dy(){return 0;}
34  // virtual std::vector<double>* get_xs(){return NULL;}
35  // virtual std::vector<double>* get_ys(){return NULL;}
36  // virtual std::vector<double>* get_zs(){return NULL;}
37  // virtual std::vector<double>* get_hs(){return NULL;}
38  // virtual std::vector<double>* get_Rms(){return NULL;}
39  // virtual std::vector<double>* get_Rns(){return NULL;}
40  // virtual std::vector<heis_spin>* get_ks(){return NULL;}
41  // virtual double get_ani(){return 0;}
42  // virtual double get_Ms(){return 0;}
43 };
44 
45 class ham_ising: public ham_type
46 {
47 private:
48  double H, J;
49  int* adj;
50 public:
52  ham_ising(double Hin, double Jin){H = Hin; J = Jin;}
53  ham_ising(ham_type& other);
54  ~ham_ising(){dealloc_1darr<int>(adj);}
55  double calc_E(field_type* lattice);
56  std::vector<double> calc_M(field_type* lattice);
57  std::vector<double> calc_subM(field_type* lattice, int subnumber);
58  double dE(field_type* lattice, std::vector<int>& position);
59  double get_J() const {return J;}
60  double get_H() const {return H;}
61  ham_ising& operator=(ham_type& other);
62  void init_dim(field_type* field);
63  void set_H(double Hin) {H = Hin;}
64 };
65 
66 class ham_heis: public ham_type
67 {
68 protected:
69  std::vector<double> H, J;
70  double** adj;
71  std::vector<double> vsum, curr, H_sum, J_sum, test;
72  std::vector<double> tchar, s2, s3, sbuff;
73  std::vector<int> pos;
74  bool is3d;
76 public:
78  ham_heis(double Hin, double Jin);
79  ham_heis(ham_type& other);
80  ~ham_heis(){dealloc_2darr<double>(4, adj);}
81  virtual double calc_E(field_type* lattice);
82  std::vector<double> calc_M(field_type* lattice);
83  std::vector<double> calc_subM(field_type* lattice, int subnumber);
84  virtual double dE(field_type* lattice, std::vector<int>& position);
85  std::vector<double> get_Js() const {return J;}
86  std::vector<double> get_Hs() const {return H;}
87  ham_heis& operator=(ham_type& other);
88  virtual void init_dim(field_type* field);
89  void get_test(double &x, double &y, double &z)
90  {x = test[0]; y = test[1]; z = test[2];}
91  void set_H(double Hin) {H[2] = Hin;}
92  std::vector<double> calc_top_charge(field_type* lattice);
93 };
94 
95 class ham_FePt: public ham_heis
96 {
97 private:
98  std::vector<int> pos2, dxs, dys, dzs;
99  std::vector<double> Js, adj_curr, d_ijs;
100  double d0;
101 public:
102  ham_FePt();
103  ham_FePt(double Hin);
104  ham_FePt(ham_type& other);
106  double calc_E(field_type* lattice);
107  double dE(field_type* lattice, std::vector<int>& position);
108  ham_FePt& operator=(ham_type& other);
109  void read_Js();
110  void init_dim(field_type* field);
111 };
112 
113 class ham_skyrm: public ham_heis
114 {
115 private:
116  double K;
117  int dirs[6];
118  int mod[6];
119  std::vector<double> cmp;
120  std::vector<double> J2_sum;
121 public:
123  ham_skyrm(double Hin, double Jin, double Kin);
124  ham_skyrm(const ham_type& other);
126  virtual double calc_E(field_type* lattice);
127  virtual double dE(field_type* lattice, std::vector<int>& position);
128  ham_skyrm& operator=(const ham_type& other);
129  double get_K() const {return K;}
130  void set_dirs();
131 };
132 
133 #endif
virtual std::vector< double > get_Js() const
Definition: hamiltonian.hpp:25
void get_test(double &x, double &y, double &z)
Definition: hamiltonian.hpp:89
bool is3d
Definition: hamiltonian.hpp:74
std::vector< int > pos
Definition: hamiltonian.hpp:73
virtual std::vector< double > calc_M(field_type *lattice)
Definition: hamiltonian.hpp:21
Definition: hamiltonian.hpp:95
Definition: hamiltonian.hpp:66
virtual double get_J() const
Definition: hamiltonian.hpp:23
ham_ising(double Hin, double Jin)
Definition: hamiltonian.hpp:52
~ham_skyrm()
Definition: hamiltonian.hpp:125
virtual void set_H(double Hin)
Definition: hamiltonian.hpp:30
~ham_heis()
Definition: hamiltonian.hpp:80
double get_J() const
Definition: hamiltonian.hpp:59
std::vector< double > J
Definition: hamiltonian.hpp:69
ham_skyrm()
Definition: hamiltonian.hpp:122
virtual double dE(field_type *lattice, std::vector< int > &position)
Definition: hamiltonian.hpp:20
virtual std::vector< double > calc_top_charge(field_type *lattice)
Definition: hamiltonian.hpp:31
std::vector< double > tchar
Definition: hamiltonian.hpp:72
void set_H(double Hin)
Definition: hamiltonian.hpp:63
Definition: hamiltonian.hpp:45
int mod(int a, int b)
virtual double get_K() const
Definition: hamiltonian.hpp:27
~ham_ising()
Definition: hamiltonian.hpp:54
virtual double get_H() const
Definition: hamiltonian.hpp:24
double ** adj
Definition: hamiltonian.hpp:70
~ham_FePt()
Definition: hamiltonian.hpp:105
virtual void get_test(double &x, double &y, double &z)
Definition: hamiltonian.hpp:28
Definition: hamiltonian.hpp:14
std::vector< double > get_Hs() const
Definition: hamiltonian.hpp:86
int dim
Definition: hamiltonian.hpp:17
ham_heis()
Definition: hamiltonian.hpp:77
Definition: hamiltonian.hpp:113
std::vector< double > get_Js() const
Definition: hamiltonian.hpp:85
Definition: field_type.hpp:13
double get_K() const
Definition: hamiltonian.hpp:129
virtual void init_dim(field_type *field)
Definition: hamiltonian.hpp:29
virtual std::vector< double > get_Hs() const
Definition: hamiltonian.hpp:26
std::vector< double > vsum
Definition: hamiltonian.hpp:71
ham_ising()
Definition: hamiltonian.hpp:51
void set_H(double Hin)
Definition: hamiltonian.hpp:91
int tchar_size
Definition: hamiltonian.hpp:75
virtual double calc_E(field_type *lattice)
Definition: hamiltonian.hpp:19
double get_H() const
Definition: hamiltonian.hpp:60
virtual std::vector< double > calc_subM(field_type *lattice, int subnumber)
Definition: hamiltonian.hpp:22