%  splattice  Lattice Hamiltonian for a 2D spin model with nn interaction with aperiodic
%             boundary condition; sparse version.
%   splattice(op1,op2,Nx,Ny) gives the lattice Hamiltonian as a sparse matrix for
%   a 2D spin for Nx*Ny qubits. op1 and op2 define the nearest-neighbor interaction.
%   For the Hamiltonian aperiodic boundary condition is used.

function Hzz=splattice(op1,op2,Nx,Ny)

N=Nx*Ny;
Hzz=sparse(2^N,2^N);

for iy=0:Ny-1
for ix=1:Nx-1
index=ix+Nx*iy;
Hzz=Hzz+spinteract(op1,op2,index,index+1,N);
disp(['x  ' num2str(index) ',' num2str(index+1)])
end %for
%%% Periodic BC
%%if Nx>2,
%%   Hzz=Hzz+spinteract(op2,op1,Nx*iy+1,Nx*iy+Nx,N);
%%   disp(['px ' num2str(Nx*iy+Nx) ',' num2str(Nx*iy+1) ])
%%end %if
end %for
for ix=1:Nx
for iy=0:Ny-2
index=ix+Nx*iy;
Hzz=Hzz+spinteract(op1,op2,index,index+Nx,N);
disp(['y  ' num2str(index) ',' num2str(index+Nx)])
end %for
%%% Periodic BC
%%if Ny>2,
%%   Hzz=Hzz+spinteract(op2,op1,ix,ix+(Ny-1)*Nx,N);
%%   disp(['py ' num2str(ix+(Ny-1)*Nx) ',' num2str(ix)])
%%end %if
end %for