| 218 | } |
| 219 | |
| 220 | private boolean flip() { |
| 221 | int x = (int) (Math.random()*size); |
| 222 | int y = (int) (Math.random()*size); |
| 223 | int delta_M = -2*spinData[x][y]; |
| 224 | int delta_nn_sum = spinData[(x-1+size)%size][y]+spinData[(x+1)%size][y]+spinData[x][(y-1+size)%size] |
| 225 | +spinData[x][(y+1)%size]; |
| 226 | delta_nn_sum = -2*spinData[x][y]*delta_nn_sum; |
| 227 | double delta_E = -J*delta_nn_sum-H*delta_M; |
| 228 | if((delta_E<=0)||(Math.random()<Math.exp(-delta_E/T))) { |
| 229 | spinData[x][y] *= -1; |
| 230 | M += delta_M; |
| 231 | E += delta_E; |
| 232 | return true; |
| 233 | } else { |
| 234 | return false; |
| 235 | } |
| 236 | } |
| 237 | |
| 238 | /** |
| 239 | * Steps the ising model forward in time. |