1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
// Copyright (C) 2008 - Yann COLLETTE <yann.collette@renault.com>
//
// This file must be used under the terms of the CeCILL.
// This source file is licensed as described in the file COPYING, which
// you should have received as part of this distribution. The terms
// are also available at
// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
function [E_Value, M_Value] = ising2d(Var, J, H, Magnet, Connect)
[nargout, nargin] = argn();
M_Value_defined = (nargout==2);
if (~isdef('Connect','local')) then
Connect = %F;
end
if (~isdef('Magnet','local')) then
Magnet = %F;
end
if (~isdef('H','local')) then
H = 1.0;
end
Value = 0;
//J = J/2;
Size = size(Var,1);
for i=2:Size-1
for j=2:Size-1
Value = Value + J*Var(i,j)*(Var(i-1,j) + Var(i+1,j) + Var(i,j-1) + Var(i,j+1));
end
end
if (~Connect) then
// First line
for j=2:Size-1
Value = Value + J*Var(1,j)*(Var(2,j) + Var(1,j-1) + Var(1,j+1));
end
// Last line
for j=2:Size-1
Value = Value + J*Var(Size,j)*(Var(Size-1,j) + Var(Size,j-1) + Var(Size,j+1));
end
// First column
for i=2:Size-1
Value = Value + J*Var(i,1)*(Var(i-1,1) + Var(i+1,1) + Var(i,2));
end
// Second column
for i=2:Size-1
Value = Value + J*Var(i,Size)*(Var(i-1,Size) + Var(i+1,Size) + Var(i,Size-1));
end
// First corner
Value = Value + J*Var(1,1)*(Var(2,1) + Var(1,2));
// Second corner
Value = Value + J*Var(Size,1)*(Var(Size-1,1) + Var(1,2));
// Third corner
Value = Value + J*Var(1,Size)*(Var(2,Size) + Var(1,Size-1));
// Fourth corner
Value = Value + J*Var(Size,Size)*(Var(Size-1,Size) + Var(Size,Size-1));
else
// First line
for j=2:Size-1
Value = Value + J*Var(1,j)*(Var(Size,j) + Var(2,j) + Var(1,j-1) + Var(1,j+1));
end
// Last line
for j=2:Size-1
Value = Value + J*Var(Size,j)*(Var(Size-1,j) + Var(1,j) + Var(Size,j-1) + Var(Size,j+1));
end
// First column
for i=2:Size-1
Value = Value + J*Var(i,1)*(Var(i-1,1) + Var(i+1,1) + Var(i,Size) + Var(i,2));
end
// Second column
for i=2:Size-1
Value = Value + J*Var(i,Size)*(Var(i-1,Size) + Var(i+1,Size) + Var(i,Size-1) + Var(i,1));
end
// First corner
Value = Value + J*Var(1,1)*(Var(Size,1) + Var(2,1) + Var(1,Size) + Var(1,2));
// Second corner
Value = Value + J*Var(Size,1)*(Var(Size-1,1) + Var(1,1) + Var(1,Size) + Var(1,2));
// Third corner
Value = Value + J*Var(1,Size)*(Var(Size,Size) + Var(2,Size) + Var(1,1) + Var(1,Size-1));
// Fourth corner
Value = Value + J*Var(Size,Size)*(Var(Size-1,Size) + Var(1,Size) + Var(Size,Size-1) + Var(Size,1));
end
E_Value = - Value;
if (Magnet) then
M_Value = - H * sum(Var);
if (M_Value_defined) then
E_Value = E_Value + M_Value;
end
end
endfunction
|