module TBit.Systems.SquareLattice where

import TBit.Types
import TBit.Parameterization
import Numeric.LinearAlgebra.HMatrix
import Data.Complex (conjugate)
import Data.Map as M hiding ((!))

parameters = Parameters { scalarParams = loadParams [("m", 1.0)]
                        , vectorParams = M.empty
                        , latticeData  = [ vector [0,1] , vector [1,0] ]
                        , meshingData  = Spacing 0.025}

hgteHamiltonian :: Parameterized Hamiltonian
hgteHamiltonian = do m <- getScalar "m"
                     let mass k = 2 + m - ((cos (k!0) + cos(k!1)) :+ 0.0)
                     let off k = sin (k!0) :+ (negate $ sin (k!1))
                     return $ \k -> (2 >< 2)
                            $ [ mass k ,             off k
                              , conjugate (off k)  , negate $ mass k ]