@@ -50,33 +50,49 @@ void IsingMC::RandomPoint(unsigned& m, unsigned& n) {
50
50
double IsingMC::SpinEnergy (unsigned m, unsigned n) {
51
51
52
52
double E = 0 ;
53
- for (int i = m - 1 ; i < m + 1 ; i += 2 ) {
54
- for (int j = n - 1 ; j < n + 1 ; j += 2 ) {
55
-
56
- unsigned ii = i, jj = j;
57
- if (i < 0 ) ii = M - 1 ;
58
- else if (i >= M - 1 ) ii = 0 ;
59
-
60
- if (j < 0 ) jj = N - 1 ;
61
- else if (j >= N - 1 ) jj = 0 ;
53
+ int i, j;
54
+
55
+ j = n;
56
+ for (i = m - 1 ; i < m + 1 ; i += 2 ) {
57
+ unsigned ii;
58
+ if (i < 0 ) ii = M - 1 ;
59
+ else if (i > M - 1 ) ii = 0 ;
60
+ else ii = i;
61
+ E -= Lattice[ii][j] * Lattice[m][n] * J;
62
+ }
62
63
63
- E -= Lattice[ii][jj] * Lattice[m][n] * J;
64
- }
64
+ i = m;
65
+ for (j = n - 1 ; j < n + 1 ; j += 2 ) {
66
+ unsigned jj;
67
+ if (j < 0 ) jj = N - 1 ;
68
+ else if (j > N - 1 ) jj = 0 ;
69
+ else jj = j;
70
+ E -= Lattice[i][jj] * Lattice[m][n] * J;
65
71
}
72
+
66
73
return E;
67
74
}
68
75
69
76
double IsingMC::SpinUHEnergy (unsigned m, unsigned n) {
70
77
71
78
double E = 0 ;
72
- for (unsigned i = m; i <= m + 1 ; i++) {
73
- for (unsigned j = n; j <= n + 1 ; j++) {
74
- int ii = i > M - 1 ? 0 : i;
75
- int jj = j > N - 1 ? 0 : j;
76
79
77
- E -= Lattice[ii][jj] * Lattice[m][n] * J;
78
- }
80
+ unsigned i, j;
81
+
82
+ {
83
+ i = m + 1 ;
84
+ j = n;
85
+ unsigned ii = i > M - 1 ? 0 : i;
86
+ E -= Lattice[ii][j] * Lattice[m][n] * J;
87
+ }
88
+
89
+ {
90
+ i = m;
91
+ j = n + 1 ;
92
+ unsigned jj = j > N - 1 ? 0 : j;
93
+ E -= Lattice[i][jj] * Lattice[m][n] * J;
79
94
}
95
+
80
96
return E;
81
97
}
82
98
@@ -93,9 +109,8 @@ double IsingMC::Energy() {
93
109
94
110
double IsingMC::EnergyDiff (unsigned m, unsigned n) {
95
111
96
- double de = 0 ;
97
-
98
- return de;
112
+ double de = SpinEnergy (m, n);
113
+ return - 2 * de;
99
114
}
100
115
101
116
void IsingMC::Step () {
0 commit comments